Loading core/java/com/android/internal/os/BinderCallsStats.java +16 −13 Original line number Diff line number Diff line Loading @@ -122,25 +122,25 @@ public class BinderCallsStats { mUidEntries.put(callingUid, uidEntry); } CallStat callStat; if (mDetailedTracking) { // Find CallStat entry and update its total time CallStat callStat = uidEntry.getOrCreate(s.callStat); callStat.callCount++; callStat.cpuTimeMicros += duration; callStat.latencyMicros += latencyDuration; callStat = uidEntry.getOrCreate(s.callStat); callStat.exceptionCount += s.exceptionThrown ? 1 : 0; callStat.maxLatencyMicros = Math.max(callStat.maxLatencyMicros, latencyDuration); callStat.maxRequestSizeBytes = Math.max(callStat.maxRequestSizeBytes, parcelRequestSize); callStat.maxReplySizeBytes = Math.max(callStat.maxReplySizeBytes, parcelReplySize); } else { // update sampled timings in the beginning of each interval if (s.cpuTimeStarted >= 0) { s.sampledCallStat.cpuTimeMicros += duration; s.sampledCallStat.latencyMicros += latencyDuration; callStat = s.sampledCallStat; } s.sampledCallStat.callCount++; callStat.callCount++; if (s.cpuTimeStarted >= 0) { callStat.cpuTimeMicros += duration; callStat.maxCpuTimeMicros = Math.max(callStat.maxCpuTimeMicros, duration); callStat.latencyMicros += latencyDuration; callStat.maxLatencyMicros = Math.max(callStat.maxLatencyMicros, latencyDuration); } uidEntry.cpuTimeMicros += duration; Loading Loading @@ -189,7 +189,7 @@ public class BinderCallsStats { StringBuilder sb = new StringBuilder(); if (mDetailedTracking) { pw.println("Per-UID raw data " + datasetSizeDesc + "(uid, call_desc, cpu_time_micros, latency_time_micros, " + "(uid, call_desc, cpu_time_micros, max_cpu_time_micros, latency_time_micros, " + "max_latency_time_micros, exception_count, max_request_size_bytes, " + "max_reply_size_bytes, call_count):"); List<UidEntry> topEntries = verbose ? entries Loading @@ -200,6 +200,7 @@ public class BinderCallsStats { sb.append(" ") .append(uidEntry.uid).append(",").append(e) .append(',').append(e.cpuTimeMicros) .append(',').append(e.maxCpuTimeMicros) .append(',').append(e.latencyMicros) .append(',').append(e.maxLatencyMicros) .append(',').append(e.exceptionCount) Loading Loading @@ -260,7 +261,7 @@ public class BinderCallsStats { return Binder.getCallingUid(); } private long getElapsedRealtimeMicro() { protected long getElapsedRealtimeMicro() { return SystemClock.elapsedRealtimeNanos() / 1000; } Loading Loading @@ -288,11 +289,13 @@ public class BinderCallsStats { public String className; public int msg; public long cpuTimeMicros; public long maxCpuTimeMicros; public long latencyMicros; public long maxLatencyMicros; public long callCount; // The following fields are only computed if mDetailedTracking is set. public long maxRequestSizeBytes; public long maxReplySizeBytes; public long callCount; public long exceptionCount; CallStat() { Loading core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java +42 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,42 @@ public class BinderCallsStatsTest { assertEquals(REPLY_SIZE, callStatsList.get(0).maxReplySizeBytes); } @Test public void testMaxCpu() { TestBinderCallsStats bcs = new TestBinderCallsStats(true); Binder binder = new Binder(); BinderCallsStats.CallSession callSession = bcs.callStarted(binder, 1); bcs.time += 50; bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE); callSession = bcs.callStarted(binder, 1); bcs.time += 10; bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE); List<BinderCallsStats.CallStat> callStatsList = bcs.getUidEntries().get(TEST_UID).getCallStatsList(); assertEquals(50, callStatsList.get(0).maxCpuTimeMicros); } @Test public void testMaxLatency() { TestBinderCallsStats bcs = new TestBinderCallsStats(true); Binder binder = new Binder(); BinderCallsStats.CallSession callSession = bcs.callStarted(binder, 1); bcs.elapsedTime += 5; bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE); callSession = bcs.callStarted(binder, 1); bcs.elapsedTime += 1; bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE); List<BinderCallsStats.CallStat> callStatsList = bcs.getUidEntries().get(TEST_UID).getCallStatsList(); assertEquals(5, callStatsList.get(0).maxLatencyMicros); } @Test public void testGetHighestValues() { List<Integer> list = Arrays.asList(1, 2, 3, 4); Loading @@ -165,6 +201,7 @@ public class BinderCallsStatsTest { static class TestBinderCallsStats extends BinderCallsStats { int callingUid = TEST_UID; long time = 1234; long elapsedTime = 0; TestBinderCallsStats(boolean detailedTracking) { super(detailedTracking); Loading @@ -175,6 +212,11 @@ public class BinderCallsStatsTest { return time; } @Override protected long getElapsedRealtimeMicro() { return elapsedTime; } @Override protected int getCallingUid() { return callingUid; Loading Loading
core/java/com/android/internal/os/BinderCallsStats.java +16 −13 Original line number Diff line number Diff line Loading @@ -122,25 +122,25 @@ public class BinderCallsStats { mUidEntries.put(callingUid, uidEntry); } CallStat callStat; if (mDetailedTracking) { // Find CallStat entry and update its total time CallStat callStat = uidEntry.getOrCreate(s.callStat); callStat.callCount++; callStat.cpuTimeMicros += duration; callStat.latencyMicros += latencyDuration; callStat = uidEntry.getOrCreate(s.callStat); callStat.exceptionCount += s.exceptionThrown ? 1 : 0; callStat.maxLatencyMicros = Math.max(callStat.maxLatencyMicros, latencyDuration); callStat.maxRequestSizeBytes = Math.max(callStat.maxRequestSizeBytes, parcelRequestSize); callStat.maxReplySizeBytes = Math.max(callStat.maxReplySizeBytes, parcelReplySize); } else { // update sampled timings in the beginning of each interval if (s.cpuTimeStarted >= 0) { s.sampledCallStat.cpuTimeMicros += duration; s.sampledCallStat.latencyMicros += latencyDuration; callStat = s.sampledCallStat; } s.sampledCallStat.callCount++; callStat.callCount++; if (s.cpuTimeStarted >= 0) { callStat.cpuTimeMicros += duration; callStat.maxCpuTimeMicros = Math.max(callStat.maxCpuTimeMicros, duration); callStat.latencyMicros += latencyDuration; callStat.maxLatencyMicros = Math.max(callStat.maxLatencyMicros, latencyDuration); } uidEntry.cpuTimeMicros += duration; Loading Loading @@ -189,7 +189,7 @@ public class BinderCallsStats { StringBuilder sb = new StringBuilder(); if (mDetailedTracking) { pw.println("Per-UID raw data " + datasetSizeDesc + "(uid, call_desc, cpu_time_micros, latency_time_micros, " + "(uid, call_desc, cpu_time_micros, max_cpu_time_micros, latency_time_micros, " + "max_latency_time_micros, exception_count, max_request_size_bytes, " + "max_reply_size_bytes, call_count):"); List<UidEntry> topEntries = verbose ? entries Loading @@ -200,6 +200,7 @@ public class BinderCallsStats { sb.append(" ") .append(uidEntry.uid).append(",").append(e) .append(',').append(e.cpuTimeMicros) .append(',').append(e.maxCpuTimeMicros) .append(',').append(e.latencyMicros) .append(',').append(e.maxLatencyMicros) .append(',').append(e.exceptionCount) Loading Loading @@ -260,7 +261,7 @@ public class BinderCallsStats { return Binder.getCallingUid(); } private long getElapsedRealtimeMicro() { protected long getElapsedRealtimeMicro() { return SystemClock.elapsedRealtimeNanos() / 1000; } Loading Loading @@ -288,11 +289,13 @@ public class BinderCallsStats { public String className; public int msg; public long cpuTimeMicros; public long maxCpuTimeMicros; public long latencyMicros; public long maxLatencyMicros; public long callCount; // The following fields are only computed if mDetailedTracking is set. public long maxRequestSizeBytes; public long maxReplySizeBytes; public long callCount; public long exceptionCount; CallStat() { Loading
core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java +42 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,42 @@ public class BinderCallsStatsTest { assertEquals(REPLY_SIZE, callStatsList.get(0).maxReplySizeBytes); } @Test public void testMaxCpu() { TestBinderCallsStats bcs = new TestBinderCallsStats(true); Binder binder = new Binder(); BinderCallsStats.CallSession callSession = bcs.callStarted(binder, 1); bcs.time += 50; bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE); callSession = bcs.callStarted(binder, 1); bcs.time += 10; bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE); List<BinderCallsStats.CallStat> callStatsList = bcs.getUidEntries().get(TEST_UID).getCallStatsList(); assertEquals(50, callStatsList.get(0).maxCpuTimeMicros); } @Test public void testMaxLatency() { TestBinderCallsStats bcs = new TestBinderCallsStats(true); Binder binder = new Binder(); BinderCallsStats.CallSession callSession = bcs.callStarted(binder, 1); bcs.elapsedTime += 5; bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE); callSession = bcs.callStarted(binder, 1); bcs.elapsedTime += 1; bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE); List<BinderCallsStats.CallStat> callStatsList = bcs.getUidEntries().get(TEST_UID).getCallStatsList(); assertEquals(5, callStatsList.get(0).maxLatencyMicros); } @Test public void testGetHighestValues() { List<Integer> list = Arrays.asList(1, 2, 3, 4); Loading @@ -165,6 +201,7 @@ public class BinderCallsStatsTest { static class TestBinderCallsStats extends BinderCallsStats { int callingUid = TEST_UID; long time = 1234; long elapsedTime = 0; TestBinderCallsStats(boolean detailedTracking) { super(detailedTracking); Loading @@ -175,6 +212,11 @@ public class BinderCallsStatsTest { return time; } @Override protected long getElapsedRealtimeMicro() { return elapsedTime; } @Override protected int getCallingUid() { return callingUid; Loading