From f64b4c5dc944b937787e4413cce9a9f5938e2f59 Mon Sep 17 00:00:00 2001 From: Siim Sammul Date: Tue, 22 Jun 2021 17:11:45 +0100 Subject: [PATCH] Fix process source propagation for binder calls stats settings so that it is correctly reported in the pushed atom BinderLatencyReported. Bug: 180584913 Test: unit test Change-Id: Ifbdd96c73276546fb2a05213f71e1de088e1fe1e --- .../android/internal/os/BinderCallsStats.java | 5 +-- .../internal/os/BinderLatencyObserver.java | 5 +++ .../internal/os/BinderCallsStatsTest.java | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/core/java/com/android/internal/os/BinderCallsStats.java b/core/java/com/android/internal/os/BinderCallsStats.java index 6f911cbd61211..7757b91f95e37 100644 --- a/core/java/com/android/internal/os/BinderCallsStats.java +++ b/core/java/com/android/internal/os/BinderCallsStats.java @@ -1190,15 +1190,12 @@ public class BinderCallsStats implements BinderInternal.Observer { private final Context mContext; private final KeyValueListParser mParser = new KeyValueListParser(','); private final BinderCallsStats mBinderCallsStats; - private final int mProcessSource; - public SettingsObserver(Context context, BinderCallsStats binderCallsStats, - int processSource) { + public SettingsObserver(Context context, BinderCallsStats binderCallsStats) { super(BackgroundThread.getHandler()); mContext = context; context.getContentResolver().registerContentObserver(mUri, false, this); mBinderCallsStats = binderCallsStats; - mProcessSource = processSource; // Always kick once to ensure that we match current state onChange(); } diff --git a/core/java/com/android/internal/os/BinderLatencyObserver.java b/core/java/com/android/internal/os/BinderLatencyObserver.java index ed7e172e8071f..20cf102953e40 100644 --- a/core/java/com/android/internal/os/BinderLatencyObserver.java +++ b/core/java/com/android/internal/os/BinderLatencyObserver.java @@ -370,4 +370,9 @@ public class BinderLatencyObserver { public Runnable getStatsdPushRunnable() { return mLatencyObserverRunnable; } + + @VisibleForTesting + public int getProcessSource() { + return mProcessSource; + } } 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 55943a0dc319e..c502f75c6109b 100644 --- a/core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BinderCallsStatsTest.java @@ -974,6 +974,40 @@ public class BinderCallsStatsTest { assertEquals(true, bcs.getCollectLatencyData()); } + @Test + public void testProcessSource() { + BinderCallsStats defaultCallsStats = new BinderCallsStats( + new BinderCallsStats.Injector()); + + BinderCallsStats systemServerCallsStats = new BinderCallsStats( + new BinderCallsStats.Injector(), + com.android.internal.os.BinderLatencyProto.Dims.SYSTEM_SERVER); + + BinderCallsStats telephonyCallsStats = new BinderCallsStats( + new BinderCallsStats.Injector(), + com.android.internal.os.BinderLatencyProto.Dims.TELEPHONY); + + BinderCallsStats bluetoothCallsStats = new BinderCallsStats( + new BinderCallsStats.Injector(), + com.android.internal.os.BinderLatencyProto.Dims.BLUETOOTH); + + assertEquals( + com.android.internal.os.BinderLatencyProto.Dims.SYSTEM_SERVER, + defaultCallsStats.getLatencyObserver().getProcessSource()); + + assertEquals( + com.android.internal.os.BinderLatencyProto.Dims.SYSTEM_SERVER, + systemServerCallsStats.getLatencyObserver().getProcessSource()); + + assertEquals( + com.android.internal.os.BinderLatencyProto.Dims.TELEPHONY, + telephonyCallsStats.getLatencyObserver().getProcessSource()); + + assertEquals( + com.android.internal.os.BinderLatencyProto.Dims.BLUETOOTH, + bluetoothCallsStats.getLatencyObserver().getProcessSource()); + } + private static class TestHandler extends Handler { ArrayList mRunnables = new ArrayList<>();