Loading core/java/com/android/internal/os/BinderCallsStats.java +10 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.os; import android.annotation.Nullable; import android.os.Binder; import android.os.SystemClock; import android.os.UserHandle; Loading Loading @@ -75,10 +76,10 @@ public class BinderCallsStats { } public CallSession callStarted(Binder binder, int code) { return callStarted(binder.getClass().getName(), code); return callStarted(binder.getClass().getName(), code, binder.getTransactionName(code)); } private CallSession callStarted(String className, int code) { private CallSession callStarted(String className, int code, @Nullable String methodName) { if (!mEnabled) { return NOT_ENABLED; } Loading @@ -90,6 +91,7 @@ public class BinderCallsStats { s.callStat.className = className; s.callStat.msg = code; s.callStat.methodName = methodName; s.exceptionThrown = false; s.cpuTimeStarted = -1; s.timeStarted = -1; Loading Loading @@ -169,6 +171,7 @@ public class BinderCallsStats { callStat = s.sampledCallStat; } callStat.callCount++; callStat.methodName = s.callStat.methodName; if (s.cpuTimeStarted >= 0) { callStat.cpuTimeMicros += duration; callStat.maxCpuTimeMicros = Math.max(callStat.maxCpuTimeMicros, duration); Loading Loading @@ -250,6 +253,7 @@ public class BinderCallsStats { sb.setLength(0); sb.append(" ") .append(uidToString(uidEntry.uid, appIdToPkgNameMap)) .append(",").append(e) .append(',').append(e.cpuTimeMicros) .append(',').append(e.maxCpuTimeMicros) .append(',').append(e.latencyMicros) Loading Loading @@ -372,6 +376,9 @@ public class BinderCallsStats { public static class CallStat { public String className; public int msg; // Method name might be null when we cannot resolve the transaction code. For instance, if // the binder was not generated by AIDL. public @Nullable String methodName; public long cpuTimeMicros; public long maxCpuTimeMicros; public long latencyMicros; Loading Loading @@ -410,7 +417,7 @@ public class BinderCallsStats { @Override public String toString() { return className + "/" + msg; return className + "#" + (methodName == null ? msg : methodName); } } Loading core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,26 @@ public class BinderCallsStatsTest { assertEquals(1, sampledCallStatsList.size()); } @Test public void testTransactionCodeResolved() { TestBinderCallsStats bcs = new TestBinderCallsStats(); bcs.setDetailedTracking(true); Binder binder = new Binder() { @Override public String getTransactionName(int code) { return "resolved"; } }; BinderCallsStats.CallSession 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(1, callStatsList.get(0).msg); assertEquals("resolved", callStatsList.get(0).methodName); } @Test public void testParcelSize() { TestBinderCallsStats bcs = new TestBinderCallsStats(); Loading Loading
core/java/com/android/internal/os/BinderCallsStats.java +10 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.os; import android.annotation.Nullable; import android.os.Binder; import android.os.SystemClock; import android.os.UserHandle; Loading Loading @@ -75,10 +76,10 @@ public class BinderCallsStats { } public CallSession callStarted(Binder binder, int code) { return callStarted(binder.getClass().getName(), code); return callStarted(binder.getClass().getName(), code, binder.getTransactionName(code)); } private CallSession callStarted(String className, int code) { private CallSession callStarted(String className, int code, @Nullable String methodName) { if (!mEnabled) { return NOT_ENABLED; } Loading @@ -90,6 +91,7 @@ public class BinderCallsStats { s.callStat.className = className; s.callStat.msg = code; s.callStat.methodName = methodName; s.exceptionThrown = false; s.cpuTimeStarted = -1; s.timeStarted = -1; Loading Loading @@ -169,6 +171,7 @@ public class BinderCallsStats { callStat = s.sampledCallStat; } callStat.callCount++; callStat.methodName = s.callStat.methodName; if (s.cpuTimeStarted >= 0) { callStat.cpuTimeMicros += duration; callStat.maxCpuTimeMicros = Math.max(callStat.maxCpuTimeMicros, duration); Loading Loading @@ -250,6 +253,7 @@ public class BinderCallsStats { sb.setLength(0); sb.append(" ") .append(uidToString(uidEntry.uid, appIdToPkgNameMap)) .append(",").append(e) .append(',').append(e.cpuTimeMicros) .append(',').append(e.maxCpuTimeMicros) .append(',').append(e.latencyMicros) Loading Loading @@ -372,6 +376,9 @@ public class BinderCallsStats { public static class CallStat { public String className; public int msg; // Method name might be null when we cannot resolve the transaction code. For instance, if // the binder was not generated by AIDL. public @Nullable String methodName; public long cpuTimeMicros; public long maxCpuTimeMicros; public long latencyMicros; Loading Loading @@ -410,7 +417,7 @@ public class BinderCallsStats { @Override public String toString() { return className + "/" + msg; return className + "#" + (methodName == null ? msg : methodName); } } Loading
core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,26 @@ public class BinderCallsStatsTest { assertEquals(1, sampledCallStatsList.size()); } @Test public void testTransactionCodeResolved() { TestBinderCallsStats bcs = new TestBinderCallsStats(); bcs.setDetailedTracking(true); Binder binder = new Binder() { @Override public String getTransactionName(int code) { return "resolved"; } }; BinderCallsStats.CallSession 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(1, callStatsList.get(0).msg); assertEquals("resolved", callStatsList.get(0).methodName); } @Test public void testParcelSize() { TestBinderCallsStats bcs = new TestBinderCallsStats(); Loading