From 6179b1451c84464647049aa87d4a86287bb03e24 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 +}