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

Commit 46104d0b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "am: Move CachedAppOptimizer to ActivityManagerService" into main

parents 106985e5 17e31a61
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -8366,7 +8366,7 @@ public final class ActiveServices {
    protected boolean dumpService(FileDescriptor fd, PrintWriter pw, String name, int[] users,
            String[] args, int opti, boolean dumpAll) {
        try {
            mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
            mAm.getCachedAppOptimizer().enableFreezer(false);
            final ArrayList<ServiceRecord> services = new ArrayList<>();

            final Predicate<ServiceRecord> filter = DumpUtils.filterRecord(name);
@@ -8409,7 +8409,7 @@ public final class ActiveServices {
            }
            return true;
        } finally {
            mAm.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
            mAm.getCachedAppOptimizer().enableFreezer(true);
        }
    }

+40 −30
Original line number Diff line number Diff line
@@ -636,6 +636,8 @@ public class ActivityManagerService extends IActivityManager.Stub
    private static final DateTimeFormatter DROPBOX_TIME_FORMATTER =
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSZ");
    /** Service for optimizing resource usage from background apps. */
    private CachedAppOptimizer mCachedAppOptimizer;
    OomAdjuster mOomAdjuster;
    @GuardedBy("this")
    ProcessStateController mProcessStateController;
@@ -2135,13 +2137,13 @@ public class ActivityManagerService extends IActivityManager.Stub
        @Override
        protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
            try {
                mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
                mActivityManagerService.mCachedAppOptimizer.enableFreezer(false);
                if (!DumpUtils.checkDumpAndUsageStatsPermission(mActivityManagerService.mContext,
                        "meminfo", pw)) return;
                PriorityDump.dump(mPriorityDumper, fd, pw, args);
            } finally {
                mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
                mActivityManagerService.mCachedAppOptimizer.enableFreezer(true);
            }
        }
    }
@@ -2155,13 +2157,13 @@ public class ActivityManagerService extends IActivityManager.Stub
        @Override
        protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
            try {
                mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
                mActivityManagerService.mCachedAppOptimizer.enableFreezer(false);
                if (!DumpUtils.checkDumpAndUsageStatsPermission(mActivityManagerService.mContext,
                        "gfxinfo", pw)) return;
                mActivityManagerService.dumpGraphicsHardwareUsage(fd, pw, args);
            } finally {
                mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
                mActivityManagerService.mCachedAppOptimizer.enableFreezer(true);
            }
        }
    }
@@ -2175,13 +2177,13 @@ public class ActivityManagerService extends IActivityManager.Stub
        @Override
        protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
            try {
                mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
                mActivityManagerService.mCachedAppOptimizer.enableFreezer(false);
                if (!DumpUtils.checkDumpAndUsageStatsPermission(mActivityManagerService.mContext,
                        "dbinfo", pw)) return;
                mActivityManagerService.dumpDbInfo(fd, pw, args);
            } finally {
                mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
                mActivityManagerService.mCachedAppOptimizer.enableFreezer(true);
            }
        }
    }
@@ -2196,7 +2198,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        @Override
        protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
            try {
                mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
                mActivityManagerService.mCachedAppOptimizer.enableFreezer(false);
                if (!DumpUtils.checkDumpAndUsageStatsPermission(mActivityManagerService.mContext,
                        "cacheinfo", pw)) {
@@ -2205,7 +2207,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                mActivityManagerService.dumpBinderCacheContents(fd, pw, args);
            } finally {
                mActivityManagerService.mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
                mActivityManagerService.mCachedAppOptimizer.enableFreezer(true);
            }
        }
    }
@@ -2421,6 +2423,8 @@ public class ActivityManagerService extends IActivityManager.Stub
        mProcessList.init(this, activeUids, mPlatformCompat);
        mAppProfiler = new AppProfiler(this, BackgroundThread.getHandler().getLooper(), null);
        mPhantomProcessList = new PhantomProcessList(this);
        mCachedAppOptimizer = new CachedAppOptimizer(this);
        mProcessStateController = new ProcessStateController.Builder(this, mProcessList, activeUids)
                .setHandlerThread(handlerThread)
                .build();
@@ -2489,6 +2493,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                new LowMemDetector(this));
        mPhantomProcessList = new PhantomProcessList(this);
        final Looper activityTaskLooper = DisplayThread.get().getLooper();
        mCachedAppOptimizer = new CachedAppOptimizer(this);
        mProcessStateController = new ProcessStateController.Builder(this, mProcessList, activeUids)
                .setLockObject(this)
                .setTopProcessChangeCallback(this::updateTopAppListeners)
