Loading core/api/test-current.txt +1 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ package android.app { method public static boolean isHighEndGfx(); method public static void resumeAppSwitches() throws android.os.RemoteException; method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public void scheduleApplicationInfoChanged(java.util.List<java.lang.String>, int); field public static final int PROCESS_CAPABILITY_ALL = 7; // 0x7 field public static final int PROCESS_CAPABILITY_ALL = 15; // 0xf field public static final int PROCESS_CAPABILITY_ALL_EXPLICIT = 1; // 0x1 field public static final int PROCESS_CAPABILITY_ALL_IMPLICIT = 6; // 0x6 field public static final int PROCESS_CAPABILITY_FOREGROUND_CAMERA = 2; // 0x2 Loading core/java/android/app/ActivityManager.java +97 −2 Original line number Diff line number Diff line Loading @@ -601,11 +601,15 @@ public class ActivityManager { @TestApi public static final int PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 1 << 2; /** @hide Process can access network despite any power saving resrictions */ public static final int PROCESS_CAPABILITY_NETWORK = 1 << 3; /** @hide all capabilities, the ORing of all flags in {@link ProcessCapability}*/ @TestApi public static final int PROCESS_CAPABILITY_ALL = PROCESS_CAPABILITY_FOREGROUND_LOCATION | PROCESS_CAPABILITY_FOREGROUND_CAMERA | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE | PROCESS_CAPABILITY_NETWORK; /** * All explicit capabilities. These are capabilities that need to be specified from manifest * file. Loading @@ -631,6 +635,15 @@ public class ActivityManager { pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0 ? 'L' : '-'); pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-'); pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0 ? 'M' : '-'); pw.print((caps & PROCESS_CAPABILITY_NETWORK) != 0 ? 'N' : '-'); } /** @hide */ public static void printCapabilitiesSummary(StringBuilder sb, @ProcessCapability int caps) { sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0 ? 'L' : '-'); sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-'); sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0 ? 'M' : '-'); sb.append((caps & PROCESS_CAPABILITY_NETWORK) != 0 ? 'N' : '-'); } /** Loading @@ -641,13 +654,21 @@ public class ActivityManager { printCapabilitiesSummary(pw, caps); final int remain = caps & ~(PROCESS_CAPABILITY_FOREGROUND_LOCATION | PROCESS_CAPABILITY_FOREGROUND_CAMERA | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE); | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE | PROCESS_CAPABILITY_NETWORK); if (remain != 0) { pw.print('+'); pw.print(remain); } } /** @hide */ public static String getCapabilitiesSummary(@ProcessCapability int caps) { final StringBuilder sb = new StringBuilder(); printCapabilitiesSummary(sb, caps); return sb.toString(); } // NOTE: If PROCESS_STATEs are added, then new fields must be added // to frameworks/base/core/proto/android/app/enums.proto and the following method must // be updated to correctly map between them. Loading Loading @@ -4777,6 +4798,80 @@ public class ActivityManager { } } /** @hide */ public static String procStateToString(int procState) { final String procStateStr; switch (procState) { case ActivityManager.PROCESS_STATE_PERSISTENT: procStateStr = "PER "; break; case ActivityManager.PROCESS_STATE_PERSISTENT_UI: procStateStr = "PERU"; break; case ActivityManager.PROCESS_STATE_TOP: procStateStr = "TOP "; break; case ActivityManager.PROCESS_STATE_BOUND_TOP: procStateStr = "BTOP"; break; case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: procStateStr = "FGS "; break; case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: procStateStr = "BFGS"; break; case ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND: procStateStr = "IMPF"; break; case ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND: procStateStr = "IMPB"; break; case ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND: procStateStr = "TRNB"; break; case ActivityManager.PROCESS_STATE_BACKUP: procStateStr = "BKUP"; break; case ActivityManager.PROCESS_STATE_SERVICE: procStateStr = "SVC "; break; case ActivityManager.PROCESS_STATE_RECEIVER: procStateStr = "RCVR"; break; case ActivityManager.PROCESS_STATE_TOP_SLEEPING: procStateStr = "TPSL"; break; case ActivityManager.PROCESS_STATE_HEAVY_WEIGHT: procStateStr = "HVY "; break; case ActivityManager.PROCESS_STATE_HOME: procStateStr = "HOME"; break; case ActivityManager.PROCESS_STATE_LAST_ACTIVITY: procStateStr = "LAST"; break; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: procStateStr = "CAC "; break; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: procStateStr = "CACC"; break; case ActivityManager.PROCESS_STATE_CACHED_RECENT: procStateStr = "CRE "; break; case ActivityManager.PROCESS_STATE_CACHED_EMPTY: procStateStr = "CEM "; break; case ActivityManager.PROCESS_STATE_NONEXISTENT: procStateStr = "NONE"; break; default: procStateStr = "??"; break; } return procStateStr; } /** * The AppTask allows you to manage your own application's tasks. * See {@link android.app.ActivityManager#getAppTasks()} Loading core/java/android/net/NetworkPolicyManager.java +48 −2 Original line number Diff line number Diff line Loading @@ -16,14 +16,17 @@ package android.net; import static android.app.ActivityManager.procStateToString; import static android.content.pm.PackageManager.GET_SIGNATURES; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemService; import android.annotation.TestApi; import android.app.ActivityManager; import android.app.ActivityManager.ProcessCapability; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; Loading Loading @@ -617,8 +620,18 @@ public class NetworkPolicyManager { * to access network when the device is idle or in battery saver mode. Otherwise, false. * @hide */ public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode(int procState) { return procState <= FOREGROUND_THRESHOLD_STATE; public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode(@Nullable UidState uidState) { if (uidState == null) { return false; } return isProcStateAllowedWhileIdleOrPowerSaveMode(uidState.procState, uidState.capability); } /** @hide */ public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode( int procState, @ProcessCapability int capability) { return procState <= FOREGROUND_THRESHOLD_STATE || (capability & ActivityManager.PROCESS_CAPABILITY_NETWORK) != 0; } /** Loading @@ -626,10 +639,43 @@ public class NetworkPolicyManager { * to access network when the device is in data saver mode. Otherwise, false. * @hide */ public static boolean isProcStateAllowedWhileOnRestrictBackground(@Nullable UidState uidState) { if (uidState == null) { return false; } return isProcStateAllowedWhileOnRestrictBackground(uidState.procState); } /** @hide */ public static boolean isProcStateAllowedWhileOnRestrictBackground(int procState) { // Data saver and bg policy restrictions will only take procstate into account. return procState <= FOREGROUND_THRESHOLD_STATE; } /** @hide */ public static final class UidState { public int uid; public int procState; public int capability; public UidState(int uid, int procState, int capability) { this.uid = uid; this.procState = procState; this.capability = capability; } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("{procState="); sb.append(procStateToString(procState)); sb.append(",cap="); ActivityManager.printCapabilitiesSummary(sb, capability); sb.append("}"); return sb.toString(); } } /** @hide */ @TestApi @NonNull Loading services/core/java/com/android/server/am/ProcessList.java +6 −72 Original line number Diff line number Diff line Loading @@ -1016,76 +1016,7 @@ public final class ProcessList { } public static String makeProcStateString(int curProcState) { String procState; switch (curProcState) { case ActivityManager.PROCESS_STATE_PERSISTENT: procState = "PER "; break; case ActivityManager.PROCESS_STATE_PERSISTENT_UI: procState = "PERU"; break; case ActivityManager.PROCESS_STATE_TOP: procState = "TOP "; break; case ActivityManager.PROCESS_STATE_BOUND_TOP: procState = "BTOP"; break; case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: procState = "FGS "; break; case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: procState = "BFGS"; break; case ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND: procState = "IMPF"; break; case ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND: procState = "IMPB"; break; case ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND: procState = "TRNB"; break; case ActivityManager.PROCESS_STATE_BACKUP: procState = "BKUP"; break; case ActivityManager.PROCESS_STATE_SERVICE: procState = "SVC "; break; case ActivityManager.PROCESS_STATE_RECEIVER: procState = "RCVR"; break; case ActivityManager.PROCESS_STATE_TOP_SLEEPING: procState = "TPSL"; break; case ActivityManager.PROCESS_STATE_HEAVY_WEIGHT: procState = "HVY "; break; case ActivityManager.PROCESS_STATE_HOME: procState = "HOME"; break; case ActivityManager.PROCESS_STATE_LAST_ACTIVITY: procState = "LAST"; break; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: procState = "CAC "; break; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: procState = "CACC"; break; case ActivityManager.PROCESS_STATE_CACHED_RECENT: procState = "CRE "; break; case ActivityManager.PROCESS_STATE_CACHED_EMPTY: procState = "CEM "; break; case ActivityManager.PROCESS_STATE_NONEXISTENT: procState = "NONE"; break; default: procState = "??"; break; } return procState; return ActivityManager.procStateToString(curProcState); } public static int makeProcStateProtoEnum(int curProcState) { Loading Loading @@ -3833,10 +3764,13 @@ public final class ProcessList { int getBlockStateForUid(UidRecord uidRec) { // Denotes whether uid's process state is currently allowed network access. final boolean isAllowed = isProcStateAllowedWhileIdleOrPowerSaveMode(uidRec.getCurProcState()) isProcStateAllowedWhileIdleOrPowerSaveMode(uidRec.getCurProcState(), uidRec.curCapability) || isProcStateAllowedWhileOnRestrictBackground(uidRec.getCurProcState()); // Denotes whether uid's process state was previously allowed network access. final boolean wasAllowed = isProcStateAllowedWhileIdleOrPowerSaveMode(uidRec.setProcState) final boolean wasAllowed = isProcStateAllowedWhileIdleOrPowerSaveMode(uidRec.setProcState, uidRec.setCapability) || isProcStateAllowedWhileOnRestrictBackground(uidRec.setProcState); // When the uid is coming to foreground, AMS should inform the app thread that it should Loading services/core/java/com/android/server/net/NetworkPolicyLogger.java +12 −6 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static android.net.NetworkPolicyManager.FIREWALL_RULE_DEFAULT; import static android.os.Process.INVALID_UID; import android.app.ActivityManager; import android.app.ActivityManager.ProcessCapability; import android.net.NetworkPolicyManager; import android.os.UserHandle; import android.util.Log; Loading Loading @@ -97,13 +98,15 @@ public class NetworkPolicyLogger { } } void uidStateChanged(int uid, int procState, long procStateSeq) { void uidStateChanged(int uid, int procState, long procStateSeq, @ProcessCapability int capability) { synchronized (mLock) { if (LOGV || uid == mDebugUid) { Slog.v(TAG, uid + " state changed to " + ProcessList.makeProcStateString(procState) + " with seq=" + procStateSeq); + ProcessList.makeProcStateString(procState) + ",seq=" + procStateSeq + ",cap=" + ActivityManager.getCapabilitiesSummary(capability)); } mUidStateChangeBuffer.uidStateChanged(uid, procState, procStateSeq); mUidStateChangeBuffer.uidStateChanged(uid, procState, procStateSeq, capability); } } Loading Loading @@ -373,7 +376,8 @@ public class NetworkPolicyLogger { super(Data.class, capacity); } public void uidStateChanged(int uid, int procState, long procStateSeq) { public void uidStateChanged(int uid, int procState, long procStateSeq, @ProcessCapability int capability) { final Data data = getNextSlot(); if (data == null) return; Loading @@ -381,6 +385,7 @@ public class NetworkPolicyLogger { data.type = EVENT_UID_STATE_CHANGED; data.ifield1 = uid; data.ifield2 = procState; data.ifield3 = capability; data.lfield1 = procStateSeq; data.timeStamp = System.currentTimeMillis(); } Loading Loading @@ -546,8 +551,9 @@ public class NetworkPolicyLogger { case EVENT_NETWORK_BLOCKED: return data.ifield1 + "-" + getBlockedReason(data.ifield2); case EVENT_UID_STATE_CHANGED: return data.ifield1 + "-" + ProcessList.makeProcStateString(data.ifield2) + "-" + data.lfield1; return data.ifield1 + ":" + ProcessList.makeProcStateString(data.ifield2) + ":" + ActivityManager.getCapabilitiesSummary(data.ifield3) + ":" + data.lfield1; case EVENT_POLICIES_CHANGED: return getPolicyChangedLog(data.ifield1, data.ifield2, data.ifield3); case EVENT_METEREDNESS_CHANGED: Loading Loading
core/api/test-current.txt +1 −1 Original line number Diff line number Diff line Loading @@ -82,7 +82,7 @@ package android.app { method public static boolean isHighEndGfx(); method public static void resumeAppSwitches() throws android.os.RemoteException; method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public void scheduleApplicationInfoChanged(java.util.List<java.lang.String>, int); field public static final int PROCESS_CAPABILITY_ALL = 7; // 0x7 field public static final int PROCESS_CAPABILITY_ALL = 15; // 0xf field public static final int PROCESS_CAPABILITY_ALL_EXPLICIT = 1; // 0x1 field public static final int PROCESS_CAPABILITY_ALL_IMPLICIT = 6; // 0x6 field public static final int PROCESS_CAPABILITY_FOREGROUND_CAMERA = 2; // 0x2 Loading
core/java/android/app/ActivityManager.java +97 −2 Original line number Diff line number Diff line Loading @@ -601,11 +601,15 @@ public class ActivityManager { @TestApi public static final int PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 1 << 2; /** @hide Process can access network despite any power saving resrictions */ public static final int PROCESS_CAPABILITY_NETWORK = 1 << 3; /** @hide all capabilities, the ORing of all flags in {@link ProcessCapability}*/ @TestApi public static final int PROCESS_CAPABILITY_ALL = PROCESS_CAPABILITY_FOREGROUND_LOCATION | PROCESS_CAPABILITY_FOREGROUND_CAMERA | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE | PROCESS_CAPABILITY_NETWORK; /** * All explicit capabilities. These are capabilities that need to be specified from manifest * file. Loading @@ -631,6 +635,15 @@ public class ActivityManager { pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0 ? 'L' : '-'); pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-'); pw.print((caps & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0 ? 'M' : '-'); pw.print((caps & PROCESS_CAPABILITY_NETWORK) != 0 ? 'N' : '-'); } /** @hide */ public static void printCapabilitiesSummary(StringBuilder sb, @ProcessCapability int caps) { sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_LOCATION) != 0 ? 'L' : '-'); sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_CAMERA) != 0 ? 'C' : '-'); sb.append((caps & PROCESS_CAPABILITY_FOREGROUND_MICROPHONE) != 0 ? 'M' : '-'); sb.append((caps & PROCESS_CAPABILITY_NETWORK) != 0 ? 'N' : '-'); } /** Loading @@ -641,13 +654,21 @@ public class ActivityManager { printCapabilitiesSummary(pw, caps); final int remain = caps & ~(PROCESS_CAPABILITY_FOREGROUND_LOCATION | PROCESS_CAPABILITY_FOREGROUND_CAMERA | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE); | PROCESS_CAPABILITY_FOREGROUND_MICROPHONE | PROCESS_CAPABILITY_NETWORK); if (remain != 0) { pw.print('+'); pw.print(remain); } } /** @hide */ public static String getCapabilitiesSummary(@ProcessCapability int caps) { final StringBuilder sb = new StringBuilder(); printCapabilitiesSummary(sb, caps); return sb.toString(); } // NOTE: If PROCESS_STATEs are added, then new fields must be added // to frameworks/base/core/proto/android/app/enums.proto and the following method must // be updated to correctly map between them. Loading Loading @@ -4777,6 +4798,80 @@ public class ActivityManager { } } /** @hide */ public static String procStateToString(int procState) { final String procStateStr; switch (procState) { case ActivityManager.PROCESS_STATE_PERSISTENT: procStateStr = "PER "; break; case ActivityManager.PROCESS_STATE_PERSISTENT_UI: procStateStr = "PERU"; break; case ActivityManager.PROCESS_STATE_TOP: procStateStr = "TOP "; break; case ActivityManager.PROCESS_STATE_BOUND_TOP: procStateStr = "BTOP"; break; case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: procStateStr = "FGS "; break; case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: procStateStr = "BFGS"; break; case ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND: procStateStr = "IMPF"; break; case ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND: procStateStr = "IMPB"; break; case ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND: procStateStr = "TRNB"; break; case ActivityManager.PROCESS_STATE_BACKUP: procStateStr = "BKUP"; break; case ActivityManager.PROCESS_STATE_SERVICE: procStateStr = "SVC "; break; case ActivityManager.PROCESS_STATE_RECEIVER: procStateStr = "RCVR"; break; case ActivityManager.PROCESS_STATE_TOP_SLEEPING: procStateStr = "TPSL"; break; case ActivityManager.PROCESS_STATE_HEAVY_WEIGHT: procStateStr = "HVY "; break; case ActivityManager.PROCESS_STATE_HOME: procStateStr = "HOME"; break; case ActivityManager.PROCESS_STATE_LAST_ACTIVITY: procStateStr = "LAST"; break; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: procStateStr = "CAC "; break; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: procStateStr = "CACC"; break; case ActivityManager.PROCESS_STATE_CACHED_RECENT: procStateStr = "CRE "; break; case ActivityManager.PROCESS_STATE_CACHED_EMPTY: procStateStr = "CEM "; break; case ActivityManager.PROCESS_STATE_NONEXISTENT: procStateStr = "NONE"; break; default: procStateStr = "??"; break; } return procStateStr; } /** * The AppTask allows you to manage your own application's tasks. * See {@link android.app.ActivityManager#getAppTasks()} Loading
core/java/android/net/NetworkPolicyManager.java +48 −2 Original line number Diff line number Diff line Loading @@ -16,14 +16,17 @@ package android.net; import static android.app.ActivityManager.procStateToString; import static android.content.pm.PackageManager.GET_SIGNATURES; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemService; import android.annotation.TestApi; import android.app.ActivityManager; import android.app.ActivityManager.ProcessCapability; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.Intent; Loading Loading @@ -617,8 +620,18 @@ public class NetworkPolicyManager { * to access network when the device is idle or in battery saver mode. Otherwise, false. * @hide */ public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode(int procState) { return procState <= FOREGROUND_THRESHOLD_STATE; public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode(@Nullable UidState uidState) { if (uidState == null) { return false; } return isProcStateAllowedWhileIdleOrPowerSaveMode(uidState.procState, uidState.capability); } /** @hide */ public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode( int procState, @ProcessCapability int capability) { return procState <= FOREGROUND_THRESHOLD_STATE || (capability & ActivityManager.PROCESS_CAPABILITY_NETWORK) != 0; } /** Loading @@ -626,10 +639,43 @@ public class NetworkPolicyManager { * to access network when the device is in data saver mode. Otherwise, false. * @hide */ public static boolean isProcStateAllowedWhileOnRestrictBackground(@Nullable UidState uidState) { if (uidState == null) { return false; } return isProcStateAllowedWhileOnRestrictBackground(uidState.procState); } /** @hide */ public static boolean isProcStateAllowedWhileOnRestrictBackground(int procState) { // Data saver and bg policy restrictions will only take procstate into account. return procState <= FOREGROUND_THRESHOLD_STATE; } /** @hide */ public static final class UidState { public int uid; public int procState; public int capability; public UidState(int uid, int procState, int capability) { this.uid = uid; this.procState = procState; this.capability = capability; } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("{procState="); sb.append(procStateToString(procState)); sb.append(",cap="); ActivityManager.printCapabilitiesSummary(sb, capability); sb.append("}"); return sb.toString(); } } /** @hide */ @TestApi @NonNull Loading
services/core/java/com/android/server/am/ProcessList.java +6 −72 Original line number Diff line number Diff line Loading @@ -1016,76 +1016,7 @@ public final class ProcessList { } public static String makeProcStateString(int curProcState) { String procState; switch (curProcState) { case ActivityManager.PROCESS_STATE_PERSISTENT: procState = "PER "; break; case ActivityManager.PROCESS_STATE_PERSISTENT_UI: procState = "PERU"; break; case ActivityManager.PROCESS_STATE_TOP: procState = "TOP "; break; case ActivityManager.PROCESS_STATE_BOUND_TOP: procState = "BTOP"; break; case ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE: procState = "FGS "; break; case ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE: procState = "BFGS"; break; case ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND: procState = "IMPF"; break; case ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND: procState = "IMPB"; break; case ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND: procState = "TRNB"; break; case ActivityManager.PROCESS_STATE_BACKUP: procState = "BKUP"; break; case ActivityManager.PROCESS_STATE_SERVICE: procState = "SVC "; break; case ActivityManager.PROCESS_STATE_RECEIVER: procState = "RCVR"; break; case ActivityManager.PROCESS_STATE_TOP_SLEEPING: procState = "TPSL"; break; case ActivityManager.PROCESS_STATE_HEAVY_WEIGHT: procState = "HVY "; break; case ActivityManager.PROCESS_STATE_HOME: procState = "HOME"; break; case ActivityManager.PROCESS_STATE_LAST_ACTIVITY: procState = "LAST"; break; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY: procState = "CAC "; break; case ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT: procState = "CACC"; break; case ActivityManager.PROCESS_STATE_CACHED_RECENT: procState = "CRE "; break; case ActivityManager.PROCESS_STATE_CACHED_EMPTY: procState = "CEM "; break; case ActivityManager.PROCESS_STATE_NONEXISTENT: procState = "NONE"; break; default: procState = "??"; break; } return procState; return ActivityManager.procStateToString(curProcState); } public static int makeProcStateProtoEnum(int curProcState) { Loading Loading @@ -3833,10 +3764,13 @@ public final class ProcessList { int getBlockStateForUid(UidRecord uidRec) { // Denotes whether uid's process state is currently allowed network access. final boolean isAllowed = isProcStateAllowedWhileIdleOrPowerSaveMode(uidRec.getCurProcState()) isProcStateAllowedWhileIdleOrPowerSaveMode(uidRec.getCurProcState(), uidRec.curCapability) || isProcStateAllowedWhileOnRestrictBackground(uidRec.getCurProcState()); // Denotes whether uid's process state was previously allowed network access. final boolean wasAllowed = isProcStateAllowedWhileIdleOrPowerSaveMode(uidRec.setProcState) final boolean wasAllowed = isProcStateAllowedWhileIdleOrPowerSaveMode(uidRec.setProcState, uidRec.setCapability) || isProcStateAllowedWhileOnRestrictBackground(uidRec.setProcState); // When the uid is coming to foreground, AMS should inform the app thread that it should Loading
services/core/java/com/android/server/net/NetworkPolicyLogger.java +12 −6 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static android.net.NetworkPolicyManager.FIREWALL_RULE_DEFAULT; import static android.os.Process.INVALID_UID; import android.app.ActivityManager; import android.app.ActivityManager.ProcessCapability; import android.net.NetworkPolicyManager; import android.os.UserHandle; import android.util.Log; Loading Loading @@ -97,13 +98,15 @@ public class NetworkPolicyLogger { } } void uidStateChanged(int uid, int procState, long procStateSeq) { void uidStateChanged(int uid, int procState, long procStateSeq, @ProcessCapability int capability) { synchronized (mLock) { if (LOGV || uid == mDebugUid) { Slog.v(TAG, uid + " state changed to " + ProcessList.makeProcStateString(procState) + " with seq=" + procStateSeq); + ProcessList.makeProcStateString(procState) + ",seq=" + procStateSeq + ",cap=" + ActivityManager.getCapabilitiesSummary(capability)); } mUidStateChangeBuffer.uidStateChanged(uid, procState, procStateSeq); mUidStateChangeBuffer.uidStateChanged(uid, procState, procStateSeq, capability); } } Loading Loading @@ -373,7 +376,8 @@ public class NetworkPolicyLogger { super(Data.class, capacity); } public void uidStateChanged(int uid, int procState, long procStateSeq) { public void uidStateChanged(int uid, int procState, long procStateSeq, @ProcessCapability int capability) { final Data data = getNextSlot(); if (data == null) return; Loading @@ -381,6 +385,7 @@ public class NetworkPolicyLogger { data.type = EVENT_UID_STATE_CHANGED; data.ifield1 = uid; data.ifield2 = procState; data.ifield3 = capability; data.lfield1 = procStateSeq; data.timeStamp = System.currentTimeMillis(); } Loading Loading @@ -546,8 +551,9 @@ public class NetworkPolicyLogger { case EVENT_NETWORK_BLOCKED: return data.ifield1 + "-" + getBlockedReason(data.ifield2); case EVENT_UID_STATE_CHANGED: return data.ifield1 + "-" + ProcessList.makeProcStateString(data.ifield2) + "-" + data.lfield1; return data.ifield1 + ":" + ProcessList.makeProcStateString(data.ifield2) + ":" + ActivityManager.getCapabilitiesSummary(data.ifield3) + ":" + data.lfield1; case EVENT_POLICIES_CHANGED: return getPolicyChangedLog(data.ifield1, data.ifield2, data.ifield3); case EVENT_METEREDNESS_CHANGED: Loading