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

Commit 094f08ef authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "resolve merge conflicts of 3aee38c8 to master."

parents ad0edade 24937d23
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -71,10 +71,11 @@ public abstract class UsageStatsManagerInternal {
     * Could be hours, could be days, who knows?
     *
     * @param packageName
     * @param uidForAppId The uid of the app, which will be used for its app id
     * @param userId
     * @return
     */
    public abstract boolean isAppIdle(String packageName, int userId);
    public abstract boolean isAppIdle(String packageName, int uidForAppId, int userId);

    /**
     * Returns all of the uids for a given user where all packages associating with that uid
+29 −11
Original line number Diff line number Diff line
@@ -374,6 +374,13 @@ public final class ActivityManagerService extends ActivityManagerNative
    // we will consider it to be doing interaction for usage stats.
    static final int SERVICE_USAGE_INTERACTION_TIME = 30*60*1000;
    // Maximum amount of time we will allow to elapse before re-reporting usage stats
    // interaction with foreground processes.
    static final long USAGE_STATS_INTERACTION_INTERVAL = 24*60*60*1000L;
    // Maximum number of users we allow to be running at a time.
    static final int MAX_RUNNING_USERS = 3;
    // How long to wait in getAssistContextExtras for the activity and foreground services
    // to respond with the result.
    static final int PENDING_ASSIST_EXTRAS_TIMEOUT = 500;
@@ -18826,7 +18833,8 @@ public final class ActivityManagerService extends ActivityManagerNative
        }
    }
    private final boolean applyOomAdjLocked(ProcessRecord app, boolean doingAll, long now) {
    private final boolean applyOomAdjLocked(ProcessRecord app, boolean doingAll, long now,
            long nowElapsed) {
        boolean success = true;
        if (app.curRawAdj != app.setRawAdj) {
@@ -18941,14 +18949,14 @@ public final class ActivityManagerService extends ActivityManagerNative
                BatteryStatsImpl stats = mBatteryStatsService.getActiveStatistics();
                synchronized (stats) {
                    app.lastWakeTime = stats.getProcessWakeTime(app.info.uid,
                            app.pid, SystemClock.elapsedRealtime());
                            app.pid, nowElapsed);
                }
                app.lastCpuTime = app.curCpuTime;
            }
            // Inform UsageStats of important process state change
            // Must be called before updating setProcState
            maybeUpdateUsageStatsLocked(app);
            maybeUpdateUsageStatsLocked(app, nowElapsed);
            app.setProcState = app.curProcState;
            if (app.setProcState >= ActivityManager.PROCESS_STATE_HOME) {
@@ -18959,6 +18967,11 @@ public final class ActivityManagerService extends ActivityManagerNative
            } else {
                app.procStateChanged = true;
            }
        } else if (app.reportedInteraction && (nowElapsed-app.interactionEventTime)
                > USAGE_STATS_INTERACTION_INTERVAL) {
            // For apps that sit around for a long time in the interactive state, we need
            // to report this at least once a day so they don't go idle.
            maybeUpdateUsageStatsLocked(app, nowElapsed);
        }
        if (changes != 0) {
@@ -19053,7 +19066,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        }
    }
    private void maybeUpdateUsageStatsLocked(ProcessRecord app) {
    private void maybeUpdateUsageStatsLocked(ProcessRecord app, long nowElapsed) {
        if (DEBUG_USAGE_STATS) {
            Slog.d(TAG, "Checking proc [" + Arrays.toString(app.getPackageList())
                    + "] state changes: old = " + app.setProcState + ", new = "
@@ -19070,19 +19083,20 @@ public final class ActivityManagerService extends ActivityManagerNative
            isInteraction = true;
            app.fgInteractionTime = 0;
        } else if (app.curProcState <= ActivityManager.PROCESS_STATE_TOP_SLEEPING) {
            final long now = SystemClock.elapsedRealtime();
            if (app.fgInteractionTime == 0) {
                app.fgInteractionTime = now;
                app.fgInteractionTime = nowElapsed;
                isInteraction = false;
            } else {
                isInteraction = now > app.fgInteractionTime + SERVICE_USAGE_INTERACTION_TIME;
                isInteraction = nowElapsed > app.fgInteractionTime + SERVICE_USAGE_INTERACTION_TIME;
            }
        } else {
            isInteraction = app.curProcState
                    <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND;
            app.fgInteractionTime = 0;
        }
        if (isInteraction && !app.reportedInteraction) {
        if (isInteraction && (!app.reportedInteraction
                || (nowElapsed-app.interactionEventTime) > USAGE_STATS_INTERACTION_INTERVAL)) {
            app.interactionEventTime = nowElapsed;
            String[] packages = app.getPackageList();
            if (packages != null) {
                for (int i = 0; i < packages.length; i++) {
@@ -19092,6 +19106,9 @@ public final class ActivityManagerService extends ActivityManagerNative
            }
        }
        app.reportedInteraction = isInteraction;
        if (!isInteraction) {
            app.interactionEventTime = 0;
        }
    }
    private final void setProcessTrackerStateLocked(ProcessRecord proc, int memFactor, long now) {
@@ -19114,7 +19131,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        computeOomAdjLocked(app, cachedAdj, TOP_APP, doingAll, now);
        return applyOomAdjLocked(app, doingAll, now);
        return applyOomAdjLocked(app, doingAll, now, SystemClock.elapsedRealtime());
    }
    final void updateProcessForegroundLocked(ProcessRecord proc, boolean isForeground,
@@ -19206,6 +19223,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        final ActivityRecord TOP_ACT = resumedAppLocked();
        final ProcessRecord TOP_APP = TOP_ACT != null ? TOP_ACT.app : null;
        final long now = SystemClock.uptimeMillis();
        final long nowElapsed = SystemClock.elapsedRealtime();
        final long oldTime = now - ProcessList.MAX_EMPTY_TIME;
        final int N = mLruProcesses.size();
@@ -19334,7 +19352,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                    }
                }
                applyOomAdjLocked(app, true, now);
                applyOomAdjLocked(app, true, now, nowElapsed);
                // Count the number of process types.
                switch (app.curProcState) {
+5 −0
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ final class ProcessRecord {
    boolean killed;             // True once we know the process has been killed
    boolean procStateChanged;   // Keep track of whether we changed 'setAdj'.
    boolean reportedInteraction;// Whether we have told usage stats about it being an interaction
    long interactionEventTime;  // The time we sent the last interaction event
    long fgInteractionTime;     // When we became foreground for interaction purposes
    String waitingToKill;       // Process is waiting to be killed when in the bg, and reason
    IBinder forcingToForeground;// Token that is forcing this process to be foreground
@@ -297,6 +298,10 @@ final class ProcessRecord {
        if (reportedInteraction || fgInteractionTime != 0) {
            pw.print(prefix); pw.print("reportedInteraction=");
            pw.print(reportedInteraction);
            if (interactionEventTime != 0) {
                pw.print(" time=");
                TimeUtils.formatDuration(interactionEventTime, SystemClock.elapsedRealtime(), pw);
            }
            if (fgInteractionTime != 0) {
                pw.print(" fgInteractionTime=");
                TimeUtils.formatDuration(fgInteractionTime, SystemClock.elapsedRealtime(), pw);
+2 −2
Original line number Diff line number Diff line
@@ -50,8 +50,8 @@ class AppIdleMonitor extends AppIdleStateChangeListener {
        }
    }

    boolean isAppIdle(String packageName, int userId) {
        return !mAppIdleParoleOn && mUsageStats.isAppIdle(packageName, userId);
    boolean isAppIdle(String packageName, int uidForAppId, int userId) {
        return !mAppIdleParoleOn && mUsageStats.isAppIdle(packageName, uidForAppId, userId);
    }

    @Override
+11 −2
Original line number Diff line number Diff line
@@ -2625,9 +2625,18 @@ public class SyncManager {
                        continue;
                    }
                    String packageName = getPackageName(op.target);
                    ApplicationInfo ai = null;
                    if (packageName != null) {
                        try {
                            ai = mContext.getPackageManager().getApplicationInfo(packageName,
                                    PackageManager.GET_UNINSTALLED_PACKAGES
                                    | PackageManager.GET_DISABLED_COMPONENTS);
                        } catch (NameNotFoundException e) {
                        }
                    }
                    // If app is considered idle, then skip for now and backoff
                    if (packageName != null
                            && mAppIdleMonitor.isAppIdle(packageName, op.target.userId)) {
                    if (ai != null
                            && mAppIdleMonitor.isAppIdle(packageName, ai.uid, op.target.userId)) {
                        increaseBackoffSetting(op);
                        op.appIdle = true;
                        if (isLoggable) {
Loading