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

Commit 99cee01c authored by Michal Karpinski's avatar Michal Karpinski Committed by Android (Google) Code Review
Browse files

Merge "Log various information about non-foreground activity starts"

parents 6e0404d4 201bc0c1
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -10658,6 +10658,15 @@ public final class Settings {
         */
        public static final String ACTIVITY_MANAGER_CONSTANTS = "activity_manager_constants";
        /**
         * Feature flag to enable or disable the activity starts logging feature.
         * Type: int (0 for false, 1 for true)
         * Default: 0
         * @hide
         */
        public static final String ACTIVITY_STARTS_LOGGING_ENABLED
                = "activity_starts_logging_enabled";
        /**
         * App ops specific settings.
         * This is encoded as a key=value list, separated by commas. Ex:
+1 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ public class SettingsBackupTest {
    private static final Set<String> BACKUP_BLACKLISTED_GLOBAL_SETTINGS =
            newHashSet(
                    Settings.Global.ACTIVITY_MANAGER_CONSTANTS,
                    Settings.Global.ACTIVITY_STARTS_LOGGING_ENABLED,
                    Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED,
                    Settings.Global.ADB_ENABLED,
                    Settings.Global.ADD_USERS_WHEN_LOCKED,
+244 −0
Original line number Diff line number Diff line
@@ -6180,6 +6180,250 @@ message MetricsEvent {
    // OS: Q
    DIALOG_ACCESSIBILITY_HEARINGAID = 1512;

    // ACTION: Activity start
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    ACTION_ACTIVITY_START = 1513;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Calling UID
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_CALLING_UID = 1514;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Calling package name
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_CALLING_PACKAGE_NAME = 1515;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Calling UID proc state
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_CALLING_UID_PROC_STATE = 1516;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Calling UID has any visible window
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_CALLING_UID_HAS_ANY_VISIBLE_WINDOW = 1517;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Real calling UID
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_REAL_CALLING_UID = 1518;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Real calling UID proc state
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_REAL_CALLING_UID_PROC_STATE = 1519;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Real calling UID has any visible window
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_REAL_CALLING_UID_HAS_ANY_VISIBLE_WINDOW = 1520;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Target UID
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_TARGET_UID = 1521;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Target UID package name
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_TARGET_PACKAGE_NAME = 1522;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Target UID proc state
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_TARGET_UID_PROC_STATE = 1523;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Target UID has any visible window
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_TARGET_UID_HAS_ANY_VISIBLE_WINDOW = 1524;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Target doze whitelist tag
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_TARGET_WHITELIST_TAG = 1525;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Target short component name
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_TARGET_SHORT_COMPONENT_NAME = 1526;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Coming from pending intent
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_COMING_FROM_PENDING_INTENT = 1527;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Intent action
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_INTENT_ACTION = 1528;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Caller app process record process name
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_PROCESS_NAME = 1529;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Caller app process record current proc state
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_CUR_PROC_STATE = 1530;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Caller app process record has client activities
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_HAS_CLIENT_ACTIVITIES = 1531;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Caller app process record has foreground services
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_HAS_FOREGROUND_SERVICES = 1532;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Caller app process record has foreground activities
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_HAS_FOREGROUND_ACTIVITIES = 1533;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Caller app process record has top UI
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_HAS_TOP_UI = 1534;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Caller app process record has overlay UI
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_HAS_OVERLAY_UI = 1535;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Caller app process record pending UI clean
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_PENDING_UI_CLEAN = 1536;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Millis since caller app's process record last interaction event
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_MILLIS_SINCE_LAST_INTERACTION_EVENT = 1537;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Millis since caller app's process record fg interaction
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_MILLIS_SINCE_FG_INTERACTION = 1538;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Millis since caller app's process record last became unimportant
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_PROCESS_RECORD_MILLIS_SINCE_UNIMPORTANT = 1539;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record launch mode
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_LAUNCH_MODE = 1540;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record target activity
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_TARGET_ACTIVITY = 1541;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record flags
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_FLAGS = 1542;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record real activity
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_REAL_ACTIVITY = 1543;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record short component name
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_SHORT_COMPONENT_NAME = 1544;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record process name
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_PROCESS_NAME = 1545;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record is fullscreen
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_IS_FULLSCREEN = 1546;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record is no display
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_IS_NO_DISPLAY = 1547;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Millis since activity was last visible
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_MILLIS_SINCE_LAST_VISIBLE = 1548;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record's resultTo packageName
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_RESULT_TO_PKG_NAME = 1549;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record's resultTo shortComponentName
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_RESULT_TO_SHORT_COMPONENT_NAME = 1550;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record is visible
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_IS_VISIBLE = 1551;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Activity record is visible ignoring keyguard
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_IS_VISIBLE_IGNORING_KEYGUARD = 1552;

    // Tagged data for ACTION_ACTIVITY_START.
    // FIELD: Millis since activity's last launch
    // CATEGORY: OTHER
    // OS: Q (will also ship in PQ1A)
    FIELD_ACTIVITY_RECORD_MILLIS_SINCE_LAST_LAUNCH = 1553;

    // ---- End Q Constants, all Q constants go above this line ----

+24 −3
Original line number Diff line number Diff line
@@ -207,6 +207,10 @@ final class ActivityManagerConstants extends ContentObserver {
    // Indicates if the processes need to be started asynchronously.
    public boolean FLAG_PROCESS_START_ASYNC = DEFAULT_PROCESS_START_ASYNC;

    // Indicates whether the activity starts logging is enabled.
    // Controlled by Settings.Global.ACTIVITY_STARTS_LOGGING_ENABLED
    boolean mFlagActivityStartsLoggingEnabled;

    private final ActivityManagerService mService;
    private ContentResolver mResolver;
    private final KeyValueListParser mParser = new KeyValueListParser(',');
@@ -235,6 +239,12 @@ final class ActivityManagerConstants extends ContentObserver {
    // memory trimming.
    public int CUR_TRIM_CACHED_PROCESSES;

    private static final Uri ACTIVITY_MANAGER_CONSTANTS_URI = Settings.Global.getUriFor(
                Settings.Global.ACTIVITY_MANAGER_CONSTANTS);

    private static final Uri ACTIVITY_STARTS_LOGGING_ENABLED_URI = Settings.Global.getUriFor(
                Settings.Global.ACTIVITY_STARTS_LOGGING_ENABLED);

    public ActivityManagerConstants(ActivityManagerService service, Handler handler) {
        super(handler);
        mService = service;
@@ -243,9 +253,10 @@ final class ActivityManagerConstants extends ContentObserver {

    public void start(ContentResolver resolver) {
        mResolver = resolver;
        mResolver.registerContentObserver(Settings.Global.getUriFor(
                Settings.Global.ACTIVITY_MANAGER_CONSTANTS), false, this);
        mResolver.registerContentObserver(ACTIVITY_MANAGER_CONSTANTS_URI, false, this);
        mResolver.registerContentObserver(ACTIVITY_STARTS_LOGGING_ENABLED_URI, false, this);
        updateConstants();
        updateActivityStartsLoggingEnabled();
    }

    public void setOverrideMaxCachedProcesses(int value) {
@@ -263,7 +274,12 @@ final class ActivityManagerConstants extends ContentObserver {

    @Override
    public void onChange(boolean selfChange, Uri uri) {
        if (uri == null) return;
        if (ACTIVITY_MANAGER_CONSTANTS_URI.equals(uri)) {
            updateConstants();
        } else if (ACTIVITY_STARTS_LOGGING_ENABLED_URI.equals(uri)) {
            updateActivityStartsLoggingEnabled();
        }
    }

    private void updateConstants() {
@@ -337,6 +353,11 @@ final class ActivityManagerConstants extends ContentObserver {
        }
    }

    private void updateActivityStartsLoggingEnabled() {
        mFlagActivityStartsLoggingEnabled = Settings.Global.getInt(mResolver,
                Settings.Global.ACTIVITY_STARTS_LOGGING_ENABLED, 0) == 1;
    }

    private void updateMaxCachedProcesses() {
        CUR_MAX_CACHED_PROCESSES = mOverrideMaxCachedProcesses < 0
                ? MAX_CACHED_PROCESSES : mOverrideMaxCachedProcesses;
+14 −0
Original line number Diff line number Diff line
@@ -7214,6 +7214,20 @@ public class ActivityManagerService extends IActivityManager.Stub
                || mPendingTempWhitelist.indexOfKey(uid) >= 0;
    }
    /**
     * @return whitelist tag for a uid from mPendingTempWhitelist, null if not currently on
     * the whitelist
     */
    String getPendingTempWhitelistTagForUidLocked(int uid) {
        final PendingTempWhitelist ptw = mPendingTempWhitelist.get(uid);
        return ptw != null ? ptw.tag : null;
    }
    @VisibleForTesting
    boolean isActivityStartsLoggingEnabled() {
        return mConstants.mFlagActivityStartsLoggingEnabled;
    }
    private ProviderInfo getProviderInfoLocked(String authority, int userHandle, int pmFlags) {
        ProviderInfo pi = null;
        ContentProviderRecord cpr = mProviderMap.getProviderByName(authority, userHandle);
Loading