/* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.privatespace.logging import com.android.privatespace.PrivateSpaceStatsLog /** * A utility object to convert a file size in bytes into a predefined size bucket category. * * This is used for logging and analytics to understand the distribution of file sizes without * storing the exact size of every file. */ object FileSizeBucketConverter { val oneKb = 1024L val tenKb = 10 * oneKb val oneHundredKb = 100 * oneKb val fiveHundredKb = 500 * oneKb val oneMb = 1024 * oneKb val tenMb = 10 * oneMb val oneHundredMb = 100 * oneMb val fiveHundredMb = 500 * oneMb val oneGb = 1024 * oneMb val twoGb = 2 * oneGb /** * Takes a file size in bytes and returns an integer constant representing the appropriate size * bucket. * * The buckets are defined based on common file size ranges (KB, MB, GB). * * @param bytes The size of the file in bytes. * @return An integer constant from [PrivateSpaceStatsLog] that represents the file size bucket. * Returns `FILE_SIZE_UNKNOWN` for negative input values. */ fun getFileSizeBucket(bytes: Long): Int { return when { bytes < 0 -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_UNKNOWN bytes <= oneKb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_0_TO_1_KB bytes <= tenKb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_1_TO_10_KB bytes <= oneHundredKb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_10_TO_100_KB bytes <= fiveHundredKb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_100_TO_500_KB bytes <= oneMb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_500_KB_TO_1_MB bytes <= tenMb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_1_TO_10_MB bytes <= oneHundredMb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_10_TO_100_MB bytes <= fiveHundredMb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_100_TO_500_MB bytes <= oneGb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_500_MB_TO_1_GB bytes <= twoGb -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_1_TO_2_GB else -> PrivateSpaceStatsLog .PRIVATE_SPACE_MOVE_CONTENT_EVENT__TOTAL_FAILURE_FILES_SIZE_BUCKET__FILE_SIZE_MORE_THAN_2_GB } } }