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:
@@ -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);
|
||||
|
||||
@@ -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)}},
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user