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

Commit b3ddc4d7 authored by Hongming Jin's avatar Hongming Jin Committed by Android (Google) Code Review
Browse files

Merge "Add CPU stats into trace."

parents a42ffb22 f1dd13ba
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.PowerExemptionManager.TempAllowListType;
import android.os.TransactionTooLargeException;
import android.os.WorkSource;
import android.util.ArraySet;
import android.util.Pair;

import java.util.ArrayList;
import java.util.List;
@@ -83,6 +84,18 @@ public abstract class ActivityManagerInternal {
     */
    public static final int ALLOW_ALL_PROFILE_PERMISSIONS_IN_PROFILE = 3;

    /**
     * Returns profile information in free form string in two separate strings.
     * See AppProfiler for the output format.
     * The output can only be used for human consumption. The format may change
     * in the future.
     * Do not call it frequently.
     * @param time uptime for the cpu state
     * @param lines lines of the cpu state should be returned
     * @return a pair of Strings. The first is the current cpu load, the second is the cpu state.
     */
    public abstract Pair<String, String> getAppProfileStatsForDebugging(long time, int lines);

    /**
     * Verify that calling app has access to the given provider.
     */
+1 −0
Original line number Diff line number Diff line
@@ -59,4 +59,5 @@ message AccessibilityTraceProto {

    optional AccessibilityDumpProto accessibility_service = 10;
    optional com.android.server.wm.WindowManagerServiceDumpProto window_manager_service = 11;
    optional string cpu_stats = 12;
}
+6 −0
Original line number Diff line number Diff line
@@ -15339,6 +15339,12 @@ public class ActivityManagerService extends IActivityManager.Stub
    @VisibleForTesting
    public final class LocalService extends ActivityManagerInternal
            implements ActivityManagerLocal {
        @Override
        public Pair<String, String> getAppProfileStatsForDebugging(long time, int lines) {
            return mAppProfiler.getAppProfileStatsForDebugging(time, lines);
        }
        @Override
        public String checkContentProviderAccess(String authority, int userId) {
            return mCpHelper.checkContentProviderAccess(authority, userId);
+21 −0
Original line number Diff line number Diff line
@@ -2339,6 +2339,27 @@ public class AppProfiler {
        }
    }

    Pair<String, String> getAppProfileStatsForDebugging(long time, int linesOfStats) {
        String cpuLoad = null;
        String stats = null;
        synchronized (mProcessCpuTracker) {
            updateCpuStatsNow();
            cpuLoad = mProcessCpuTracker.printCurrentLoad();
            stats = mProcessCpuTracker.printCurrentState(time);
        }
        // Only return linesOfStats lines of Cpu stats.
        int toIndex = 0;
        for (int i = 0; i <= linesOfStats; i++) {
            int nextIndex = stats.indexOf('\n', toIndex);
            if (nextIndex == -1) {
                toIndex = stats.length();
                break;
            }
            toIndex = nextIndex + 1;
        }
        return new Pair(cpuLoad, stats.substring(0, toIndex));
    }

    @GuardedBy("mProfilerLock")
    void writeProcessesToGcToProto(ProtoOutputStream proto, long fieldId, String dumpPackage) {
        if (mProcessesToGc.size() > 0) {
+14 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import static com.android.server.accessibility.AccessibilityTraceProto.CALENDAR_
import static com.android.server.accessibility.AccessibilityTraceProto.CALLING_PARAMS;
import static com.android.server.accessibility.AccessibilityTraceProto.CALLING_PKG;
import static com.android.server.accessibility.AccessibilityTraceProto.CALLING_STACKS;
import static com.android.server.accessibility.AccessibilityTraceProto.CPU_STATS;
import static com.android.server.accessibility.AccessibilityTraceProto.ELAPSED_REALTIME_NANOS;
import static com.android.server.accessibility.AccessibilityTraceProto.LOGGING_TYPE;
import static com.android.server.accessibility.AccessibilityTraceProto.PROCESS_NAME;
@@ -75,6 +76,7 @@ import android.os.Message;
import android.os.Process;
import android.os.SystemClock;
import android.util.ArraySet;
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
import android.util.TypedValue;
@@ -1959,6 +1961,7 @@ final class AccessibilityController {
            }
        }

        private static final int CPU_STATS_COUNT = 5;
        private static final int BUFFER_CAPACITY = 1024 * 1024 * 12;
        private static final String TRACE_FILENAME = "/data/misc/a11ytrace/a11y_trace"
                + WINSCOPE_EXT;
@@ -2230,6 +2233,7 @@ final class AccessibilityController {
                                mService.dumpDebugLocked(os, WindowTraceLogLevel.ALL);
                            }
                            os.end(tokenInner);
                            os.write(CPU_STATS, printCpuStats(reportedTimeStampNanos));

                            os.end(tokenOuter);
                            synchronized (mLock) {
@@ -2262,5 +2266,15 @@ final class AccessibilityController {
                Slog.e(TAG, "Unable to write buffer to file", e);
            }
        }

        /**
         * Returns the string of CPU stats.
         */
        private String printCpuStats(long timeStampNanos) {
            Pair<String, String> stats = mService.mAmInternal.getAppProfileStatsForDebugging(
                    timeStampNanos, CPU_STATS_COUNT);

            return stats.first + stats.second;
        }
    }
}