@@ -2549,7 +2554,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            Process.setThreadGroupAndCpuset(BackgroundThread.get().getThreadId(),
                    Process.THREAD_GROUP_SYSTEM);
            Process.setThreadGroupAndCpuset(
                    mOomAdjuster.mCachedAppOptimizer.mCachedAppOptimizerThread.getThreadId(),
                    mCachedAppOptimizer.mCachedAppOptimizerThread.getThreadId(),
                    Process.THREAD_GROUP_SYSTEM);
        } catch (Exception e) {
            Slog.w(TAG, "Setting background thread cpuset failed");
@@ -8908,7 +8913,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            if (!disableSystemCompaction()) {
                // Compact all non-zygote processes to freshen up the page cache.
                mOomAdjuster.mCachedAppOptimizer.compactAllSystem();
                mCachedAppOptimizer.compactAllSystem();
            }
            mLastIdleTime = now;
@@ -10470,7 +10475,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        synchronized(this) {
            mConstants.dump(pw);
            mOomAdjuster.dumpCachedAppOptimizerSettings(pw);
            mCachedAppOptimizer.dump(pw);
            pw.println();
            if (dumpAll) {
                pw.println(
@@ -10986,7 +10991,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    mConstants.dump(pw);
                }
            } else if ("cao".equals(cmd)) {
                mOomAdjuster.dumpCachedAppOptimizerSettings(pw);
                mCachedAppOptimizer.dump(pw);
            } else if ("timers".equals(cmd)) {
                AnrTimer.dump(pw, true);
            } else if ("services".equals(cmd) || "s".equals(cmd)) {
@@ -13566,7 +13571,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    fromBinderDied || app.isolated /* unlinkDeath */);
            // Cancel pending frozen task and clean up frozen record if there is any.
            mOomAdjuster.mCachedAppOptimizer.onCleanupApplicationRecordLocked(app);
            mCachedAppOptimizer.onCleanupApplicationRecordLocked(app);
        }
        mAppProfiler.onCleanupApplicationRecordLocked(app);
        mBroadcastQueue.onApplicationCleanupLocked(app);
@@ -16074,15 +16079,12 @@ public class ActivityManagerService extends IActivityManager.Stub
                enforceDebuggable(proc);
                mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
                mCachedAppOptimizer.enableFreezer(false);
                final RemoteCallback intermediateCallback = new RemoteCallback(
                        new RemoteCallback.OnResultListener() {
                        @Override
                        public void onResult(Bundle result) {
                        result -> {
                            finishCallback.sendResult(result);
                            mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
                        }
                            mCachedAppOptimizer.enableFreezer(true);
                        }, null);
                thread.dumpHeap(managed, mallocInfo, runGc, dumpBitmaps,
@@ -16185,7 +16187,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
        try {
            mOomAdjuster.mCachedAppOptimizer.enableFreezer(false);
            mCachedAppOptimizer.enableFreezer(false);
            for (int i = procs.size() - 1; i >= 0; i--) {
                ProcessRecord r = procs.get(i);
@@ -16216,7 +16218,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                }
            }
        } finally {
            mOomAdjuster.mCachedAppOptimizer.enableFreezer(true);
            mCachedAppOptimizer.enableFreezer(true);
            proto.flush();
        }
    }
@@ -16637,8 +16639,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    app = mPidsSelfLocked.get(pid);
                }
                if (app != null) {
                    mOomAdjuster.mCachedAppOptimizer.addFrozenProcessListener(app, executor,
                            listener);
                    mCachedAppOptimizer.addFrozenProcessListener(app, executor, listener);
                }
            }
        }
@@ -17912,7 +17913,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            // sends to the activity. After this race issue between WM/ATMS and AMS is solved, this
            // workaround can be removed. (b/213288355)
            if (isNewPending) {
                mOomAdjuster.mCachedAppOptimizer.unfreezeProcess(pid, OOM_ADJ_REASON_ACTIVITY);
                mCachedAppOptimizer.unfreezeProcess(pid, OOM_ADJ_REASON_ACTIVITY);
            }
            // We need to update the network rules for the app coming to the top state so that
            // it can access network when the device or the app is in a restricted state
