summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hugo Benichi <hugobenichi@google.com> 2017-04-03 00:00:19 +0000
committer android-build-merger <android-build-merger@google.com> 2017-04-03 00:00:19 +0000
commit7346613f27a6c52aa19cf8169ccd63b7075a2b1c (patch)
tree9761e54ac21c6c6399e8ab1a7617f002c1346255
parent6003b7dff28e77206c6940b1cc2b67a6c5e9411c (diff)
parentbf1b181c6392f8b96e3cc6241453764cf0aa3661 (diff)
Merge "ConnectivityService: log wakelock activity in dumps" am: db104b2367 am: 146914c0d5
am: bf1b181c63 Change-Id: Id4c980a2a1ef7f51b6a06c7c8636160437e99b84
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java119
1 files changed, 52 insertions, 67 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 003530e43173..2998c9f0743c 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -396,6 +396,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
*/
private static final int EVENT_REGISTER_NETWORK_LISTENER_WITH_INTENT = 31;
+ private static String eventName(int what) {
+ return sMagicDecoderRing.get(what, Integer.toString(what));
+ }
+
/** Handler thread used for both of the handlers below. */
@VisibleForTesting
protected final HandlerThread mHandlerThread;
@@ -408,15 +412,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
private Intent mInitialBroadcast;
private PowerManager.WakeLock mNetTransitionWakeLock;
- private String mNetTransitionWakeLockCausedBy = "";
private int mNetTransitionWakeLockSerialNumber;
private int mNetTransitionWakeLockTimeout;
private final PowerManager.WakeLock mPendingIntentWakeLock;
- // used in DBG mode to track inet condition reports
- private static final int INET_CONDITION_LOG_MAX_SIZE = 15;
- private ArrayList mInetLog;
-
// track the current default http proxy - tell the world if we get a new one (real change)
private volatile ProxyInfo mDefaultProxy = null;
private Object mProxyLock = new Object();
@@ -458,10 +457,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
private final LocalLog mNetworkRequestInfoLogs = new LocalLog(MAX_NETWORK_REQUEST_LOGS);
// NetworkInfo blocked and unblocked String log entries
- // TODO: consider reducing memory usage. Each log line is ~40 2B chars, for a total of ~8kB.
- private static final int MAX_NETWORK_INFO_LOGS = 100;
+ private static final int MAX_NETWORK_INFO_LOGS = 40;
private final LocalLog mNetworkInfoBlockingLogs = new LocalLog(MAX_NETWORK_INFO_LOGS);
+ private static final int MAX_WAKELOCK_LOGS = 20;
+ private final LocalLog mWakelockLogs = new LocalLog(MAX_WAKELOCK_LOGS);
+
// Array of <Network,ReadOnlyLocalLogs> tracking network validation and results
private static final int MAX_VALIDATION_LOGS = 10;
private static class ValidationLog {
@@ -818,10 +819,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
loge("Error registering observer :" + e);
}
- if (DBG) {
- mInetLog = new ArrayList();
- }
-
mSettingsObserver = new SettingsObserver(mContext, mHandler);
registerSettingsCallbacks();
@@ -1044,22 +1041,19 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (ni == null || !LOGD_BLOCKED_NETWORKINFO) {
return;
}
- boolean removed = false;
- boolean added = false;
+ final boolean blocked;
synchronized (mBlockedAppUids) {
if (ni.getDetailedState() == DetailedState.BLOCKED && mBlockedAppUids.add(uid)) {
- added = true;
+ blocked = true;
} else if (ni.isConnected() && mBlockedAppUids.remove(uid)) {
- removed = true;
+ blocked = false;
+ } else {
+ return;
}
}
- if (added) {
- log("Returning blocked NetworkInfo to uid=" + uid);
- mNetworkInfoBlockingLogs.log("BLOCKED " + uid);
- } else if (removed) {
- log("Returning unblocked NetworkInfo to uid=" + uid);
- mNetworkInfoBlockingLogs.log("UNBLOCKED " + uid);
- }
+ String action = blocked ? "BLOCKED" : "UNBLOCKED";
+ log(String.format("Returning %s NetworkInfo to uid=%d", action, uid));
+ mNetworkInfoBlockingLogs.log(action + " " + uid);
}
/**
@@ -2023,16 +2017,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
mLegacyTypeTracker.dump(pw);
- synchronized (this) {
- pw.print("mNetTransitionWakeLock: currently " +
- (mNetTransitionWakeLock.isHeld() ? "" : "not ") + "held");
- if (!TextUtils.isEmpty(mNetTransitionWakeLockCausedBy)) {
- pw.println(", last requested for " + mNetTransitionWakeLockCausedBy);
- } else {
- pw.println(", last requested never");
- }
- }
-
pw.println();
mTethering.dump(fd, pw, args);
@@ -2042,17 +2026,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
pw.println();
dumpAvoidBadWifiSettings(pw);
- pw.println();
- if (mInetLog != null && mInetLog.size() > 0) {
- pw.println();
- pw.println("Inet condition reports:");
- pw.increaseIndent();
- for(int i = 0; i < mInetLog.size(); i++) {
- pw.println(mInetLog.get(i));
- }
- pw.decreaseIndent();
- }
-
if (argsContain(args, "--short") == false) {
pw.println();
synchronized (mValidationLogs) {
@@ -2076,6 +2049,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
pw.increaseIndent();
mNetworkInfoBlockingLogs.reverseDump(fd, pw, args);
pw.decreaseIndent();
+
+ pw.println();
+ pw.println("NetTransition WakeLock activity (most recent first):");
+ pw.increaseIndent();
+ mWakelockLogs.reverseDump(fd, pw, args);
+ pw.decreaseIndent();
}
}
@@ -2084,8 +2063,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
final NetworkAgentInfo officialNai = getNetworkAgentInfoForNetwork(nai.network);
if (officialNai != null && officialNai.equals(nai)) return true;
if (officialNai != null || VDBG) {
- final String msg = sMagicDecoderRing.get(what, Integer.toString(what));
- loge(msg + " - isLiveNetworkAgent found mismatched netId: " + officialNai +
+ loge(eventName(what) + " - isLiveNetworkAgent found mismatched netId: " + officialNai +
" - " + nai);
}
return false;
@@ -2122,8 +2100,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo);
if (nai == null) {
if (VDBG) {
- final String what = sMagicDecoderRing.get(msg.what, Integer.toString(msg.what));
- log(String.format("%s from unknown NetworkAgent", what));
+ log(String.format("%s from unknown NetworkAgent", eventName(msg.what)));
}
return;
}
@@ -2872,25 +2849,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
switch (msg.what) {
case EVENT_EXPIRE_NET_TRANSITION_WAKELOCK:
case EVENT_CLEAR_NET_TRANSITION_WAKELOCK: {
- String causedBy = null;
- synchronized (ConnectivityService.this) {
- if (msg.arg1 == mNetTransitionWakeLockSerialNumber &&
- mNetTransitionWakeLock.isHeld()) {
- mNetTransitionWakeLock.release();
- causedBy = mNetTransitionWakeLockCausedBy;
- } else {
- break;
- }
- }
- if (VDBG) {
- if (msg.what == EVENT_EXPIRE_NET_TRANSITION_WAKELOCK) {
- log("Failed to find a new network - expiring NetTransition Wakelock");
- } else {
- log("NetTransition Wakelock (" +
- (causedBy == null ? "unknown" : causedBy) +
- " cleared because we found a replacement network");
- }
- }
+ handleNetworkTransitionWakelockRelease(msg.what, msg.arg1);
break;
}
case EVENT_APPLY_GLOBAL_HTTP_PROXY: {
@@ -3129,7 +3088,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (mNetTransitionWakeLock.isHeld()) return;
serialNum = ++mNetTransitionWakeLockSerialNumber;
mNetTransitionWakeLock.acquire();
- mNetTransitionWakeLockCausedBy = forWhom;
+ mWakelockLogs.log(String.format("ACQUIRE %d for %s", serialNum, forWhom));
}
mHandler.sendMessageDelayed(mHandler.obtainMessage(
EVENT_EXPIRE_NET_TRANSITION_WAKELOCK, serialNum, 0),
@@ -3137,6 +3096,32 @@ public class ConnectivityService extends IConnectivityManager.Stub
return;
}
+ private void handleNetworkTransitionWakelockRelease(int eventId, int wantSerialNumber) {
+ final int serialNumber;
+ final boolean isHeld;
+ final boolean release;
+ synchronized (this) {
+ serialNumber = mNetTransitionWakeLockSerialNumber;
+ isHeld = mNetTransitionWakeLock.isHeld();
+ release = (wantSerialNumber == serialNumber) && isHeld;
+ if (release) {
+ mNetTransitionWakeLock.release();
+ }
+ }
+ final String result;
+ if (release) {
+ result = "released";
+ } else if (!isHeld) {
+ result = "already released";
+ } else {
+ result = String.format("not released (serial number was %d)", serialNumber);
+ }
+ String msg = String.format(
+ "RELEASE %d by %s: %s", wantSerialNumber, eventName(eventId), result);
+ mWakelockLogs.log(msg);
+ if (DBG) log(msg);
+ }
+
// 100 percent is full good, 0 is full bad.
@Override
public void reportInetCondition(int networkType, int percentage) {