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

Commit 6a161e3f authored by Manjeet Rulhania's avatar Manjeet Rulhania Committed by Android (Google) Code Review
Browse files

Merge "Cleanup access tracking logs" into main

parents 7f8bd2fb f1a92d7f
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