@@ -18504,7 +18505,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                        final ProcessRecord app = apps.valueAt(iApp);
                        final IApplicationThread thread = app.getOnewayThread();
                        if (thread != null) {
                            mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(app,
                            mCachedAppOptimizer.unfreezeTemporarily(app,
                                    CachedAppOptimizer.UNFREEZE_REASON_PING);
                            pingCount.incrementAndGet();
                            try {
@@ -18592,7 +18593,7 @@ public class ActivityManagerService extends IActivityManager.Stub
    @Override
    public boolean isProcessFrozen(int pid) {
        enforceCallingPermission(permission.DUMP, "isProcessFrozen()");
        return mOomAdjuster.mCachedAppOptimizer.isProcessFrozen(pid);
        return mCachedAppOptimizer.isProcessFrozen(pid);
    }
    @Override
@@ -19330,9 +19331,18 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
    }
    CachedAppOptimizer getCachedAppOptimizer() {
        return mCachedAppOptimizer;
    }
    @VisibleForTesting
    void setCachedAppOptimizer(CachedAppOptimizer cachedAppOptimizer) {
        mCachedAppOptimizer = cachedAppOptimizer;
    }
    @Override
    public boolean isAppFreezerEnabled() {
        return mOomAdjuster.mCachedAppOptimizer.useFreezer();
        return mCachedAppOptimizer.useFreezer();
    }
    /**
@@ -19352,7 +19362,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        // Only system can toggle the freezer state
        if (callerUid == SYSTEM_UID || Build.IS_DEBUGGABLE) {
            return mOomAdjuster.mCachedAppOptimizer.enableFreezer(enable);
            return mCachedAppOptimizer.enableFreezer(enable);
        } else {
            throw new SecurityException("Caller uid " + callerUid + " cannot set freezer state ");
        }
@@ -19448,7 +19458,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        synchronized (mPidsSelfLocked) {
            app = mPidsSelfLocked.get(debugPid);
        }
        mOomAdjuster.mCachedAppOptimizer.binderError(debugPid, app, code, flags, err);
        mCachedAppOptimizer.binderError(debugPid, app, code, flags, err);
    }
    @GuardedBy("this")
+7 −7
Original line number Diff line number Diff line
@@ -1296,7 +1296,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
            if (isFullCompact) {
                pw.println("Executing full compaction for " + app.mPid);
                synchronized (mInternal.mProcLock) {
                    mInternal.mOomAdjuster.mCachedAppOptimizer.compactApp(app,
                    mInternal.getCachedAppOptimizer().compactApp(app,
                            CachedAppOptimizer.CompactProfile.FULL,
                            CachedAppOptimizer.CompactSource.SHELL, true);
                }
@@ -1304,7 +1304,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
            } else if (isSomeCompact) {
                pw.println("Executing some compaction for " + app.mPid);
                synchronized (mInternal.mProcLock) {
                    mInternal.mOomAdjuster.mCachedAppOptimizer.compactApp(app,
                    mInternal.getCachedAppOptimizer().compactApp(app,
                            CachedAppOptimizer.CompactProfile.SOME,
                            CachedAppOptimizer.CompactSource.SHELL, true);
                }
@@ -1313,7 +1313,7 @@ final class ActivityManagerShellCommand extends ShellCommand {
        } else if (op.equals("system")) {
            pw.println("Executing system compaction");
            synchronized (mInternal.mProcLock) {
                mInternal.mOomAdjuster.mCachedAppOptimizer.compactAllSystem();
                mInternal.getCachedAppOptimizer().compactAllSystem();
            }
            pw.println("Finished system compaction");
        } else if (op.equals("native")) {
@@ -1329,10 +1329,10 @@ final class ActivityManagerShellCommand extends ShellCommand {
                return -1;
            }
            if (isFullCompact) {
                mInternal.mOomAdjuster.mCachedAppOptimizer.compactNative(
                mInternal.getCachedAppOptimizer().compactNative(
                        CachedAppOptimizer.CompactProfile.FULL, pid);
            } else if (isSomeCompact) {
                mInternal.mOomAdjuster.mCachedAppOptimizer.compactNative(
                mInternal.getCachedAppOptimizer().compactNative(
                        CachedAppOptimizer.CompactProfile.SOME, pid);
            } else {
                getErrPrintWriter().println("Error: unknown compaction type '" + op + "'");
@@ -1365,9 +1365,9 @@ final class ActivityManagerShellCommand extends ShellCommand {
            synchronized (mInternal.mProcLock) {
                proc.mOptRecord.setFreezeSticky(isSticky);
                if (freeze) {
                    mInternal.mOomAdjuster.mCachedAppOptimizer.forceFreezeAppAsyncLSP(proc);
                    mInternal.getCachedAppOptimizer().forceFreezeAppAsyncLSP(proc);
                } else {
                    mInternal.mOomAdjuster.mCachedAppOptimizer.unfreezeAppLSP(proc, 0, true);
                    mInternal.getCachedAppOptimizer().unfreezeAppLSP(proc, 0, true);
                }
            }
        }
+1 −1
Original line number Diff line number Diff line
@@ -555,7 +555,7 @@ class AppErrors {
            }
        }

        mService.mOomAdjuster.mCachedAppOptimizer.unfreezeProcess(initialPid,
        mService.getCachedAppOptimizer().unfreezeProcess(initialPid,
                CachedAppOptimizer.UNFREEZE_REASON_PROCESS_END);
        proc.scheduleCrashLocked(message, exceptionTypeId, extras);
        if (force) {
+1 −1
Original line number Diff line number Diff line
@@ -1446,7 +1446,7 @@ public class AppProfiler {
                if (DEBUG_SWITCH || DEBUG_OOM_ADJ) {
                    Slog.v(TAG_OOM_ADJ, msg + app.processName + " to " + level);
                }
                mService.mOomAdjuster.mCachedAppOptimizer.unfreezeTemporarily(app,
                mService.getCachedAppOptimizer().unfreezeTemporarily(app,
                        CachedAppOptimizer.UNFREEZE_REASON_TRIM_MEMORY);
                thread.scheduleTrimMemory(level);
            } catch (RemoteException e) {
Loading