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

Commit cfe17464 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

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

Change-Id: Iec25dcfff547601a2378ba0026c30b5454e72294
parents 740ac48f 7c191191
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);