Allow verbose logging to be enabled for an app.
Structured similar to "cmd activity watch-uids --oom <uid>". Bug: 145420790 Test: manual Change-Id: I99c8427368234d5763e355a4f483eca764e29de3
This commit is contained in:
@@ -24,9 +24,11 @@ import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_DOZABLE;
|
||||
import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_POWERSAVE;
|
||||
import static android.net.NetworkPolicyManager.FIREWALL_CHAIN_NAME_STANDBY;
|
||||
import static android.net.NetworkPolicyManager.FIREWALL_RULE_DEFAULT;
|
||||
import static android.os.Process.INVALID_UID;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.os.UserHandle;
|
||||
import android.util.Log;
|
||||
import android.util.Slog;
|
||||
|
||||
@@ -79,19 +81,25 @@ public class NetworkPolicyLogger {
|
||||
private final LogBuffer mUidStateChangeBuffer = new LogBuffer(MAX_LOG_SIZE);
|
||||
private final LogBuffer mEventsBuffer = new LogBuffer(MAX_LOG_SIZE);
|
||||
|
||||
private int mDebugUid = INVALID_UID;
|
||||
|
||||
private final Object mLock = new Object();
|
||||
|
||||
void networkBlocked(int uid, int reason) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG, uid + " is " + getBlockedReason(reason));
|
||||
if (LOGD || uid == mDebugUid) {
|
||||
Slog.d(TAG, uid + " is " + getBlockedReason(reason));
|
||||
}
|
||||
mNetworkBlockedBuffer.networkBlocked(uid, reason);
|
||||
}
|
||||
}
|
||||
|
||||
void uidStateChanged(int uid, int procState, long procStateSeq) {
|
||||
synchronized (mLock) {
|
||||
if (LOGV) Slog.v(TAG,
|
||||
uid + " state changed to " + procState + " with seq=" + procStateSeq);
|
||||
if (LOGV || uid == mDebugUid) {
|
||||
Slog.v(TAG, uid + " state changed to "
|
||||
+ ProcessList.makeProcStateString(procState) + " with seq=" + procStateSeq);
|
||||
}
|
||||
mUidStateChangeBuffer.uidStateChanged(uid, procState, procStateSeq);
|
||||
}
|
||||
}
|
||||
@@ -105,78 +113,105 @@ public class NetworkPolicyLogger {
|
||||
|
||||
void uidPolicyChanged(int uid, int oldPolicy, int newPolicy) {
|
||||
synchronized (mLock) {
|
||||
if (LOGV) Slog.v(TAG, getPolicyChangedLog(uid, oldPolicy, newPolicy));
|
||||
if (LOGV || uid == mDebugUid) {
|
||||
Slog.v(TAG,
|
||||
getPolicyChangedLog(uid, oldPolicy, newPolicy));
|
||||
}
|
||||
mEventsBuffer.uidPolicyChanged(uid, oldPolicy, newPolicy);
|
||||
}
|
||||
}
|
||||
|
||||
void meterednessChanged(int netId, boolean newMetered) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG, getMeterednessChangedLog(netId, newMetered));
|
||||
if (LOGD || mDebugUid != INVALID_UID) {
|
||||
Slog.d(TAG,
|
||||
getMeterednessChangedLog(netId, newMetered));
|
||||
}
|
||||
mEventsBuffer.meterednessChanged(netId, newMetered);
|
||||
}
|
||||
}
|
||||
|
||||
void removingUserState(int userId) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG, getUserRemovedLog(userId));
|
||||
if (LOGD || mDebugUid != INVALID_UID) {
|
||||
Slog.d(TAG, getUserRemovedLog(userId));
|
||||
}
|
||||
mEventsBuffer.userRemoved(userId);
|
||||
}
|
||||
}
|
||||
|
||||
void restrictBackgroundChanged(boolean oldValue, boolean newValue) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG,
|
||||
getRestrictBackgroundChangedLog(oldValue, newValue));
|
||||
if (LOGD || mDebugUid != INVALID_UID) {
|
||||
Slog.d(TAG,
|
||||
getRestrictBackgroundChangedLog(oldValue, newValue));
|
||||
}
|
||||
mEventsBuffer.restrictBackgroundChanged(oldValue, newValue);
|
||||
}
|
||||
}
|
||||
|
||||
void deviceIdleModeEnabled(boolean enabled) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG, getDeviceIdleModeEnabled(enabled));
|
||||
if (LOGD || mDebugUid != INVALID_UID) {
|
||||
Slog.d(TAG, getDeviceIdleModeEnabled(enabled));
|
||||
}
|
||||
mEventsBuffer.deviceIdleModeEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
void appIdleStateChanged(int uid, boolean idle) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG, getAppIdleChangedLog(uid, idle));
|
||||
if (LOGD || uid == mDebugUid) {
|
||||
Slog.d(TAG, getAppIdleChangedLog(uid, idle));
|
||||
}
|
||||
mEventsBuffer.appIdleStateChanged(uid, idle);
|
||||
}
|
||||
}
|
||||
|
||||
void appIdleWlChanged(int uid, boolean isWhitelisted) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG, getAppIdleWlChangedLog(uid, isWhitelisted));
|
||||
if (LOGD || uid == mDebugUid) {
|
||||
Slog.d(TAG, getAppIdleWlChangedLog(uid, isWhitelisted));
|
||||
}
|
||||
mEventsBuffer.appIdleWlChanged(uid, isWhitelisted);
|
||||
}
|
||||
}
|
||||
|
||||
void paroleStateChanged(boolean paroleOn) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG, getParoleStateChanged(paroleOn));
|
||||
if (LOGD || mDebugUid != INVALID_UID) {
|
||||
Slog.d(TAG, getParoleStateChanged(paroleOn));
|
||||
}
|
||||
mEventsBuffer.paroleStateChanged(paroleOn);
|
||||
}
|
||||
}
|
||||
|
||||
void tempPowerSaveWlChanged(int appId, boolean added) {
|
||||
synchronized (mLock) {
|
||||
if (LOGV) Slog.v(TAG, getTempPowerSaveWlChangedLog(appId, added));
|
||||
if (LOGV || appId == UserHandle.getAppId(mDebugUid)) {
|
||||
Slog.v(TAG,
|
||||
getTempPowerSaveWlChangedLog(appId, added));
|
||||
}
|
||||
mEventsBuffer.tempPowerSaveWlChanged(appId, added);
|
||||
}
|
||||
}
|
||||
|
||||
void uidFirewallRuleChanged(int chain, int uid, int rule) {
|
||||
synchronized (mLock) {
|
||||
if (LOGV) Slog.v(TAG, getUidFirewallRuleChangedLog(chain, uid, rule));
|
||||
if (LOGV || uid == mDebugUid) {
|
||||
Slog.v(TAG,
|
||||
getUidFirewallRuleChangedLog(chain, uid, rule));
|
||||
}
|
||||
mEventsBuffer.uidFirewallRuleChanged(chain, uid, rule);
|
||||
}
|
||||
}
|
||||
|
||||
void firewallChainEnabled(int chain, boolean enabled) {
|
||||
synchronized (mLock) {
|
||||
if (LOGD) Slog.d(TAG, getFirewallChainEnabledLog(chain, enabled));
|
||||
if (LOGD || mDebugUid != INVALID_UID) {
|
||||
Slog.d(TAG,
|
||||
getFirewallChainEnabledLog(chain, enabled));
|
||||
}
|
||||
mEventsBuffer.firewallChainEnabled(chain, enabled);
|
||||
}
|
||||
}
|
||||
@@ -185,7 +220,9 @@ public class NetworkPolicyLogger {
|
||||
synchronized (mLock) {
|
||||
final String log = "Firewall rules changed for " + getFirewallChainName(chain)
|
||||
+ "; uids=" + Arrays.toString(uids) + "; rules=" + Arrays.toString(rules);
|
||||
if (LOGD) Slog.d(TAG, log);
|
||||
if (LOGD || mDebugUid != INVALID_UID) {
|
||||
Slog.d(TAG, log);
|
||||
}
|
||||
mEventsBuffer.event(log);
|
||||
}
|
||||
}
|
||||
@@ -193,11 +230,17 @@ public class NetworkPolicyLogger {
|
||||
void meteredRestrictedPkgsChanged(Set<Integer> restrictedUids) {
|
||||
synchronized (mLock) {
|
||||
final String log = "Metered restricted uids: " + restrictedUids;
|
||||
if (LOGD) Slog.d(TAG, log);
|
||||
if (LOGD || mDebugUid != INVALID_UID) {
|
||||
Slog.d(TAG, log);
|
||||
}
|
||||
mEventsBuffer.event(log);
|
||||
}
|
||||
}
|
||||
|
||||
void setDebugUid(int uid) {
|
||||
mDebugUid = uid;
|
||||
}
|
||||
|
||||
void dumpLogs(IndentingPrintWriter pw) {
|
||||
synchronized (mLock) {
|
||||
pw.println();
|
||||
|
||||
@@ -229,7 +229,6 @@ import com.android.internal.util.ConcurrentUtils;
|
||||
import com.android.internal.util.DumpUtils;
|
||||
import com.android.internal.util.FastXmlSerializer;
|
||||
import com.android.internal.util.IndentingPrintWriter;
|
||||
import com.android.internal.util.Preconditions;
|
||||
import com.android.internal.util.StatLogger;
|
||||
import com.android.server.EventLogTags;
|
||||
import com.android.server.LocalServices;
|
||||
@@ -3601,6 +3600,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
|
||||
this, in, out, err, args, callback, resultReceiver);
|
||||
}
|
||||
|
||||
void setDebugUid(int uid) {
|
||||
mLogger.setDebugUid(uid);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean isUidForeground(int uid) {
|
||||
synchronized (mUidRulesFirstLock) {
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.content.Context;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.net.wifi.WifiConfiguration;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ShellCommand;
|
||||
|
||||
@@ -58,6 +59,10 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
|
||||
return runAdd();
|
||||
case "remove":
|
||||
return runRemove();
|
||||
case "start-watching":
|
||||
return runStartWatching();
|
||||
case "stop-watching":
|
||||
return runStopWatching();
|
||||
default:
|
||||
return handleDefaultCommands(cmd);
|
||||
}
|
||||
@@ -197,6 +202,22 @@ class NetworkPolicyManagerShellCommand extends ShellCommand {
|
||||
return -1;
|
||||
}
|
||||
|
||||
private int runStartWatching() {
|
||||
final int uid = Integer.parseInt(getNextArgRequired());
|
||||
if (uid < 0) {
|
||||
final PrintWriter pw = getOutPrintWriter();
|
||||
pw.print("Invalid UID: "); pw.println(uid);
|
||||
return -1;
|
||||
}
|
||||
mInterface.setDebugUid(uid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int runStopWatching() {
|
||||
mInterface.setDebugUid(Process.INVALID_UID);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private int listUidPolicies(String msg, int policy) throws RemoteException {
|
||||
final int[] uids = mInterface.getUidsWithPolicy(policy);
|
||||
return listUidList(msg, uids);
|
||||
|
||||
Reference in New Issue
Block a user