Merge "Add stats puller for PinnerService data"

This commit is contained in:
TreeHugger Robot
2022-02-17 10:31:48 +00:00
committed by Android (Google) Code Review
2 changed files with 57 additions and 0 deletions

View File

@@ -18,6 +18,7 @@ package com.android.server;
import static android.app.ActivityManager.UID_OBSERVER_ACTIVE;
import static android.app.ActivityManager.UID_OBSERVER_GONE;
import static android.os.Process.SYSTEM_UID;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -261,6 +262,37 @@ public final class PinnerService extends SystemService {
}
}
/** Returns information about pinned files and sizes for StatsPullAtomService. */
public List<PinnedFileStats> dumpDataForStatsd() {
List<PinnedFileStats> pinnedFileStats = new ArrayList<>();
synchronized (PinnerService.this) {
for (PinnedFile pinnedFile : mPinnedFiles) {
pinnedFileStats.add(new PinnedFileStats(SYSTEM_UID, pinnedFile));
}
for (int key : mPinnedApps.keySet()) {
PinnedApp app = mPinnedApps.get(key);
for (PinnedFile pinnedFile : mPinnedApps.get(key).mFiles) {
pinnedFileStats.add(new PinnedFileStats(app.uid, pinnedFile));
}
}
}
return pinnedFileStats;
}
/** Wrapper class for statistics for a pinned file. */
public static class PinnedFileStats {
public final int uid;
public final String filename;
public final int sizeKb;
protected PinnedFileStats(int uid, PinnedFile file) {
this.uid = uid;
this.filename = file.fileName.substring(file.fileName.lastIndexOf('/') + 1);
this.sizeKb = file.bytesPinned / 1024;
}
}
/**
* Handler for on start pinning message
*/

View File

@@ -197,6 +197,8 @@ import com.android.role.RoleManagerLocal;
import com.android.server.BinderCallsStatsService;
import com.android.server.LocalManagerRegistry;
import com.android.server.LocalServices;
import com.android.server.PinnerService;
import com.android.server.PinnerService.PinnedFileStats;
import com.android.server.SystemService;
import com.android.server.SystemServiceManager;
import com.android.server.am.MemoryStatUtil.MemoryStat;
@@ -727,6 +729,8 @@ public class StatsPullAtomService extends SystemService {
return pullAccessibilityFloatingMenuStatsLocked(atomTag, data);
case FrameworkStatsLog.MEDIA_CAPABILITIES:
return pullMediaCapabilitiesStats(atomTag, data);
case FrameworkStatsLog.PINNED_FILE_SIZES_PER_PACKAGE:
return pullSystemServerPinnerStats(atomTag, data);
case FrameworkStatsLog.PENDING_INTENTS_PER_PACKAGE:
return pullPendingIntentsPerPackage(atomTag, data);
default:
@@ -926,6 +930,7 @@ public class StatsPullAtomService extends SystemService {
registerAccessibilityFloatingMenuStats();
registerMediaCapabilitiesStats();
registerPendingIntentsPerPackagePuller();
registerPinnerServiceStats();
}
private void initAndRegisterNetworkStatsPullers() {
@@ -4607,6 +4612,26 @@ public class StatsPullAtomService extends SystemService {
return StatsManager.PULL_SUCCESS;
}
private void registerPinnerServiceStats() {
int tagId = FrameworkStatsLog.PINNED_FILE_SIZES_PER_PACKAGE;
mStatsManager.setPullAtomCallback(
tagId,
null, // use default PullAtomMetadata values
DIRECT_EXECUTOR,
mStatsCallbackImpl
);
}
int pullSystemServerPinnerStats(int atomTag, List<StatsEvent> pulledData) {
PinnerService pinnerService = LocalServices.getService(PinnerService.class);
List<PinnedFileStats> pinnedFileStats = pinnerService.dumpDataForStatsd();
for (PinnedFileStats pfstats : pinnedFileStats) {
pulledData.add(FrameworkStatsLog.buildStatsEvent(atomTag,
pfstats.uid, pfstats.filename, pfstats.sizeKb));
}
return StatsManager.PULL_SUCCESS;
}
private byte[] toBytes(List<Integer> audioEncodings) {
ProtoOutputStream protoOutputStream = new ProtoOutputStream();
for (int audioEncoding : audioEncodings) {