Loading services/core/java/com/android/server/appop/AttributedOp.java +4 −7 Original line number Diff line number Diff line Loading @@ -113,7 +113,7 @@ final class AttributedOp { mAppOpsService.mHistoricalRegistry.incrementOpAccessedCount(parent.op, parent.uid, parent.packageName, persistentDeviceId, tag, uidState, flags, accessTime, AppOpsManager.ATTRIBUTION_FLAGS_NONE, AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE, DiscreteOpsRegistry.ACCESS_TYPE_NOTE_OP, accessCount); accessCount); } /** Loading Loading @@ -257,8 +257,7 @@ final class AttributedOp { if (isStarted) { mAppOpsService.mHistoricalRegistry.incrementOpAccessedCount(parent.op, parent.uid, parent.packageName, persistentDeviceId, tag, uidState, flags, startTime, attributionFlags, attributionChainId, DiscreteOpsRegistry.ACCESS_TYPE_START_OP, 1); attributionFlags, attributionChainId, 1); } } Loading Loading @@ -344,9 +343,7 @@ final class AttributedOp { mAppOpsService.mHistoricalRegistry.increaseOpAccessDuration(parent.op, parent.uid, parent.packageName, persistentDeviceId, tag, event.getUidState(), event.getFlags(), finishedEvent.getNoteTime(), finishedEvent.getDuration(), event.getAttributionFlags(), event.getAttributionChainId(), isPausing ? DiscreteOpsRegistry.ACCESS_TYPE_PAUSE_OP : DiscreteOpsRegistry.ACCESS_TYPE_FINISH_OP); event.getAttributionFlags(), event.getAttributionChainId()); if (!isPausing) { mAppOpsService.mInProgressStartOpEventPool.release(event); Loading Loading @@ -454,7 +451,7 @@ final class AttributedOp { mAppOpsService.mHistoricalRegistry.incrementOpAccessedCount(parent.op, parent.uid, parent.packageName, persistentDeviceId, tag, event.getUidState(), event.getFlags(), startTime, event.getAttributionFlags(), event.getAttributionChainId(), DiscreteOpsRegistry.ACCESS_TYPE_RESUME_OP, 1); event.getAttributionChainId(), 1); if (shouldSendActive) { mAppOpsService.scheduleOpActiveChangedIfNeededLocked(parent.op, parent.uid, parent.packageName, tag, event.getVirtualDeviceId(), true, Loading services/core/java/com/android/server/appop/DiscreteOpsRegistry.java +1 −55 Original line number Diff line number Diff line Loading @@ -46,22 +46,17 @@ import static android.app.AppOpsManager.OP_WRITE_SMS; import static java.lang.Long.min; import static java.lang.Math.max; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppOpsManager; import android.os.AsyncTask; import android.os.Build; import android.permission.flags.Flags; import android.provider.DeviceConfig; import android.util.Slog; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FrameworkStatsLog; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.text.SimpleDateFormat; import java.time.Duration; import java.util.Date; Loading Loading @@ -134,27 +129,6 @@ abstract class DiscreteOpsRegistry { boolean mDebugMode = false; static final int ACCESS_TYPE_NOTE_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__NOTE_OP; static final int ACCESS_TYPE_START_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__START_OP; static final int ACCESS_TYPE_FINISH_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__FINISH_OP; static final int ACCESS_TYPE_PAUSE_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__PAUSE_OP; static final int ACCESS_TYPE_RESUME_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__RESUME_OP; @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"ACCESS_TYPE_"}, value = { ACCESS_TYPE_NOTE_OP, ACCESS_TYPE_START_OP, ACCESS_TYPE_FINISH_OP, ACCESS_TYPE_PAUSE_OP, ACCESS_TYPE_RESUME_OP }) @interface AccessType {} void systemReady() { DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_PRIVACY, AsyncTask.THREAD_POOL_EXECUTOR, (DeviceConfig.Properties p) -> { Loading @@ -166,8 +140,7 @@ abstract class DiscreteOpsRegistry { abstract void recordDiscreteAccess(int uid, String packageName, @NonNull String deviceId, int op, @Nullable String attributionTag, @AppOpsManager.OpFlags int flags, @AppOpsManager.UidState int uidState, long accessTime, long accessDuration, @AppOpsManager.AttributionFlags int attributionFlags, int attributionChainId, @DiscreteOpsRegistry.AccessType int accessType); @AppOpsManager.AttributionFlags int attributionFlags, int attributionChainId); /** * A periodic callback from {@link AppOpsService} to flush the in memory events to disk. Loading Loading @@ -227,9 +200,6 @@ abstract class DiscreteOpsRegistry { return true; } // could this be impl detail of discrete registry, just one test is using the method // abstract DiscreteRegistry.DiscreteOps getAllDiscreteOps(); private void setDiscreteHistoryParameters(DeviceConfig.Properties p) { if (p.getKeyset().contains(PROPERTY_DISCRETE_HISTORY_CUTOFF)) { sDiscreteHistoryCutoff = p.getLong(PROPERTY_DISCRETE_HISTORY_CUTOFF, Loading Loading @@ -277,28 +247,4 @@ abstract class DiscreteOpsRegistry { } return result; } /** * Whether app op access tacking is enabled and a metric event should be logged. */ static boolean shouldLogAccess(int op) { return Flags.appopAccessTrackingLoggingEnabled() && ArrayUtils.contains(sDiscreteOpsToLog, op); } String getAttributionTag(String attributionTag, String packageName) { if (attributionTag == null || packageName == null) { return attributionTag; } int firstChar = 0; if (attributionTag.startsWith(packageName)) { firstChar = packageName.length(); if (firstChar < attributionTag.length() && attributionTag.charAt(firstChar) == '.') { firstChar++; } } return attributionTag.substring(firstChar); } } services/core/java/com/android/server/appop/DiscreteOpsSqlRegistry.java +1 −10 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import android.util.IntArray; import android.util.LongSparseArray; import android.util.Slog; import com.android.internal.util.FrameworkStatsLog; import com.android.server.ServiceThread; import java.io.File; Loading Loading @@ -97,15 +96,7 @@ public class DiscreteOpsSqlRegistry extends DiscreteOpsRegistry { void recordDiscreteAccess(int uid, String packageName, @NonNull String deviceId, int op, @Nullable String attributionTag, int flags, int uidState, long accessTime, long accessDuration, int attributionFlags, int attributionChainId, int accessType) { if (shouldLogAccess(op)) { FrameworkStatsLog.write(FrameworkStatsLog.APP_OP_ACCESS_TRACKED, uid, op, accessType, uidState, flags, attributionFlags, getAttributionTag(attributionTag, packageName), attributionChainId); } long accessTime, long accessDuration, int attributionFlags, int attributionChainId) { if (!isDiscreteOp(op, flags)) { return; } Loading services/core/java/com/android/server/appop/DiscreteOpsTestingShim.java +3 −5 Original line number Diff line number Diff line Loading @@ -48,15 +48,13 @@ class DiscreteOpsTestingShim extends DiscreteOpsRegistry { @Override void recordDiscreteAccess(int uid, String packageName, @NonNull String deviceId, int op, @Nullable String attributionTag, int flags, int uidState, long accessTime, long accessDuration, int attributionFlags, int attributionChainId, int accessType) { long accessDuration, int attributionFlags, int attributionChainId) { long start = SystemClock.uptimeMillis(); mXmlRegistry.recordDiscreteAccess(uid, packageName, deviceId, op, attributionTag, flags, uidState, accessTime, accessDuration, attributionFlags, attributionChainId, accessType); uidState, accessTime, accessDuration, attributionFlags, attributionChainId); long start2 = SystemClock.uptimeMillis(); mSqlRegistry.recordDiscreteAccess(uid, packageName, deviceId, op, attributionTag, flags, uidState, accessTime, accessDuration, attributionFlags, attributionChainId, accessType); uidState, accessTime, accessDuration, attributionFlags, attributionChainId); long end = SystemClock.uptimeMillis(); long xmlTimeTaken = start2 - start; long sqlTimeTaken = end - start2; Loading services/core/java/com/android/server/appop/DiscreteOpsXmlRegistry.java +1 −10 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import android.util.Xml; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.XmlUtils; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; Loading Loading @@ -159,15 +158,7 @@ class DiscreteOpsXmlRegistry extends DiscreteOpsRegistry { void recordDiscreteAccess(int uid, String packageName, @NonNull String deviceId, int op, @Nullable String attributionTag, @AppOpsManager.OpFlags int flags, @AppOpsManager.UidState int uidState, long accessTime, long accessDuration, @AppOpsManager.AttributionFlags int attributionFlags, int attributionChainId, @AccessType int accessType) { if (shouldLogAccess(op)) { FrameworkStatsLog.write(FrameworkStatsLog.APP_OP_ACCESS_TRACKED, uid, op, accessType, uidState, flags, attributionFlags, getAttributionTag(attributionTag, packageName), attributionChainId); } @AppOpsManager.AttributionFlags int attributionFlags, int attributionChainId) { if (!isDiscreteOp(op, flags)) { return; } Loading Loading
services/core/java/com/android/server/appop/AttributedOp.java +4 −7 Original line number Diff line number Diff line Loading @@ -113,7 +113,7 @@ final class AttributedOp { mAppOpsService.mHistoricalRegistry.incrementOpAccessedCount(parent.op, parent.uid, parent.packageName, persistentDeviceId, tag, uidState, flags, accessTime, AppOpsManager.ATTRIBUTION_FLAGS_NONE, AppOpsManager.ATTRIBUTION_CHAIN_ID_NONE, DiscreteOpsRegistry.ACCESS_TYPE_NOTE_OP, accessCount); accessCount); } /** Loading Loading @@ -257,8 +257,7 @@ final class AttributedOp { if (isStarted) { mAppOpsService.mHistoricalRegistry.incrementOpAccessedCount(parent.op, parent.uid, parent.packageName, persistentDeviceId, tag, uidState, flags, startTime, attributionFlags, attributionChainId, DiscreteOpsRegistry.ACCESS_TYPE_START_OP, 1); attributionFlags, attributionChainId, 1); } } Loading Loading @@ -344,9 +343,7 @@ final class AttributedOp { mAppOpsService.mHistoricalRegistry.increaseOpAccessDuration(parent.op, parent.uid, parent.packageName, persistentDeviceId, tag, event.getUidState(), event.getFlags(), finishedEvent.getNoteTime(), finishedEvent.getDuration(), event.getAttributionFlags(), event.getAttributionChainId(), isPausing ? DiscreteOpsRegistry.ACCESS_TYPE_PAUSE_OP : DiscreteOpsRegistry.ACCESS_TYPE_FINISH_OP); event.getAttributionFlags(), event.getAttributionChainId()); if (!isPausing) { mAppOpsService.mInProgressStartOpEventPool.release(event); Loading Loading @@ -454,7 +451,7 @@ final class AttributedOp { mAppOpsService.mHistoricalRegistry.incrementOpAccessedCount(parent.op, parent.uid, parent.packageName, persistentDeviceId, tag, event.getUidState(), event.getFlags(), startTime, event.getAttributionFlags(), event.getAttributionChainId(), DiscreteOpsRegistry.ACCESS_TYPE_RESUME_OP, 1); event.getAttributionChainId(), 1); if (shouldSendActive) { mAppOpsService.scheduleOpActiveChangedIfNeededLocked(parent.op, parent.uid, parent.packageName, tag, event.getVirtualDeviceId(), true, Loading
services/core/java/com/android/server/appop/DiscreteOpsRegistry.java +1 −55 Original line number Diff line number Diff line Loading @@ -46,22 +46,17 @@ import static android.app.AppOpsManager.OP_WRITE_SMS; import static java.lang.Long.min; import static java.lang.Math.max; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppOpsManager; import android.os.AsyncTask; import android.os.Build; import android.permission.flags.Flags; import android.provider.DeviceConfig; import android.util.Slog; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FrameworkStatsLog; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.text.SimpleDateFormat; import java.time.Duration; import java.util.Date; Loading Loading @@ -134,27 +129,6 @@ abstract class DiscreteOpsRegistry { boolean mDebugMode = false; static final int ACCESS_TYPE_NOTE_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__NOTE_OP; static final int ACCESS_TYPE_START_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__START_OP; static final int ACCESS_TYPE_FINISH_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__FINISH_OP; static final int ACCESS_TYPE_PAUSE_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__PAUSE_OP; static final int ACCESS_TYPE_RESUME_OP = FrameworkStatsLog.APP_OP_ACCESS_TRACKED__ACCESS_TYPE__RESUME_OP; @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"ACCESS_TYPE_"}, value = { ACCESS_TYPE_NOTE_OP, ACCESS_TYPE_START_OP, ACCESS_TYPE_FINISH_OP, ACCESS_TYPE_PAUSE_OP, ACCESS_TYPE_RESUME_OP }) @interface AccessType {} void systemReady() { DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_PRIVACY, AsyncTask.THREAD_POOL_EXECUTOR, (DeviceConfig.Properties p) -> { Loading @@ -166,8 +140,7 @@ abstract class DiscreteOpsRegistry { abstract void recordDiscreteAccess(int uid, String packageName, @NonNull String deviceId, int op, @Nullable String attributionTag, @AppOpsManager.OpFlags int flags, @AppOpsManager.UidState int uidState, long accessTime, long accessDuration, @AppOpsManager.AttributionFlags int attributionFlags, int attributionChainId, @DiscreteOpsRegistry.AccessType int accessType); @AppOpsManager.AttributionFlags int attributionFlags, int attributionChainId); /** * A periodic callback from {@link AppOpsService} to flush the in memory events to disk. Loading Loading @@ -227,9 +200,6 @@ abstract class DiscreteOpsRegistry { return true; } // could this be impl detail of discrete registry, just one test is using the method // abstract DiscreteRegistry.DiscreteOps getAllDiscreteOps(); private void setDiscreteHistoryParameters(DeviceConfig.Properties p) { if (p.getKeyset().contains(PROPERTY_DISCRETE_HISTORY_CUTOFF)) { sDiscreteHistoryCutoff = p.getLong(PROPERTY_DISCRETE_HISTORY_CUTOFF, Loading Loading @@ -277,28 +247,4 @@ abstract class DiscreteOpsRegistry { } return result; } /** * Whether app op access tacking is enabled and a metric event should be logged. */ static boolean shouldLogAccess(int op) { return Flags.appopAccessTrackingLoggingEnabled() && ArrayUtils.contains(sDiscreteOpsToLog, op); } String getAttributionTag(String attributionTag, String packageName) { if (attributionTag == null || packageName == null) { return attributionTag; } int firstChar = 0; if (attributionTag.startsWith(packageName)) { firstChar = packageName.length(); if (firstChar < attributionTag.length() && attributionTag.charAt(firstChar) == '.') { firstChar++; } } return attributionTag.substring(firstChar); } }
services/core/java/com/android/server/appop/DiscreteOpsSqlRegistry.java +1 −10 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import android.util.IntArray; import android.util.LongSparseArray; import android.util.Slog; import com.android.internal.util.FrameworkStatsLog; import com.android.server.ServiceThread; import java.io.File; Loading Loading @@ -97,15 +96,7 @@ public class DiscreteOpsSqlRegistry extends DiscreteOpsRegistry { void recordDiscreteAccess(int uid, String packageName, @NonNull String deviceId, int op, @Nullable String attributionTag, int flags, int uidState, long accessTime, long accessDuration, int attributionFlags, int attributionChainId, int accessType) { if (shouldLogAccess(op)) { FrameworkStatsLog.write(FrameworkStatsLog.APP_OP_ACCESS_TRACKED, uid, op, accessType, uidState, flags, attributionFlags, getAttributionTag(attributionTag, packageName), attributionChainId); } long accessTime, long accessDuration, int attributionFlags, int attributionChainId) { if (!isDiscreteOp(op, flags)) { return; } Loading
services/core/java/com/android/server/appop/DiscreteOpsTestingShim.java +3 −5 Original line number Diff line number Diff line Loading @@ -48,15 +48,13 @@ class DiscreteOpsTestingShim extends DiscreteOpsRegistry { @Override void recordDiscreteAccess(int uid, String packageName, @NonNull String deviceId, int op, @Nullable String attributionTag, int flags, int uidState, long accessTime, long accessDuration, int attributionFlags, int attributionChainId, int accessType) { long accessDuration, int attributionFlags, int attributionChainId) { long start = SystemClock.uptimeMillis(); mXmlRegistry.recordDiscreteAccess(uid, packageName, deviceId, op, attributionTag, flags, uidState, accessTime, accessDuration, attributionFlags, attributionChainId, accessType); uidState, accessTime, accessDuration, attributionFlags, attributionChainId); long start2 = SystemClock.uptimeMillis(); mSqlRegistry.recordDiscreteAccess(uid, packageName, deviceId, op, attributionTag, flags, uidState, accessTime, accessDuration, attributionFlags, attributionChainId, accessType); uidState, accessTime, accessDuration, attributionFlags, attributionChainId); long end = SystemClock.uptimeMillis(); long xmlTimeTaken = start2 - start; long sqlTimeTaken = end - start2; Loading
services/core/java/com/android/server/appop/DiscreteOpsXmlRegistry.java +1 −10 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import android.util.Xml; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.ArrayUtils; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.XmlUtils; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; Loading Loading @@ -159,15 +158,7 @@ class DiscreteOpsXmlRegistry extends DiscreteOpsRegistry { void recordDiscreteAccess(int uid, String packageName, @NonNull String deviceId, int op, @Nullable String attributionTag, @AppOpsManager.OpFlags int flags, @AppOpsManager.UidState int uidState, long accessTime, long accessDuration, @AppOpsManager.AttributionFlags int attributionFlags, int attributionChainId, @AccessType int accessType) { if (shouldLogAccess(op)) { FrameworkStatsLog.write(FrameworkStatsLog.APP_OP_ACCESS_TRACKED, uid, op, accessType, uidState, flags, attributionFlags, getAttributionTag(attributionTag, packageName), attributionChainId); } @AppOpsManager.AttributionFlags int attributionFlags, int attributionChainId) { if (!isDiscreteOp(op, flags)) { return; } Loading