Migrate pullAppSize and pullCategorySize

Test: adb shell cmd stats pull-source 10027
Test: adb shell cmd stats pull-source 10028
Change-Id: I98515bad18afc3ee542369c77d9fea6775e2cbde
This commit is contained in:
Jeffrey Huang
2020-01-16 13:02:22 -08:00
parent 95765f09e8
commit e85d7ad721
3 changed files with 137 additions and 121 deletions

View File

@@ -722,103 +722,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
pulledData.add(e);
}
private void pullAppSize(int tagId, long elapsedNanos, long wallClockNanos,
List<StatsLogEventWrapper> 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<StatsLogEventWrapper> 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<StatsLogEventWrapper> 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);

View File

@@ -95,14 +95,6 @@ std::map<PullerKey, PullAtomInfo> 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)}},

View File

@@ -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<StatsEvent> 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<StatsEvent> 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() {