Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f1a92d7f authored by mrulhania's avatar mrulhania
Browse files

Cleanup access tracking logs

We will capture all app op accesses in a standard
metric. app op access tracked is no more active, and
isn't in use.

Bug: 377584611
Test: build
Flag: EXEMPT bug fix
Change-Id: Iaeb41a526183a5a63c080d1160ca508deb21581c
parent 2badc1a5
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -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);
    }

    /**
@@ -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);
        }
    }

@@ -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);
@@ -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,
+1 −55
Original line number Diff line number Diff line
@@ -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;
@@ -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) -> {
@@ -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.
@@ -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,
@@ -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);
    }

}
+1 −10
Original line number Diff line number Diff line
@@ -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;
@@ -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;
        }
+3 −5
Original line number Diff line number Diff line
@@ -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;
+1 −10
Original line number Diff line number Diff line
@@ -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;
@@ -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