From b89cbfbdca15b1f54fbb1b816f9b0912900e11df Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Mon, 30 Jul 2018 13:38:01 -0700 Subject: [PATCH] Count and Report Bandwidth Requests by UID To debug power drain due to modem wakeups, one of the signals we'd like to track is requests for bandwidth estimate to see which apps are making requests and how often. This patch keeps a simple count per-UID when an app requests a bandwidth update, and that count is made available in dumpsys. Bug: 77498849 Test: runtest frameworks-net Change-Id: I30d2ce85f9fa6747030cf4039d1080113a32e386 --- .../android/server/ConnectivityService.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 28ac784937..4100e74de8 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -497,6 +497,9 @@ public class ConnectivityService extends IConnectivityManager.Stub private final IpConnectivityLog mMetricsLog; + @GuardedBy("mBandwidthRequests") + private final SparseArray mBandwidthRequests = new SparseArray(10); + @VisibleForTesting final MultinetworkPolicyTracker mMultinetworkPolicyTracker; @@ -2069,6 +2072,18 @@ public class ConnectivityService extends IConnectivityManager.Stub pw.println("currently holding WakeLock for: " + (duration / 1000) + "s"); } mWakelockLogs.reverseDump(fd, pw, args); + + pw.println(); + pw.println("bandwidth update requests (by uid):"); + pw.increaseIndent(); + synchronized (mBandwidthRequests) { + for (int i = 0; i < mBandwidthRequests.size(); i++) { + pw.println("[" + mBandwidthRequests.keyAt(i) + + "]: " + mBandwidthRequests.valueAt(i)); + } + } + pw.decreaseIndent(); + pw.decreaseIndent(); } } @@ -4223,6 +4238,14 @@ public class ConnectivityService extends IConnectivityManager.Stub } if (nai != null) { nai.asyncChannel.sendMessage(android.net.NetworkAgent.CMD_REQUEST_BANDWIDTH_UPDATE); + synchronized (mBandwidthRequests) { + final int uid = Binder.getCallingUid(); + Integer uidReqs = mBandwidthRequests.get(uid); + if (uidReqs == null) { + uidReqs = new Integer(0); + } + mBandwidthRequests.put(uid, ++uidReqs); + } return true; } return false; @@ -5803,4 +5826,4 @@ public class ConnectivityService extends IConnectivityManager.Stub pw.println(" Get airplane mode."); } } -} \ No newline at end of file +}