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

Commit f1a8ce65 authored by Edgar Arriaga's avatar Edgar Arriaga
Browse files

Add compaction memory diagnostics

This CL adds multiple memory diagnostics to app compation system
which allows to evaluate them per source and per app for evaluating
optimizations, bugfixes, throttles, etc.

In addition, an option is added to perform the system processes compaction
via am compact system command for testing.

Bug: 233415647
Test: dumpsys activity
Test: am compact system
Test: am compact full <app> <uid>
Test: atest CachedAppOptimizerTest

Change-Id: Ic5ccab33580473a3eb6ea056a818d94e53521623
parent 78c33bb4
Loading
Loading
Loading
Loading
+27 −16
Original line number Diff line number Diff line
@@ -989,26 +989,36 @@ final class ActivityManagerShellCommand extends ShellCommand {

    @NeverCompile
    int runCompact(PrintWriter pw) {
        ProcessRecord app;
        String op = getNextArgRequired();
        boolean isFullCompact = op.equals("full");
        boolean isSomeCompact = op.equals("some");
        if (isFullCompact || isSomeCompact) {
            String processName = getNextArgRequired();
            String uid = getNextArgRequired();
        String op = getNextArgRequired();
        ProcessRecord app;
            synchronized (mInternal.mProcLock) {
                app = mInternal.getProcessRecordLocked(processName, Integer.parseInt(uid));
            }
            pw.println("Process record found pid: " + app.mPid);
        if (op.equals("full")) {
            if (isFullCompact) {
                pw.println("Executing full compaction for " + app.mPid);
                synchronized (mInternal.mProcLock) {
                    mInternal.mOomAdjuster.mCachedAppOptimizer.compactAppFull(app, true);
                }
                pw.println("Finished full compaction for " + app.mPid);
        } else if (op.equals("some")) {
            } else if (isSomeCompact) {
                pw.println("Executing some compaction for " + app.mPid);
                synchronized (mInternal.mProcLock) {
                    mInternal.mOomAdjuster.mCachedAppOptimizer.compactAppSome(app, true);
                }
                pw.println("Finished some compaction for " + app.mPid);
            }
        } else if (op.equals("system")) {
            pw.println("Executing system compaction");
            synchronized (mInternal.mProcLock) {
                mInternal.mOomAdjuster.mCachedAppOptimizer.compactAllSystem();
            }
            pw.println("Finished system compaction");
        } else {
            getErrPrintWriter().println("Error: unknown compact command '" + op + "'");
            return -1;
@@ -3570,10 +3580,11 @@ final class ActivityManagerShellCommand extends ShellCommand {
            pw.println("      --allow-background-activity-starts: The receiver may start activities");
            pw.println("          even if in the background.");
            pw.println("      --async: Send without waiting for the completion of the receiver.");
            pw.println("  compact <process_name> <Package UID> [some|full]");
            pw.println("  compact [some|full|system] <process_name> <Package UID>");
            pw.println("      Force process compaction.");
            pw.println("      some: execute file compaction.");
            pw.println("      full: execute anon + file compaction.");
            pw.println("      system: system compaction.");
            pw.println("  instrument [-r] [-e <NAME> <VALUE>] [-p <FILE>] [-w]");
            pw.println("          [--user <USER_ID> | current]");
            pw.println("          [--no-hidden-api-checks [--no-test-api-access]]");