Migrate pullBinderStats
Test: atest UidAtomTests#testBinderStats Test: adb shell cmd stats pull-source 10022 Test: adb shell cmd stats pull-source 10023 Change-Id: Ib321743b725abe6770b840477d7fbce755a0bde3
This commit is contained in:
@@ -722,57 +722,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
||||
pulledData.add(e);
|
||||
}
|
||||
|
||||
private void pullBinderCallsStats(
|
||||
int tagId, long elapsedNanos, long wallClockNanos,
|
||||
List<StatsLogEventWrapper> pulledData) {
|
||||
BinderCallsStatsService.Internal binderStats =
|
||||
LocalServices.getService(BinderCallsStatsService.Internal.class);
|
||||
if (binderStats == null) {
|
||||
throw new IllegalStateException("binderStats is null");
|
||||
}
|
||||
|
||||
List<ExportedCallStat> callStats = binderStats.getExportedCallStats();
|
||||
binderStats.reset();
|
||||
for (ExportedCallStat callStat : callStats) {
|
||||
StatsLogEventWrapper e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos);
|
||||
e.writeInt(callStat.workSourceUid);
|
||||
e.writeString(callStat.className);
|
||||
e.writeString(callStat.methodName);
|
||||
e.writeLong(callStat.callCount);
|
||||
e.writeLong(callStat.exceptionCount);
|
||||
e.writeLong(callStat.latencyMicros);
|
||||
e.writeLong(callStat.maxLatencyMicros);
|
||||
e.writeLong(callStat.cpuTimeMicros);
|
||||
e.writeLong(callStat.maxCpuTimeMicros);
|
||||
e.writeLong(callStat.maxReplySizeBytes);
|
||||
e.writeLong(callStat.maxRequestSizeBytes);
|
||||
e.writeLong(callStat.recordedCallCount);
|
||||
e.writeInt(callStat.screenInteractive ? 1 : 0);
|
||||
e.writeInt(callStat.callingUid);
|
||||
pulledData.add(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void pullBinderCallsStatsExceptions(
|
||||
int tagId, long elapsedNanos, long wallClockNanos,
|
||||
List<StatsLogEventWrapper> pulledData) {
|
||||
BinderCallsStatsService.Internal binderStats =
|
||||
LocalServices.getService(BinderCallsStatsService.Internal.class);
|
||||
if (binderStats == null) {
|
||||
throw new IllegalStateException("binderStats is null");
|
||||
}
|
||||
|
||||
ArrayMap<String, Integer> exceptionStats = binderStats.getExportedExceptionStats();
|
||||
// TODO: decouple binder calls exceptions with the rest of the binder calls data so that we
|
||||
// can reset the exception stats.
|
||||
for (Entry<String, Integer> entry : exceptionStats.entrySet()) {
|
||||
StatsLogEventWrapper e = new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos);
|
||||
e.writeString(entry.getKey());
|
||||
e.writeInt(entry.getValue());
|
||||
pulledData.add(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void pullLooperStats(int tagId, long elapsedNanos, long wallClockNanos,
|
||||
List<StatsLogEventWrapper> pulledData) {
|
||||
LooperStats looperStats = LocalServices.getService(LooperStats.class);
|
||||
@@ -1630,16 +1579,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
||||
break;
|
||||
}
|
||||
|
||||
case StatsLog.BINDER_CALLS: {
|
||||
pullBinderCallsStats(tagId, elapsedNanos, wallClockNanos, ret);
|
||||
break;
|
||||
}
|
||||
|
||||
case StatsLog.BINDER_CALLS_EXCEPTIONS: {
|
||||
pullBinderCallsStatsExceptions(tagId, elapsedNanos, wallClockNanos, ret);
|
||||
break;
|
||||
}
|
||||
|
||||
case StatsLog.LOOPER_STATS: {
|
||||
pullLooperStats(tagId, elapsedNanos, wallClockNanos, ret);
|
||||
break;
|
||||
|
||||
@@ -95,15 +95,6 @@ std::map<PullerKey, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = {
|
||||
{{.atomTag = android::util::BATTERY_CYCLE_COUNT},
|
||||
{.puller = new ResourceHealthManagerPuller(android::util::BATTERY_CYCLE_COUNT)}},
|
||||
|
||||
// binder_calls
|
||||
{{.atomTag = android::util::BINDER_CALLS},
|
||||
{.additiveFields = {4, 5, 6, 8, 12},
|
||||
.puller = new StatsCompanionServicePuller(android::util::BINDER_CALLS)}},
|
||||
|
||||
// binder_calls_exceptions
|
||||
{{.atomTag = android::util::BINDER_CALLS_EXCEPTIONS},
|
||||
{.puller = new StatsCompanionServicePuller(android::util::BINDER_CALLS_EXCEPTIONS)}},
|
||||
|
||||
// looper_stats
|
||||
{{.atomTag = android::util::LOOPER_STATS},
|
||||
{.additiveFields = {5, 6, 7, 8, 9},
|
||||
|
||||
@@ -270,8 +270,8 @@ public class StatsPullAtomService extends SystemService {
|
||||
registerProcessSystemIonHeapSize();
|
||||
registerTemperature();
|
||||
registerCoolingDevice();
|
||||
registerBinderCalls();
|
||||
registerBinderCallsExceptions();
|
||||
registerBinderCallsStats();
|
||||
registerBinderCallsStatsExceptions();
|
||||
registerLooperStats();
|
||||
registerDiskStats();
|
||||
registerDirectoryUsage();
|
||||
@@ -1348,20 +1348,82 @@ public class StatsPullAtomService extends SystemService {
|
||||
return StatsManager.PULL_SUCCESS;
|
||||
}
|
||||
|
||||
private void registerBinderCalls() {
|
||||
// No op.
|
||||
private void registerBinderCallsStats() {
|
||||
int tagId = StatsLog.BINDER_CALLS;
|
||||
PullAtomMetadata metadata = PullAtomMetadata.newBuilder()
|
||||
.setAdditiveFields(new int[] {4, 5, 6, 8, 12})
|
||||
.build();
|
||||
mStatsManager.registerPullAtomCallback(
|
||||
tagId,
|
||||
metadata,
|
||||
(atomTag, data) -> pullBinderCallsStats(atomTag, data),
|
||||
BackgroundThread.getExecutor()
|
||||
);
|
||||
}
|
||||
|
||||
private void pullBinderCalls() {
|
||||
// No op.
|
||||
private int pullBinderCallsStats(int atomTag, List<StatsEvent> pulledData) {
|
||||
BinderCallsStatsService.Internal binderStats =
|
||||
LocalServices.getService(BinderCallsStatsService.Internal.class);
|
||||
if (binderStats == null) {
|
||||
Slog.e(TAG, "failed to get binderStats");
|
||||
return StatsManager.PULL_SKIP;
|
||||
}
|
||||
|
||||
List<ExportedCallStat> callStats = binderStats.getExportedCallStats();
|
||||
binderStats.reset();
|
||||
for (ExportedCallStat callStat : callStats) {
|
||||
StatsEvent e = StatsEvent.newBuilder()
|
||||
.setAtomId(atomTag)
|
||||
.writeInt(callStat.workSourceUid)
|
||||
.writeString(callStat.className)
|
||||
.writeString(callStat.methodName)
|
||||
.writeLong(callStat.callCount)
|
||||
.writeLong(callStat.exceptionCount)
|
||||
.writeLong(callStat.latencyMicros)
|
||||
.writeLong(callStat.maxLatencyMicros)
|
||||
.writeLong(callStat.cpuTimeMicros)
|
||||
.writeLong(callStat.maxCpuTimeMicros)
|
||||
.writeLong(callStat.maxReplySizeBytes)
|
||||
.writeLong(callStat.maxRequestSizeBytes)
|
||||
.writeLong(callStat.recordedCallCount)
|
||||
.writeInt(callStat.screenInteractive ? 1 : 0)
|
||||
.writeInt(callStat.callingUid)
|
||||
.build();
|
||||
pulledData.add(e);
|
||||
}
|
||||
return StatsManager.PULL_SUCCESS;
|
||||
}
|
||||
|
||||
private void registerBinderCallsExceptions() {
|
||||
// No op.
|
||||
private void registerBinderCallsStatsExceptions() {
|
||||
int tagId = StatsLog.BINDER_CALLS_EXCEPTIONS;
|
||||
mStatsManager.registerPullAtomCallback(
|
||||
tagId,
|
||||
null, // use default PullAtomMetadata values
|
||||
(atomTag, data) -> pullBinderCallsStatsExceptions(atomTag, data),
|
||||
BackgroundThread.getExecutor()
|
||||
);
|
||||
}
|
||||
|
||||
private void pullBinderCallsExceptions() {
|
||||
// No op.
|
||||
private int pullBinderCallsStatsExceptions(int atomTag, List<StatsEvent> pulledData) {
|
||||
BinderCallsStatsService.Internal binderStats =
|
||||
LocalServices.getService(BinderCallsStatsService.Internal.class);
|
||||
if (binderStats == null) {
|
||||
Slog.e(TAG, "failed to get binderStats");
|
||||
return StatsManager.PULL_SKIP;
|
||||
}
|
||||
|
||||
ArrayMap<String, Integer> exceptionStats = binderStats.getExportedExceptionStats();
|
||||
// TODO: decouple binder calls exceptions with the rest of the binder calls data so that we
|
||||
// can reset the exception stats.
|
||||
for (Map.Entry<String, Integer> entry : exceptionStats.entrySet()) {
|
||||
StatsEvent e = StatsEvent.newBuilder()
|
||||
.setAtomId(atomTag)
|
||||
.writeString(entry.getKey())
|
||||
.writeInt(entry.getValue())
|
||||
.build();
|
||||
pulledData.add(e);
|
||||
}
|
||||
return StatsManager.PULL_SUCCESS;
|
||||
}
|
||||
|
||||
private void registerLooperStats() {
|
||||
|
||||
Reference in New Issue
Block a user