summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/os/BinderCallsStats.java8
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java17
2 files changed, 24 insertions, 1 deletions
diff --git a/core/java/com/android/internal/os/BinderCallsStats.java b/core/java/com/android/internal/os/BinderCallsStats.java
index 6f911cbd6121..e3baf90657d0 100644
--- a/core/java/com/android/internal/os/BinderCallsStats.java
+++ b/core/java/com/android/internal/os/BinderCallsStats.java
@@ -220,7 +220,8 @@ public class BinderCallsStats implements BinderInternal.Observer {
public CallSession callStarted(Binder binder, int code, int workSourceUid) {
noteNativeThreadId();
- if (!canCollect()) {
+ // We always want to collect data for latency if it's enabled, regardless of device state.
+ if (!mCollectLatencyData && !canCollect()) {
return null;
}
@@ -267,6 +268,11 @@ public class BinderCallsStats implements BinderInternal.Observer {
mLatencyObserver.callEnded(s);
}
+ // Latency collection has already been processed so check if the rest should be processed.
+ if (!canCollect()) {
+ return;
+ }
+
UidEntry uidEntry = null;
final boolean recordCall;
if (s.recordedCall) {
diff --git a/core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java
index 55943a0dc319..cac40b2bd586 100644
--- a/core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java
@@ -19,6 +19,7 @@ package com.android.internal.os;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -969,6 +970,22 @@ public class BinderCallsStatsTest {
}
@Test
+ public void testLatencyCollectionActiveEvenWithoutDeviceState() {
+ TestBinderCallsStats bcs = new TestBinderCallsStats(null);
+ bcs.setCollectLatencyData(true);
+
+ Binder binder = new Binder();
+ CallSession callSession = bcs.callStarted(binder, 1, WORKSOURCE_UID);
+ assertNotEquals(null, callSession);
+
+ bcs.time += 10;
+ bcs.elapsedTime += 20;
+ bcs.callEnded(callSession, REQUEST_SIZE, REPLY_SIZE, WORKSOURCE_UID);
+
+ assertEquals(1, bcs.getLatencyObserver().getLatencyHistograms().size());
+ }
+
+ @Test
public void testLatencyCollectionEnabledByDefault() {
TestBinderCallsStats bcs = new TestBinderCallsStats();
assertEquals(true, bcs.getCollectLatencyData());