From e85d7ad7211127c4df01127917682151597733c4 Mon Sep 17 00:00:00 2001 From: Jeffrey Huang Date: Thu, 16 Jan 2020 13:02:22 -0800 Subject: [PATCH] Migrate pullAppSize and pullCategorySize Test: adb shell cmd stats pull-source 10027 Test: adb shell cmd stats pull-source 10028 Change-Id: I98515bad18afc3ee542369c77d9fea6775e2cbde --- .../server/stats/StatsCompanionService.java | 107 ------------- .../src/external/StatsPullerManager.cpp | 8 - .../stats/pull/StatsPullAtomService.java | 143 +++++++++++++++++- 3 files changed, 137 insertions(+), 121 deletions(-) diff --git a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java index c39e63a80900a..e2962f38506a0 100644 --- a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java @@ -722,103 +722,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { pulledData.add(e); } - private void pullAppSize(int tagId, long elapsedNanos, long wallClockNanos, - List pulledData) { - try { - String jsonStr = IoUtils.readFileAsString(DiskStatsLoggingService.DUMPSYS_CACHE_PATH); - JSONObject json = new JSONObject(jsonStr); - long cache_time = json.optLong(DiskStatsFileLogger.LAST_QUERY_TIMESTAMP_KEY, -1L); - JSONArray pkg_names = json.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY); - JSONArray app_sizes = json.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY); - JSONArray app_data_sizes = json.getJSONArray(DiskStatsFileLogger.APP_DATA_KEY); - JSONArray app_cache_sizes = json.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY); - // Sanity check: Ensure all 4 lists have the same length. - int length = pkg_names.length(); - if (app_sizes.length() != length || app_data_sizes.length() != length - || app_cache_sizes.length() != length) { - Slog.e(TAG, "formatting error in diskstats cache file!"); - return; - } - for (int i = 0; i < length; i++) { - StatsLogEventWrapper e = - new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeString(pkg_names.getString(i)); - e.writeLong(app_sizes.optLong(i, -1L)); - e.writeLong(app_data_sizes.optLong(i, -1L)); - e.writeLong(app_cache_sizes.optLong(i, -1L)); - e.writeLong(cache_time); - pulledData.add(e); - } - } catch (IOException | JSONException e) { - Slog.e(TAG, "exception reading diskstats cache file", e); - } - } - - private void pullCategorySize(int tagId, long elapsedNanos, long wallClockNanos, - List pulledData) { - try { - String jsonStr = IoUtils.readFileAsString(DiskStatsLoggingService.DUMPSYS_CACHE_PATH); - JSONObject json = new JSONObject(jsonStr); - long cacheTime = json.optLong(DiskStatsFileLogger.LAST_QUERY_TIMESTAMP_KEY, -1L); - - StatsLogEventWrapper e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__APP_SIZE); - e.writeLong(json.optLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - - e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__APP_DATA_SIZE); - e.writeLong(json.optLong(DiskStatsFileLogger.APP_DATA_SIZE_AGG_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - - e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__APP_CACHE_SIZE); - e.writeLong(json.optLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - - e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__PHOTOS); - e.writeLong(json.optLong(DiskStatsFileLogger.PHOTOS_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - - e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__VIDEOS); - e.writeLong(json.optLong(DiskStatsFileLogger.VIDEOS_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - - e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__AUDIO); - e.writeLong(json.optLong(DiskStatsFileLogger.AUDIO_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - - e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__DOWNLOADS); - e.writeLong(json.optLong(DiskStatsFileLogger.DOWNLOADS_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - - e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__SYSTEM); - e.writeLong(json.optLong(DiskStatsFileLogger.SYSTEM_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - - e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__OTHER); - e.writeLong(json.optLong(DiskStatsFileLogger.MISC_KEY, -1L)); - e.writeLong(cacheTime); - pulledData.add(e); - } catch (IOException | JSONException e) { - Slog.e(TAG, "exception reading diskstats cache file", e); - } - } - private void pullNumBiometricsEnrolled(int modality, int tagId, long elapsedNanos, long wallClockNanos, List pulledData) { final PackageManager pm = mContext.getPackageManager(); @@ -1469,16 +1372,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { break; } - case StatsLog.APP_SIZE: { - pullAppSize(tagId, elapsedNanos, wallClockNanos, ret); - break; - } - - case StatsLog.CATEGORY_SIZE: { - pullCategorySize(tagId, elapsedNanos, wallClockNanos, ret); - break; - } - case StatsLog.NUM_FINGERPRINTS_ENROLLED: { pullNumBiometricsEnrolled(BiometricsProtoEnums.MODALITY_FINGERPRINT, tagId, elapsedNanos, wallClockNanos, ret); diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index 663e17ef9ed94..96292a14197f4 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -95,14 +95,6 @@ std::map StatsPullerManager::kAllPullAtomInfo = { {{.atomTag = android::util::BATTERY_CYCLE_COUNT}, {.puller = new ResourceHealthManagerPuller(android::util::BATTERY_CYCLE_COUNT)}}, - // Size of app's code, data, and cache - {{.atomTag = android::util::APP_SIZE}, - {.puller = new StatsCompanionServicePuller(android::util::APP_SIZE)}}, - - // Size of specific categories of files. Eg. Music. - {{.atomTag = android::util::CATEGORY_SIZE}, - {.puller = new StatsCompanionServicePuller(android::util::CATEGORY_SIZE)}}, - // Number of fingerprints enrolled for each user. {{.atomTag = android::util::NUM_FINGERPRINTS_ENROLLED}, {.puller = new StatsCompanionServicePuller(android::util::NUM_FINGERPRINTS_ENROLLED)}}, diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index 10b48c5d6a635..be30c651c78a4 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -1604,19 +1604,150 @@ public class StatsPullAtomService extends SystemService { } private void registerAppSize() { - // No op. + int tagId = StatsLog.APP_SIZE; + mStatsManager.registerPullAtomCallback( + tagId, + null, // use default PullAtomMetadata values + (atomTag, data) -> pullAppSize(atomTag, data), + BackgroundThread.getExecutor() + ); } - private void pullAppSize() { - // No op. + private int pullAppSize(int atomTag, List pulledData) { + try { + String jsonStr = IoUtils.readFileAsString(DiskStatsLoggingService.DUMPSYS_CACHE_PATH); + JSONObject json = new JSONObject(jsonStr); + long cache_time = json.optLong(DiskStatsFileLogger.LAST_QUERY_TIMESTAMP_KEY, -1L); + JSONArray pkg_names = json.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY); + JSONArray app_sizes = json.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY); + JSONArray app_data_sizes = json.getJSONArray(DiskStatsFileLogger.APP_DATA_KEY); + JSONArray app_cache_sizes = json.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY); + // Sanity check: Ensure all 4 lists have the same length. + int length = pkg_names.length(); + if (app_sizes.length() != length || app_data_sizes.length() != length + || app_cache_sizes.length() != length) { + Slog.e(TAG, "formatting error in diskstats cache file!"); + return StatsManager.PULL_SKIP; + } + for (int i = 0; i < length; i++) { + StatsEvent e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeString(pkg_names.getString(i)) + .writeLong(app_sizes.optLong(i, /* fallback */ -1L)) + .writeLong(app_data_sizes.optLong(i, /* fallback */ -1L)) + .writeLong(app_cache_sizes.optLong(i, /* fallback */ -1L)) + .writeLong(cache_time) + .build(); + pulledData.add(e); + } + } catch (IOException | JSONException e) { + Slog.e(TAG, "exception reading diskstats cache file", e); + return StatsManager.PULL_SKIP; + } + return StatsManager.PULL_SUCCESS; } private void registerCategorySize() { - // No op. + int tagId = StatsLog.CATEGORY_SIZE; + mStatsManager.registerPullAtomCallback( + tagId, + null, // use default PullAtomMetadata values + (atomTag, data) -> pullCategorySize(atomTag, data), + BackgroundThread.getExecutor() + ); } - private void pullCategorySize() { - // No op. + private int pullCategorySize(int atomTag, List pulledData) { + try { + String jsonStr = IoUtils.readFileAsString(DiskStatsLoggingService.DUMPSYS_CACHE_PATH); + JSONObject json = new JSONObject(jsonStr); + long cacheTime = json.optLong( + DiskStatsFileLogger.LAST_QUERY_TIMESTAMP_KEY, /* fallback */ -1L); + + StatsEvent e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__APP_SIZE) + .writeLong(json.optLong( + DiskStatsFileLogger.APP_SIZE_AGG_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + + e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__APP_DATA_SIZE) + .writeLong(json.optLong( + DiskStatsFileLogger.APP_DATA_SIZE_AGG_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + + e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__APP_CACHE_SIZE) + .writeLong(json.optLong( + DiskStatsFileLogger.APP_CACHE_AGG_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + + e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__PHOTOS) + .writeLong(json.optLong( + DiskStatsFileLogger.PHOTOS_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + + e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__VIDEOS) + .writeLong( + json.optLong(DiskStatsFileLogger.VIDEOS_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + + e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__AUDIO) + .writeLong(json.optLong( + DiskStatsFileLogger.AUDIO_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + + e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__DOWNLOADS) + .writeLong( + json.optLong(DiskStatsFileLogger.DOWNLOADS_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + + e = StatsEvent.newBuilder() + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__SYSTEM) + .writeLong(json.optLong( + DiskStatsFileLogger.SYSTEM_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + + e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(StatsLog.CATEGORY_SIZE__CATEGORY__OTHER) + .writeLong(json.optLong( + DiskStatsFileLogger.MISC_KEY, /* fallback */ -1L)) + .writeLong(cacheTime) + .build(); + pulledData.add(e); + } catch (IOException | JSONException e) { + Slog.e(TAG, "exception reading diskstats cache file", e); + return StatsManager.PULL_SKIP; + } + return StatsManager.PULL_SUCCESS; } private void registerNumFingerprintsEnrolled() {