From fd037c55488ed266e1970d65fcf8fed81a22bfb4 Mon Sep 17 00:00:00 2001 From: Jeffrey Huang Date: Thu, 16 Jan 2020 10:42:59 -0800 Subject: [PATCH] Migrate pullLooperStats Test: atest UidAtomTests#testLooperStats Test: adb shell cmd stats pull-source 10024 Change-Id: I9fb11f78a9e3e7b3616185b4f62ff925c547b9df --- .../server/stats/StatsCompanionService.java | 35 --------------- .../src/external/StatsPullerManager.cpp | 5 --- .../stats/pull/StatsPullAtomService.java | 43 +++++++++++++++++-- 3 files changed, 40 insertions(+), 43 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 17573bb22feaf..4390209b268f4 100644 --- a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java +++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java @@ -722,36 +722,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { pulledData.add(e); } - private void pullLooperStats(int tagId, long elapsedNanos, long wallClockNanos, - List pulledData) { - LooperStats looperStats = LocalServices.getService(LooperStats.class); - if (looperStats == null) { - throw new IllegalStateException("looperStats null"); - } - - List entries = looperStats.getEntries(); - looperStats.reset(); - for (LooperStats.ExportedEntry entry : entries) { - StatsLogEventWrapper e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos); - e.writeInt(entry.workSourceUid); - e.writeString(entry.handlerClassName); - e.writeString(entry.threadName); - e.writeString(entry.messageName); - e.writeLong(entry.messageCount); - e.writeLong(entry.exceptionCount); - e.writeLong(entry.recordedMessageCount); - e.writeLong(entry.totalLatencyMicros); - e.writeLong(entry.cpuUsageMicros); - e.writeBoolean(entry.isInteractive); - e.writeLong(entry.maxCpuUsageMicros); - e.writeLong(entry.maxLatencyMicros); - e.writeLong(entry.recordedDelayMessageCount); - e.writeLong(entry.delayMillis); - e.writeLong(entry.maxDelayMillis); - pulledData.add(e); - } - } - private void pullDiskStats(int tagId, long elapsedNanos, long wallClockNanos, List pulledData) { // Run a quick-and-dirty performance test: write 512 bytes @@ -1579,11 +1549,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { break; } - case StatsLog.LOOPER_STATS: { - pullLooperStats(tagId, elapsedNanos, wallClockNanos, ret); - break; - } - case StatsLog.DISK_STATS: { pullDiskStats(tagId, elapsedNanos, wallClockNanos, ret); break; diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index d5cda85f412a2..82d4a300499af 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -95,11 +95,6 @@ std::map StatsPullerManager::kAllPullAtomInfo = { {{.atomTag = android::util::BATTERY_CYCLE_COUNT}, {.puller = new ResourceHealthManagerPuller(android::util::BATTERY_CYCLE_COUNT)}}, - // looper_stats - {{.atomTag = android::util::LOOPER_STATS}, - {.additiveFields = {5, 6, 7, 8, 9}, - .puller = new StatsCompanionServicePuller(android::util::LOOPER_STATS)}}, - // Disk Stats {{.atomTag = android::util::DISK_STATS}, {.puller = new StatsCompanionServicePuller(android::util::DISK_STATS)}}, 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 1e856884eeed5..c79f49e060a63 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -1426,11 +1426,48 @@ public class StatsPullAtomService extends SystemService { } private void registerLooperStats() { - // No op. + int tagId = StatsLog.LOOPER_STATS; + PullAtomMetadata metadata = PullAtomMetadata.newBuilder() + .setAdditiveFields(new int[] {5, 6, 7, 8, 9}) + .build(); + mStatsManager.registerPullAtomCallback( + tagId, + metadata, + (atomTag, data) -> pullLooperStats(atomTag, data), + BackgroundThread.getExecutor() + ); } - private void pullLooperStats() { - // No op. + private int pullLooperStats(int atomTag, List pulledData) { + LooperStats looperStats = LocalServices.getService(LooperStats.class); + if (looperStats == null) { + return StatsManager.PULL_SKIP; + } + + List entries = looperStats.getEntries(); + looperStats.reset(); + for (LooperStats.ExportedEntry entry : entries) { + StatsEvent e = StatsEvent.newBuilder() + .setAtomId(atomTag) + .writeInt(entry.workSourceUid) + .writeString(entry.handlerClassName) + .writeString(entry.threadName) + .writeString(entry.messageName) + .writeLong(entry.messageCount) + .writeLong(entry.exceptionCount) + .writeLong(entry.recordedMessageCount) + .writeLong(entry.totalLatencyMicros) + .writeLong(entry.cpuUsageMicros) + .writeBoolean(entry.isInteractive) + .writeLong(entry.maxCpuUsageMicros) + .writeLong(entry.maxLatencyMicros) + .writeLong(entry.recordedDelayMessageCount) + .writeLong(entry.delayMillis) + .writeLong(entry.maxDelayMillis) + .build(); + pulledData.add(e); + } + return StatsManager.PULL_SUCCESS; } private void registerDiskStats() {