Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df0996f5 authored by Sanjana Sunil's avatar Sanjana Sunil
Browse files

[conflict] Merge "Include SDK sandbox while calculating app and user size"...

[conflict] Merge "Include SDK sandbox while calculating app and user size" into tm-dev am: 3b7c2c61 am: df6b7bd3

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/17124023

Change-Id: Iddf4b7726407c92d76ef0a0e2c3ff03a84a97557
parents d05028a8 df6b7bd3
Loading
Loading
Loading
Loading
+41 −1
Original line number Diff line number Diff line
@@ -2211,6 +2211,12 @@ static void collectQuotaStats(const std::string& uuid, int32_t userId,
                stats->dataSize += space;
            }
            deductDoubleSpaceIfNeeded(stats, doubleSpaceToBeDeleted, uid, uuid);
            int sdkSandboxUid = multiuser_get_sdk_sandbox_uid(userId, appId);
            if (sdkSandboxUid != -1) {
                if ((space = GetOccupiedSpaceForUid(uuid, sdkSandboxUid)) != -1) {
                    stats->dataSize += space;
                }
            }
            int cacheGid = multiuser_get_cache_gid(userId, appId);
            if (cacheGid != -1) {
                if ((space = GetOccupiedSpaceForGid(uuid, cacheGid)) != -1) {
@@ -2288,8 +2294,17 @@ static void collectManualStats(const std::string& path, struct stats* stats) {
    closedir(d);
}

void collectManualStatsForSubDirectories(const std::string& path, struct stats* stats) {
    const auto subDirHandler = [&path, &stats](const std::string& subDir) {
        auto fullpath = path + "/" + subDir;
        collectManualStats(fullpath, stats);
    };
    foreach_subdir(path, subDirHandler);
}

static void collectManualStatsForUser(const std::string& path, struct stats* stats,
        bool exclude_apps = false) {
                                      bool exclude_apps = false,
                                      bool is_sdk_sandbox_storage = false) {
    DIR *d;
    int dfd;
    struct dirent *de;
@@ -2314,6 +2329,11 @@ static void collectManualStatsForUser(const std::string& path, struct stats* sta
                continue;
            } else if (exclude_apps && (user_uid >= AID_APP_START && user_uid <= AID_APP_END)) {
                continue;
            } else if (is_sdk_sandbox_storage) {
                // In case of sdk sandbox storage (e.g. /data/misc_ce/0/sdksandbox/<package-name>),
                // collect individual stats of each subdirectory (shared, storage of each sdk etc.)
                collectManualStatsForSubDirectories(StringPrintf("%s/%s", path.c_str(), name),
                                                    stats);
            } else {
                collectManualStats(StringPrintf("%s/%s", path.c_str(), name), stats);
            }
@@ -2462,6 +2482,19 @@ binder::Status InstalldNativeService::getAppSize(const std::optional<std::string
            collectManualStats(dePath, &stats);
            ATRACE_END();

            // In case of sdk sandbox storage (e.g. /data/misc_ce/0/sdksandbox/<package-name>),
            // collect individual stats of each subdirectory (shared, storage of each sdk etc.)
            if (appId >= AID_APP_START && appId <= AID_APP_END) {
                ATRACE_BEGIN("sdksandbox");
                auto sdkSandboxCePath =
                        create_data_misc_sdk_sandbox_package_path(uuid_, true, userId, pkgname);
                collectManualStatsForSubDirectories(sdkSandboxCePath, &stats);
                auto sdkSandboxDePath =
                        create_data_misc_sdk_sandbox_package_path(uuid_, false, userId, pkgname);
                collectManualStatsForSubDirectories(sdkSandboxDePath, &stats);
                ATRACE_END();
            }

            if (!uuid) {
                ATRACE_BEGIN("profiles");
                calculate_tree_size(
@@ -2698,6 +2731,13 @@ binder::Status InstalldNativeService::getUserSize(const std::optional<std::strin
        collectManualStatsForUser(dePath, &stats);
        ATRACE_END();

        ATRACE_BEGIN("sdksandbox");
        auto sdkSandboxCePath = create_data_misc_sdk_sandbox_path(uuid_, true, userId);
        collectManualStatsForUser(sdkSandboxCePath, &stats, false, true);
        auto sdkSandboxDePath = create_data_misc_sdk_sandbox_path(uuid_, false, userId);
        collectManualStatsForUser(sdkSandboxDePath, &stats, false, true);
        ATRACE_END();

        if (!uuid) {
            ATRACE_BEGIN("profile");
            auto userProfilePath = create_primary_cur_profile_dir_path(userId);