Loading core/java/android/app/ActivityManagerInternal.java +13 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. */ Loading core/proto/android/server/accessibilitytrace.proto +1 −0 Original line number Diff line number Diff line Loading @@ -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; } services/core/java/com/android/server/am/ActivityManagerService.java +6 −0 Original line number Diff line number Diff line Loading @@ -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); services/core/java/com/android/server/am/AppProfiler.java +21 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading services/core/java/com/android/server/wm/AccessibilityController.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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; } } } Loading
core/java/android/app/ActivityManagerInternal.java +13 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. */ Loading
core/proto/android/server/accessibilitytrace.proto +1 −0 Original line number Diff line number Diff line Loading @@ -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; }
services/core/java/com/android/server/am/ActivityManagerService.java +6 −0 Original line number Diff line number Diff line Loading @@ -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);
services/core/java/com/android/server/am/AppProfiler.java +21 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
services/core/java/com/android/server/wm/AccessibilityController.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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; } } }