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

Commit 3a970739 authored by Samiul Islam's avatar Samiul Islam Committed by Automerger Merge Worker
Browse files

Merge "Include SDK sandbox while calculating app and user size" am: 7c191191 am: cfe17464

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

Change-Id: Id8b2c36da571b9a152deefdf05827fd9787ee34e
parents 273cfc24 cfe17464
Loading
Loading
Loading
Loading
+41 −1
Original line number Diff line number Diff line
@@ -2208,6 +2208,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) {
@@ -2285,8 +2291,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;
@@ -2311,6 +2326,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);
            }
@@ -2458,6 +2478,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(
@@ -2694,6 +2727,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);