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

Commit 0b4249a3 authored by Jing Ji's avatar Jing Ji
Browse files

Lift the throttle on polling meminfo for instruments started from shell

Bug: 142710821
Test: atest CtsAppTestCases:ActivityManagerMemoryInfoTest
Test: adb shell am instrument -e apps Maps^maps -w \
      com.android.tests.memoryusage/com.android.tests.memoryusage.MemoryUsageInstrumentation
Change-Id: I5d0e59475f27c427075967d253891d505ffc38a7
parent e97bfe48
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -67,6 +67,9 @@ class ActiveInstrumentation {
    // Set to true when we have told the watcher the instrumentation is finished.
    boolean mFinished;

    // The uid of the process who started this instrumentation.
    int mSourceUid;

    ActiveInstrumentation(ActivityManagerService service) {
        mService = service;
    }
+15 −1
Original line number Diff line number Diff line
@@ -4337,6 +4337,18 @@ public class ActivityManagerService extends IActivityManager.Stub
        final boolean allUids = mAtmInternal.isGetTasksAllowed(
                "getProcessMemoryInfo", callingPid, callingUid);
        // Check if the caller is actually instrumented and from shell, if it's true, we may lift
        // the throttle of PSS info sampling.
        boolean isCallerInstrumentedFromShell = false;
        synchronized (mPidsSelfLocked) {
            ProcessRecord caller = mPidsSelfLocked.get(callingPid);
            if (caller != null) {
                final ActiveInstrumentation instr = caller.getActiveInstrumentation();
                isCallerInstrumentedFromShell = instr != null
                        && (instr.mSourceUid == SHELL_UID || instr.mSourceUid == ROOT_UID);
            }
        }
        Debug.MemoryInfo[] infos = new Debug.MemoryInfo[pids.length];
        for (int i=pids.length-1; i>=0; i--) {
            infos[i] = new Debug.MemoryInfo();
@@ -4360,7 +4372,8 @@ public class ActivityManagerService extends IActivityManager.Stub
                    continue; // Not allowed to see other users.
                }
            }
            if (proc != null && proc.lastMemInfoTime >= lastNow && proc.lastMemInfo != null) {
            if (proc != null && proc.lastMemInfoTime >= lastNow && proc.lastMemInfo != null
                    && !isCallerInstrumentedFromShell) {
                // It hasn't been long enough that we want to take another sample; return
                // the last one.
                infos[i].set(proc.lastMemInfo);
@@ -16116,6 +16129,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                    disableTestApiChecks, mountExtStorageFull, abiOverride);
            app.setActiveInstrumentation(activeInstr);
            activeInstr.mFinished = false;
            activeInstr.mSourceUid = callingUid;
            activeInstr.mRunningProcesses.add(app);
            if (!mActiveInstrumentation.contains(activeInstr)) {
                mActiveInstrumentation.add(activeInstr);