Loading core/java/android/app/AppOpsManager.java +7 −2 Original line number Diff line number Diff line Loading @@ -732,6 +732,10 @@ public class AppOpsManager { public static final int SAMPLING_STRATEGY_BOOT_TIME_SAMPLING = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__BOOT_TIME_SAMPLING; /** @hide */ public static final int SAMPLING_STRATEGY_UNIFORM_OPS = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM_OPS; /** * Strategies used for message sampling * @hide Loading @@ -741,7 +745,8 @@ public class AppOpsManager { SAMPLING_STRATEGY_DEFAULT, SAMPLING_STRATEGY_UNIFORM, SAMPLING_STRATEGY_RARELY_USED, SAMPLING_STRATEGY_BOOT_TIME_SAMPLING SAMPLING_STRATEGY_BOOT_TIME_SAMPLING, SAMPLING_STRATEGY_UNIFORM_OPS }) public @interface SamplingStrategy {} Loading Loading @@ -8350,7 +8355,7 @@ public class AppOpsManager { * @hide */ private static boolean isCollectingStackTraces() { if (sConfig.getSampledOpCode() == OP_NONE && if (sConfig.getSampledOpCode() == OP_NONE && sConfig.getAcceptableLeftDistance() == 0 && sConfig.getExpirationTimeSinceBootMillis() >= SystemClock.elapsedRealtime()) { return false; } Loading services/core/java/com/android/server/appop/AppOpsService.java +18 −9 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import static android.app.AppOpsManager.RestrictionBypass; import static android.app.AppOpsManager.SAMPLING_STRATEGY_BOOT_TIME_SAMPLING; import static android.app.AppOpsManager.SAMPLING_STRATEGY_RARELY_USED; import static android.app.AppOpsManager.SAMPLING_STRATEGY_UNIFORM; import static android.app.AppOpsManager.SAMPLING_STRATEGY_UNIFORM_OPS; import static android.app.AppOpsManager.SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE; import static android.app.AppOpsManager.UID_STATE_BACKGROUND; import static android.app.AppOpsManager.UID_STATE_CACHED; Loading Loading @@ -5936,11 +5937,13 @@ public class AppOpsService extends IAppOpsService.Stub { int newLeftDistance = AppOpsManager.leftCircularDistance(opCode, mSampledAppOpCode, _NUM_OP); if (mAcceptableLeftDistance < newLeftDistance) { if (mAcceptableLeftDistance < newLeftDistance && mSamplingStrategy != SAMPLING_STRATEGY_UNIFORM_OPS) { return; } if (mAcceptableLeftDistance > newLeftDistance) { if (mAcceptableLeftDistance > newLeftDistance && mSamplingStrategy != SAMPLING_STRATEGY_UNIFORM_OPS) { mAcceptableLeftDistance = newLeftDistance; mMessagesCollectedCount = 0.0f; } Loading Loading @@ -5978,13 +5981,13 @@ public class AppOpsService extends IAppOpsService.Stub { if (mSampledPackage == null) { if (ThreadLocalRandom.current().nextFloat() < 0.5f) { mSamplingStrategy = SAMPLING_STRATEGY_BOOT_TIME_SAMPLING; resampleAppOpForPackageLocked(packageName); resampleAppOpForPackageLocked(packageName, true); } } else if (mRarelyUsedPackages.contains(packageName)) { mRarelyUsedPackages.remove(packageName); if (ThreadLocalRandom.current().nextFloat() < 0.5f) { mSamplingStrategy = SAMPLING_STRATEGY_RARELY_USED; resampleAppOpForPackageLocked(packageName); resampleAppOpForPackageLocked(packageName, true); } } } Loading @@ -6001,16 +6004,22 @@ public class AppOpsService extends IAppOpsService.Stub { /** Resamples package and appop to watch from the list provided. */ private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) { if (!packageNames.isEmpty()) { if (ThreadLocalRandom.current().nextFloat() < 0.5f) { mSamplingStrategy = SAMPLING_STRATEGY_UNIFORM; resampleAppOpForPackageLocked(packageNames.get( ThreadLocalRandom.current().nextInt(packageNames.size()))); ThreadLocalRandom.current().nextInt(packageNames.size())), true); } else { mSamplingStrategy = SAMPLING_STRATEGY_UNIFORM_OPS; resampleAppOpForPackageLocked(packageNames.get( ThreadLocalRandom.current().nextInt(packageNames.size())), false); } } } /** Resamples appop for the chosen package and initializes sampling state */ private void resampleAppOpForPackageLocked(@NonNull String packageName) { private void resampleAppOpForPackageLocked(@NonNull String packageName, boolean pickOp) { mMessagesCollectedCount = 0.0f; mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP); mSampledAppOpCode = pickOp ? ThreadLocalRandom.current().nextInt(_NUM_OP) : OP_NONE; mAcceptableLeftDistance = _NUM_OP; mSampledPackage = packageName; } Loading Loading
core/java/android/app/AppOpsManager.java +7 −2 Original line number Diff line number Diff line Loading @@ -732,6 +732,10 @@ public class AppOpsManager { public static final int SAMPLING_STRATEGY_BOOT_TIME_SAMPLING = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__BOOT_TIME_SAMPLING; /** @hide */ public static final int SAMPLING_STRATEGY_UNIFORM_OPS = FrameworkStatsLog.RUNTIME_APP_OP_ACCESS__SAMPLING_STRATEGY__UNIFORM_OPS; /** * Strategies used for message sampling * @hide Loading @@ -741,7 +745,8 @@ public class AppOpsManager { SAMPLING_STRATEGY_DEFAULT, SAMPLING_STRATEGY_UNIFORM, SAMPLING_STRATEGY_RARELY_USED, SAMPLING_STRATEGY_BOOT_TIME_SAMPLING SAMPLING_STRATEGY_BOOT_TIME_SAMPLING, SAMPLING_STRATEGY_UNIFORM_OPS }) public @interface SamplingStrategy {} Loading Loading @@ -8350,7 +8355,7 @@ public class AppOpsManager { * @hide */ private static boolean isCollectingStackTraces() { if (sConfig.getSampledOpCode() == OP_NONE && if (sConfig.getSampledOpCode() == OP_NONE && sConfig.getAcceptableLeftDistance() == 0 && sConfig.getExpirationTimeSinceBootMillis() >= SystemClock.elapsedRealtime()) { return false; } Loading
services/core/java/com/android/server/appop/AppOpsService.java +18 −9 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import static android.app.AppOpsManager.RestrictionBypass; import static android.app.AppOpsManager.SAMPLING_STRATEGY_BOOT_TIME_SAMPLING; import static android.app.AppOpsManager.SAMPLING_STRATEGY_RARELY_USED; import static android.app.AppOpsManager.SAMPLING_STRATEGY_UNIFORM; import static android.app.AppOpsManager.SAMPLING_STRATEGY_UNIFORM_OPS; import static android.app.AppOpsManager.SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE; import static android.app.AppOpsManager.UID_STATE_BACKGROUND; import static android.app.AppOpsManager.UID_STATE_CACHED; Loading Loading @@ -5936,11 +5937,13 @@ public class AppOpsService extends IAppOpsService.Stub { int newLeftDistance = AppOpsManager.leftCircularDistance(opCode, mSampledAppOpCode, _NUM_OP); if (mAcceptableLeftDistance < newLeftDistance) { if (mAcceptableLeftDistance < newLeftDistance && mSamplingStrategy != SAMPLING_STRATEGY_UNIFORM_OPS) { return; } if (mAcceptableLeftDistance > newLeftDistance) { if (mAcceptableLeftDistance > newLeftDistance && mSamplingStrategy != SAMPLING_STRATEGY_UNIFORM_OPS) { mAcceptableLeftDistance = newLeftDistance; mMessagesCollectedCount = 0.0f; } Loading Loading @@ -5978,13 +5981,13 @@ public class AppOpsService extends IAppOpsService.Stub { if (mSampledPackage == null) { if (ThreadLocalRandom.current().nextFloat() < 0.5f) { mSamplingStrategy = SAMPLING_STRATEGY_BOOT_TIME_SAMPLING; resampleAppOpForPackageLocked(packageName); resampleAppOpForPackageLocked(packageName, true); } } else if (mRarelyUsedPackages.contains(packageName)) { mRarelyUsedPackages.remove(packageName); if (ThreadLocalRandom.current().nextFloat() < 0.5f) { mSamplingStrategy = SAMPLING_STRATEGY_RARELY_USED; resampleAppOpForPackageLocked(packageName); resampleAppOpForPackageLocked(packageName, true); } } } Loading @@ -6001,16 +6004,22 @@ public class AppOpsService extends IAppOpsService.Stub { /** Resamples package and appop to watch from the list provided. */ private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) { if (!packageNames.isEmpty()) { if (ThreadLocalRandom.current().nextFloat() < 0.5f) { mSamplingStrategy = SAMPLING_STRATEGY_UNIFORM; resampleAppOpForPackageLocked(packageNames.get( ThreadLocalRandom.current().nextInt(packageNames.size()))); ThreadLocalRandom.current().nextInt(packageNames.size())), true); } else { mSamplingStrategy = SAMPLING_STRATEGY_UNIFORM_OPS; resampleAppOpForPackageLocked(packageNames.get( ThreadLocalRandom.current().nextInt(packageNames.size())), false); } } } /** Resamples appop for the chosen package and initializes sampling state */ private void resampleAppOpForPackageLocked(@NonNull String packageName) { private void resampleAppOpForPackageLocked(@NonNull String packageName, boolean pickOp) { mMessagesCollectedCount = 0.0f; mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP); mSampledAppOpCode = pickOp ? ThreadLocalRandom.current().nextInt(_NUM_OP) : OP_NONE; mAcceptableLeftDistance = _NUM_OP; mSampledPackage = packageName; } Loading