Merge "Optimize stack trace reporting puller for speed." into rvc-dev am: 067595c4c5 am: 26e8f06c8e am: 52ff25e3a9

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11675584

Change-Id: I9ed170f23dcfe38600f65d31d58e69f0221d1961
This commit is contained in:
Stanislav Zholnin
2020-06-05 18:59:20 +00:00
committed by Automerger Merge Worker

View File

@@ -16,6 +16,11 @@
package com.android.server.appop; package com.android.server.appop;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q;
import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_CAMERA;
import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_LOCATION;
import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE; import static android.app.ActivityManager.PROCESS_CAPABILITY_FOREGROUND_MICROPHONE;
@@ -66,11 +71,6 @@ import static android.content.Intent.EXTRA_REPLACING;
import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS; import static android.content.pm.PermissionInfo.PROTECTION_DANGEROUS;
import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP; import static android.content.pm.PermissionInfo.PROTECTION_FLAG_APPOP;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_CAMERA_Q;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_LOCATION;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE;
import static android.app.ActivityManager.DEBUG_PROCESS_CAPABILITY_FOREGROUND_MICROPHONE_Q;
import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS; import static com.android.server.appop.AppOpsService.ModeCallback.ALL_OPS;
import static java.lang.Long.max; import static java.lang.Long.max;
@@ -1776,8 +1776,7 @@ public class AppOpsService extends IAppOpsService.Stub {
mHandler.postDelayed(new Runnable() { mHandler.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
List<String> packageNames = getPackageNamesForSampling(); List<String> packageNames = getPackageListAndResample();
resamplePackageAndAppOpLocked(packageNames);
initializeRarelyUsedPackagesList(new ArraySet<>(packageNames)); initializeRarelyUsedPackagesList(new ArraySet<>(packageNames));
} }
}, RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS); }, RARELY_USED_PACKAGES_INITIALIZATION_DELAY_MILLIS);
@@ -5967,11 +5966,13 @@ public class AppOpsService extends IAppOpsService.Stub {
mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS, mContext.enforcePermission(android.Manifest.permission.GET_APP_OPS_STATS,
Binder.getCallingPid(), Binder.getCallingUid(), null); Binder.getCallingPid(), Binder.getCallingUid(), null);
RuntimeAppOpAccessMessage result; RuntimeAppOpAccessMessage result;
List<String> packageNames = getPackageNamesForSampling();
synchronized (this) { synchronized (this) {
result = mCollectedRuntimePermissionMessage; result = mCollectedRuntimePermissionMessage;
resamplePackageAndAppOpLocked(packageNames); mCollectedRuntimePermissionMessage = null;
} }
mHandler.sendMessage(PooledLambda.obtainMessage(
AppOpsService::getPackageListAndResample,
this));
return result; return result;
} }
@@ -5995,6 +5996,15 @@ public class AppOpsService extends IAppOpsService.Stub {
} }
} }
/** Obtains package list and resamples package and appop to watch. */
private List<String> getPackageListAndResample() {
List<String> packageNames = getPackageNamesForSampling();
synchronized (this) {
resamplePackageAndAppOpLocked(packageNames);
}
return packageNames;
}
/** Resamples package and appop to watch from the list provided. */ /** Resamples package and appop to watch from the list provided. */
private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) { private void resamplePackageAndAppOpLocked(@NonNull List<String> packageNames) {
if (!packageNames.isEmpty()) { if (!packageNames.isEmpty()) {
@@ -6010,7 +6020,6 @@ public class AppOpsService extends IAppOpsService.Stub {
mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP); mSampledAppOpCode = ThreadLocalRandom.current().nextInt(_NUM_OP);
mAcceptableLeftDistance = _NUM_OP; mAcceptableLeftDistance = _NUM_OP;
mSampledPackage = packageName; mSampledPackage = packageName;
mCollectedRuntimePermissionMessage = null;
} }
/** /**