Loading cmds/statsd/src/StatsService.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -403,7 +403,7 @@ void StatsService::print_cmd_help(FILE* out) { fprintf(out, "\n *Note: If both UID and NAME are omitted then all configs will\n"); fprintf(out, "\n be removed from memory and disk!\n"); fprintf(out, "\n"); fprintf(out, "usage: adb shell cmd stats dump-report [UID] NAME [--proto]\n"); fprintf(out, "usage: adb shell cmd stats dump-report [UID] NAME [--include_current_bucket] [--proto]\n"); fprintf(out, " Dump all metric data for a configuration.\n"); fprintf(out, " UID The uid of the configuration. It is only possible to pass\n"); fprintf(out, " the UID parameter on eng builds. If UID is omitted the\n"); Loading Loading @@ -567,12 +567,17 @@ status_t StatsService::cmd_dump_report(FILE* out, FILE* err, const Vector<String int argCount = args.size(); bool good = false; bool proto = false; bool includeCurrentBucket = false; int uid; string name; if (!std::strcmp("--proto", args[argCount-1].c_str())) { proto = true; argCount -= 1; } if (!std::strcmp("--include_current_bucket", args[argCount-1].c_str())) { includeCurrentBucket = true; argCount -= 1; } if (argCount == 2) { // Automatically pick the UID uid = IPCThreadState::self()->getCallingUid(); Loading Loading @@ -600,7 +605,7 @@ status_t StatsService::cmd_dump_report(FILE* out, FILE* err, const Vector<String if (good) { vector<uint8_t> data; mProcessor->onDumpReport(ConfigKey(uid, StrToInt64(name)), getElapsedRealtimeNs(), false /* include_current_bucket*/, ADB_DUMP, &data); includeCurrentBucket, ADB_DUMP, &data); if (proto) { for (size_t i = 0; i < data.size(); i ++) { fprintf(out, "%c", data[i]); Loading cmds/statsd/src/atoms.proto +115 −3 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ message Atom { oneof pushed { // For StatsLog reasons, 1 is illegal and will not work. Must start at 2. BleScanStateChanged ble_scan_state_changed = 2; // 3 is available for use ProcessStateChanged process_state_changed = 3; BleScanResultReceived ble_scan_result_received = 4; SensorStateChanged sensor_state_changed = 5; GpsScanStateChanged gps_scan_state_changed = 6; Loading @@ -60,7 +60,12 @@ message Atom { LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 11; MobileRadioPowerStateChanged mobile_radio_power_state_changed = 12; WifiRadioPowerStateChanged wifi_radio_power_state_changed = 13; // 14 - 19 are available ActivityManagerSleepStateChanged activity_manager_sleep_state_changed = 14; MemoryFactorStateChanged memory_factor_state_changed = 15; ExcessiveCpuUsageReported excessive_cpu_usage_reported = 16; CachedKillReported cached_kill_reported = 17; ProcessMemoryStatReported process_memory_stat_reported = 18; // 19 is available BatterySaverModeStateChanged battery_saver_mode_state_changed = 20; DeviceIdleModeStateChanged device_idle_mode_state_changed = 21; DeviceIdlingModeStateChanged device_idling_mode_state_changed = 22; Loading Loading @@ -210,7 +215,8 @@ message ScreenStateChanged { } /** * Logs that the state of a process state, as per the activity manager, has changed. * Logs that the process state of the uid, as determined by ActivityManager * (i.e. the highest process state of that uid's processes) has changed. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java Loading @@ -222,6 +228,112 @@ message UidProcessStateChanged { optional android.app.ProcessStateEnum state = 2 [(stateFieldOption).option = EXCLUSIVE]; } /** * Logs process state change of a process, as per the activity manager. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java */ message ProcessStateChanged { optional int32 uid = 1; optional string process_name = 2; optional string package_name = 3; // TODO: remove this when validation is done optional int64 version = 5; // The state, from frameworks/base/core/proto/android/app/enums.proto. optional android.app.ProcessStateEnum state = 4; } /** * Logs when ActivityManagerService sleep state is changed. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityTaskManagerService.java */ message ActivityManagerSleepStateChanged { // TODO: import frameworks proto enum State { UNKNOWN = 0; ASLEEP = 1; AWAKE = 2; } optional State state = 1 [(stateFieldOption).option = EXCLUSIVE]; } /** * Logs when system memory state changes. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java */ message MemoryFactorStateChanged { // TODO: import frameworks proto enum State { MEMORY_UNKNOWN = 0; NORMAL = 1; // normal. MODERATE = 2; // moderate memory pressure. LOW = 3; // low memory. CRITICAL = 4; // critical memory. } optional State factor = 1 [(stateFieldOption).option = EXCLUSIVE]; } /** * Logs when app is using too much cpu, according to ActivityManagerService. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java */ message ExcessiveCpuUsageReported { optional int32 uid = 1; optional string process_name = 2; optional string package_name = 3; // package version. TODO: remove this when validation is done optional int64 version = 4; } /** * Logs when a cached process is killed, along with its pss. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java */ message CachedKillReported { optional int32 uid = 1; optional string process_name = 2; optional string package_name = 3; // TODO: remove this when validation is done optional int64 version = 5; optional int64 pss = 4; } /** * Logs when memory stats of a process is reported. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java */ message ProcessMemoryStatReported { optional int32 uid = 1; optional string process_name = 2; optional string package_name = 3; //TODO: remove this when validation is done optional int64 version = 9; optional int64 pss = 4; optional int64 uss = 5; optional int64 rss = 6; enum Type { ADD_PSS_INTERNAL_SINGLE = 0; ADD_PSS_INTERNAL_ALL_MEM = 1; ADD_PSS_INTERNAL_ALL_POLL = 2; ADD_PSS_EXTERNAL = 3; ADD_PSS_EXTERNAL_SLOW = 4; } optional Type type = 7; optional int64 duration = 8; } /** * Logs that a process started, finished, crashed, or ANRed. * Loading services/core/java/com/android/server/am/ActivityManagerService.java +76 −0 Original line number Diff line number Diff line Loading @@ -3332,6 +3332,14 @@ public class ActivityManagerService extends IActivityManager.Stub // Turn this condition on to cause killing to happen regularly, for testing. if (proc.baseProcessTracker != null) { proc.baseProcessTracker.reportCachedKill(proc.pkgList.mPkgList, proc.lastCachedPss); for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.CACHED_KILL_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), proc.lastCachedPss, holder.appVersion); } } proc.kill(Long.toString(proc.lastCachedPss) + "k from cached", true); } else if (proc != null && !keepIfLarge Loading @@ -3341,6 +3349,14 @@ public class ActivityManagerService extends IActivityManager.Stub if (proc.lastCachedPss >= mProcessList.getCachedRestoreThresholdKb()) { if (proc.baseProcessTracker != null) { proc.baseProcessTracker.reportCachedKill(proc.pkgList.mPkgList, proc.lastCachedPss); for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.CACHED_KILL_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), proc.lastCachedPss, holder.appVersion); } } proc.kill(Long.toString(proc.lastCachedPss) + "k from cached", true); } Loading Loading @@ -5365,6 +5381,19 @@ public class ActivityManagerService extends IActivityManager.Stub infos[i].getTotalUss(), infos[i].getTotalRss(), false, ProcessStats.ADD_PSS_EXTERNAL_SLOW, endTime-startTime, proc.pkgList.mPkgList); for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), infos[i].getTotalPss(), infos[i].getTotalUss(), infos[i].getTotalRss(), ProcessStats.ADD_PSS_EXTERNAL_SLOW, endTime-startTime, holder.appVersion); } } } } Loading Loading @@ -5395,6 +5424,16 @@ public class ActivityManagerService extends IActivityManager.Stub // Record this for posterity if the process has been stable. proc.baseProcessTracker.addPss(pss[i], tmpUss[0], tmpUss[2], false, ProcessStats.ADD_PSS_EXTERNAL, endTime-startTime, proc.pkgList.mPkgList); for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), pss[i], tmpUss[0], tmpUss[2], ProcessStats.ADD_PSS_EXTERNAL, endTime-startTime, holder.appVersion); } } } } Loading Loading @@ -15233,6 +15272,16 @@ public class ActivityManagerService extends IActivityManager.Stub // Record this for posterity if the process has been stable. r.baseProcessTracker.addPss(myTotalPss, myTotalUss, myTotalRss, true, reportType, endTime-startTime, r.pkgList.mPkgList); for (int ipkg = r.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = r.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, r.info.uid, holder.state.getName(), holder.state.getPackage(), myTotalPss, myTotalUss, myTotalRss, reportType, endTime-startTime, holder.appVersion); } } } Loading Loading @@ -15731,6 +15780,15 @@ public class ActivityManagerService extends IActivityManager.Stub // Record this for posterity if the process has been stable. r.baseProcessTracker.addPss(myTotalPss, myTotalUss, myTotalRss, true, reportType, endTime-startTime, r.pkgList.mPkgList); for (int ipkg = r.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = r.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, r.info.uid, holder.state.getName(), holder.state.getPackage(), myTotalPss, myTotalUss, myTotalRss, reportType, endTime-startTime, holder.appVersion); } } } Loading Loading @@ -19760,6 +19818,15 @@ public class ActivityManagerService extends IActivityManager.Stub proc.lastPssTime = now; proc.baseProcessTracker.addPss( pss, uss, rss, true, statType, pssDuration, proc.pkgList.mPkgList); for (int ipkg = proc.pkgList.mPkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), pss, uss, rss, statType, pssDuration, holder.appVersion); } if (DEBUG_PSS) Slog.d(TAG_PSS, "pss of " + proc.toShortString() + ": " + pss + " lastPss=" + proc.lastPss + " state=" + ProcessList.makeProcStateString(procState)); Loading Loading @@ -20111,6 +20178,14 @@ public class ActivityManagerService extends IActivityManager.Stub app.kill("excessive cpu " + cputimeUsed + " during " + uptimeSince + " dur=" + checkDur + " limit=" + cpuLimit, true); app.baseProcessTracker.reportExcessiveCpu(app.pkgList.mPkgList); for (int ipkg = app.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = app.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.EXCESSIVE_CPU_USAGE_REPORTED, app.info.uid, holder.state.getName(), holder.state.getPackage(), holder.appVersion); } } } app.lastCpuTime = app.curCpuTime; Loading Loading @@ -20946,6 +21021,7 @@ public class ActivityManagerService extends IActivityManager.Stub } if (memFactor != mLastMemoryLevel) { EventLogTags.writeAmMemFactor(memFactor, mLastMemoryLevel); StatsLog.write(StatsLog.MEMORY_FACTOR_STATE_CHANGED, memFactor); } mLastMemoryLevel = memFactor; mLastNumProcesses = mLruProcesses.size(); services/core/java/com/android/server/am/ActivityTaskManagerService.java +4 −0 Original line number Diff line number Diff line Loading @@ -4676,6 +4676,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { // will wake up stacks or put them to sleep as appropriate. if (wasSleeping) { mSleeping = false; StatsLog.write(StatsLog.ACTIVITY_MANAGER_SLEEP_STATE_CHANGED, StatsLog.ACTIVITY_MANAGER_SLEEP_STATE_CHANGED__STATE__AWAKE); startTimeTrackingFocusedActivityLocked(); mTopProcessState = ActivityManager.PROCESS_STATE_TOP; mStackSupervisor.comeOutOfSleepIfNeededLocked(); Loading @@ -4686,6 +4688,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } else if (!mSleeping && shouldSleep) { mSleeping = true; StatsLog.write(StatsLog.ACTIVITY_MANAGER_SLEEP_STATE_CHANGED, StatsLog.ACTIVITY_MANAGER_SLEEP_STATE_CHANGED__STATE__ASLEEP); if (mCurAppTimeTracker != null) { mCurAppTimeTracker.stop(); } Loading services/core/java/com/android/server/am/ProcessRecord.java +31 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.util.ArrayMap; import android.util.StatsLog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; Loading Loading @@ -540,6 +541,12 @@ final class ProcessRecord implements WindowProcessListener { if (origBase != null) { origBase.setState(ProcessStats.STATE_NOTHING, tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList.mPkgList); for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(ProcessStats.STATE_NOTHING), pkgList.valueAt(ipkg).appVersion); } origBase.makeInactive(); } baseProcessTracker = tracker.getProcessStateLocked(info.packageName, uid, Loading Loading @@ -569,6 +576,12 @@ final class ProcessRecord implements WindowProcessListener { if (origBase != null) { origBase.setState(ProcessStats.STATE_NOTHING, tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList.mPkgList); for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(ProcessStats.STATE_NOTHING), pkgList.valueAt(ipkg).appVersion); } origBase.makeInactive(); } baseProcessTracker = null; Loading Loading @@ -831,6 +844,12 @@ final class ProcessRecord implements WindowProcessListener { public void forceProcessStateUpTo(int newState) { if (mRepProcState > newState) { curProcState = mRepProcState = newState; for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(mRepProcState), pkgList.valueAt(ipkg).appVersion); } } } Loading @@ -843,6 +862,12 @@ final class ProcessRecord implements WindowProcessListener { long now = SystemClock.uptimeMillis(); baseProcessTracker.setState(ProcessStats.STATE_NOTHING, tracker.getMemFactorLocked(), now, pkgList.mPkgList); for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(ProcessStats.STATE_NOTHING), pkgList.valueAt(ipkg).appVersion); } if (N != 1) { for (int i=0; i<N; i++) { ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i); Loading Loading @@ -894,6 +919,12 @@ final class ProcessRecord implements WindowProcessListener { void setReportedProcState(int repProcState) { mRepProcState = repProcState; for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(mRepProcState), pkgList.valueAt(ipkg).appVersion); } mWindowProcessController.setReportedProcState(repProcState); } Loading Loading
cmds/statsd/src/StatsService.cpp +7 −2 Original line number Diff line number Diff line Loading @@ -403,7 +403,7 @@ void StatsService::print_cmd_help(FILE* out) { fprintf(out, "\n *Note: If both UID and NAME are omitted then all configs will\n"); fprintf(out, "\n be removed from memory and disk!\n"); fprintf(out, "\n"); fprintf(out, "usage: adb shell cmd stats dump-report [UID] NAME [--proto]\n"); fprintf(out, "usage: adb shell cmd stats dump-report [UID] NAME [--include_current_bucket] [--proto]\n"); fprintf(out, " Dump all metric data for a configuration.\n"); fprintf(out, " UID The uid of the configuration. It is only possible to pass\n"); fprintf(out, " the UID parameter on eng builds. If UID is omitted the\n"); Loading Loading @@ -567,12 +567,17 @@ status_t StatsService::cmd_dump_report(FILE* out, FILE* err, const Vector<String int argCount = args.size(); bool good = false; bool proto = false; bool includeCurrentBucket = false; int uid; string name; if (!std::strcmp("--proto", args[argCount-1].c_str())) { proto = true; argCount -= 1; } if (!std::strcmp("--include_current_bucket", args[argCount-1].c_str())) { includeCurrentBucket = true; argCount -= 1; } if (argCount == 2) { // Automatically pick the UID uid = IPCThreadState::self()->getCallingUid(); Loading Loading @@ -600,7 +605,7 @@ status_t StatsService::cmd_dump_report(FILE* out, FILE* err, const Vector<String if (good) { vector<uint8_t> data; mProcessor->onDumpReport(ConfigKey(uid, StrToInt64(name)), getElapsedRealtimeNs(), false /* include_current_bucket*/, ADB_DUMP, &data); includeCurrentBucket, ADB_DUMP, &data); if (proto) { for (size_t i = 0; i < data.size(); i ++) { fprintf(out, "%c", data[i]); Loading
cmds/statsd/src/atoms.proto +115 −3 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ message Atom { oneof pushed { // For StatsLog reasons, 1 is illegal and will not work. Must start at 2. BleScanStateChanged ble_scan_state_changed = 2; // 3 is available for use ProcessStateChanged process_state_changed = 3; BleScanResultReceived ble_scan_result_received = 4; SensorStateChanged sensor_state_changed = 5; GpsScanStateChanged gps_scan_state_changed = 6; Loading @@ -60,7 +60,12 @@ message Atom { LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 11; MobileRadioPowerStateChanged mobile_radio_power_state_changed = 12; WifiRadioPowerStateChanged wifi_radio_power_state_changed = 13; // 14 - 19 are available ActivityManagerSleepStateChanged activity_manager_sleep_state_changed = 14; MemoryFactorStateChanged memory_factor_state_changed = 15; ExcessiveCpuUsageReported excessive_cpu_usage_reported = 16; CachedKillReported cached_kill_reported = 17; ProcessMemoryStatReported process_memory_stat_reported = 18; // 19 is available BatterySaverModeStateChanged battery_saver_mode_state_changed = 20; DeviceIdleModeStateChanged device_idle_mode_state_changed = 21; DeviceIdlingModeStateChanged device_idling_mode_state_changed = 22; Loading Loading @@ -210,7 +215,8 @@ message ScreenStateChanged { } /** * Logs that the state of a process state, as per the activity manager, has changed. * Logs that the process state of the uid, as determined by ActivityManager * (i.e. the highest process state of that uid's processes) has changed. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java Loading @@ -222,6 +228,112 @@ message UidProcessStateChanged { optional android.app.ProcessStateEnum state = 2 [(stateFieldOption).option = EXCLUSIVE]; } /** * Logs process state change of a process, as per the activity manager. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java */ message ProcessStateChanged { optional int32 uid = 1; optional string process_name = 2; optional string package_name = 3; // TODO: remove this when validation is done optional int64 version = 5; // The state, from frameworks/base/core/proto/android/app/enums.proto. optional android.app.ProcessStateEnum state = 4; } /** * Logs when ActivityManagerService sleep state is changed. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityTaskManagerService.java */ message ActivityManagerSleepStateChanged { // TODO: import frameworks proto enum State { UNKNOWN = 0; ASLEEP = 1; AWAKE = 2; } optional State state = 1 [(stateFieldOption).option = EXCLUSIVE]; } /** * Logs when system memory state changes. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java */ message MemoryFactorStateChanged { // TODO: import frameworks proto enum State { MEMORY_UNKNOWN = 0; NORMAL = 1; // normal. MODERATE = 2; // moderate memory pressure. LOW = 3; // low memory. CRITICAL = 4; // critical memory. } optional State factor = 1 [(stateFieldOption).option = EXCLUSIVE]; } /** * Logs when app is using too much cpu, according to ActivityManagerService. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java */ message ExcessiveCpuUsageReported { optional int32 uid = 1; optional string process_name = 2; optional string package_name = 3; // package version. TODO: remove this when validation is done optional int64 version = 4; } /** * Logs when a cached process is killed, along with its pss. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java */ message CachedKillReported { optional int32 uid = 1; optional string process_name = 2; optional string package_name = 3; // TODO: remove this when validation is done optional int64 version = 5; optional int64 pss = 4; } /** * Logs when memory stats of a process is reported. * * Logged from: * frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java */ message ProcessMemoryStatReported { optional int32 uid = 1; optional string process_name = 2; optional string package_name = 3; //TODO: remove this when validation is done optional int64 version = 9; optional int64 pss = 4; optional int64 uss = 5; optional int64 rss = 6; enum Type { ADD_PSS_INTERNAL_SINGLE = 0; ADD_PSS_INTERNAL_ALL_MEM = 1; ADD_PSS_INTERNAL_ALL_POLL = 2; ADD_PSS_EXTERNAL = 3; ADD_PSS_EXTERNAL_SLOW = 4; } optional Type type = 7; optional int64 duration = 8; } /** * Logs that a process started, finished, crashed, or ANRed. * Loading
services/core/java/com/android/server/am/ActivityManagerService.java +76 −0 Original line number Diff line number Diff line Loading @@ -3332,6 +3332,14 @@ public class ActivityManagerService extends IActivityManager.Stub // Turn this condition on to cause killing to happen regularly, for testing. if (proc.baseProcessTracker != null) { proc.baseProcessTracker.reportCachedKill(proc.pkgList.mPkgList, proc.lastCachedPss); for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.CACHED_KILL_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), proc.lastCachedPss, holder.appVersion); } } proc.kill(Long.toString(proc.lastCachedPss) + "k from cached", true); } else if (proc != null && !keepIfLarge Loading @@ -3341,6 +3349,14 @@ public class ActivityManagerService extends IActivityManager.Stub if (proc.lastCachedPss >= mProcessList.getCachedRestoreThresholdKb()) { if (proc.baseProcessTracker != null) { proc.baseProcessTracker.reportCachedKill(proc.pkgList.mPkgList, proc.lastCachedPss); for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.CACHED_KILL_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), proc.lastCachedPss, holder.appVersion); } } proc.kill(Long.toString(proc.lastCachedPss) + "k from cached", true); } Loading Loading @@ -5365,6 +5381,19 @@ public class ActivityManagerService extends IActivityManager.Stub infos[i].getTotalUss(), infos[i].getTotalRss(), false, ProcessStats.ADD_PSS_EXTERNAL_SLOW, endTime-startTime, proc.pkgList.mPkgList); for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), infos[i].getTotalPss(), infos[i].getTotalUss(), infos[i].getTotalRss(), ProcessStats.ADD_PSS_EXTERNAL_SLOW, endTime-startTime, holder.appVersion); } } } } Loading Loading @@ -5395,6 +5424,16 @@ public class ActivityManagerService extends IActivityManager.Stub // Record this for posterity if the process has been stable. proc.baseProcessTracker.addPss(pss[i], tmpUss[0], tmpUss[2], false, ProcessStats.ADD_PSS_EXTERNAL, endTime-startTime, proc.pkgList.mPkgList); for (int ipkg = proc.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), pss[i], tmpUss[0], tmpUss[2], ProcessStats.ADD_PSS_EXTERNAL, endTime-startTime, holder.appVersion); } } } } Loading Loading @@ -15233,6 +15272,16 @@ public class ActivityManagerService extends IActivityManager.Stub // Record this for posterity if the process has been stable. r.baseProcessTracker.addPss(myTotalPss, myTotalUss, myTotalRss, true, reportType, endTime-startTime, r.pkgList.mPkgList); for (int ipkg = r.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = r.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, r.info.uid, holder.state.getName(), holder.state.getPackage(), myTotalPss, myTotalUss, myTotalRss, reportType, endTime-startTime, holder.appVersion); } } } Loading Loading @@ -15731,6 +15780,15 @@ public class ActivityManagerService extends IActivityManager.Stub // Record this for posterity if the process has been stable. r.baseProcessTracker.addPss(myTotalPss, myTotalUss, myTotalRss, true, reportType, endTime-startTime, r.pkgList.mPkgList); for (int ipkg = r.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = r.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, r.info.uid, holder.state.getName(), holder.state.getPackage(), myTotalPss, myTotalUss, myTotalRss, reportType, endTime-startTime, holder.appVersion); } } } Loading Loading @@ -19760,6 +19818,15 @@ public class ActivityManagerService extends IActivityManager.Stub proc.lastPssTime = now; proc.baseProcessTracker.addPss( pss, uss, rss, true, statType, pssDuration, proc.pkgList.mPkgList); for (int ipkg = proc.pkgList.mPkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = proc.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.PROCESS_MEMORY_STAT_REPORTED, proc.info.uid, holder.state.getName(), holder.state.getPackage(), pss, uss, rss, statType, pssDuration, holder.appVersion); } if (DEBUG_PSS) Slog.d(TAG_PSS, "pss of " + proc.toShortString() + ": " + pss + " lastPss=" + proc.lastPss + " state=" + ProcessList.makeProcStateString(procState)); Loading Loading @@ -20111,6 +20178,14 @@ public class ActivityManagerService extends IActivityManager.Stub app.kill("excessive cpu " + cputimeUsed + " during " + uptimeSince + " dur=" + checkDur + " limit=" + cpuLimit, true); app.baseProcessTracker.reportExcessiveCpu(app.pkgList.mPkgList); for (int ipkg = app.pkgList.size() - 1; ipkg >= 0; ipkg--) { ProcessStats.ProcessStateHolder holder = app.pkgList.valueAt(ipkg); StatsLog.write(StatsLog.EXCESSIVE_CPU_USAGE_REPORTED, app.info.uid, holder.state.getName(), holder.state.getPackage(), holder.appVersion); } } } app.lastCpuTime = app.curCpuTime; Loading Loading @@ -20946,6 +21021,7 @@ public class ActivityManagerService extends IActivityManager.Stub } if (memFactor != mLastMemoryLevel) { EventLogTags.writeAmMemFactor(memFactor, mLastMemoryLevel); StatsLog.write(StatsLog.MEMORY_FACTOR_STATE_CHANGED, memFactor); } mLastMemoryLevel = memFactor; mLastNumProcesses = mLruProcesses.size();
services/core/java/com/android/server/am/ActivityTaskManagerService.java +4 −0 Original line number Diff line number Diff line Loading @@ -4676,6 +4676,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { // will wake up stacks or put them to sleep as appropriate. if (wasSleeping) { mSleeping = false; StatsLog.write(StatsLog.ACTIVITY_MANAGER_SLEEP_STATE_CHANGED, StatsLog.ACTIVITY_MANAGER_SLEEP_STATE_CHANGED__STATE__AWAKE); startTimeTrackingFocusedActivityLocked(); mTopProcessState = ActivityManager.PROCESS_STATE_TOP; mStackSupervisor.comeOutOfSleepIfNeededLocked(); Loading @@ -4686,6 +4688,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } else if (!mSleeping && shouldSleep) { mSleeping = true; StatsLog.write(StatsLog.ACTIVITY_MANAGER_SLEEP_STATE_CHANGED, StatsLog.ACTIVITY_MANAGER_SLEEP_STATE_CHANGED__STATE__ASLEEP); if (mCurAppTimeTracker != null) { mCurAppTimeTracker.stop(); } Loading
services/core/java/com/android/server/am/ProcessRecord.java +31 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; import android.util.ArrayMap; import android.util.StatsLog; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; Loading Loading @@ -540,6 +541,12 @@ final class ProcessRecord implements WindowProcessListener { if (origBase != null) { origBase.setState(ProcessStats.STATE_NOTHING, tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList.mPkgList); for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(ProcessStats.STATE_NOTHING), pkgList.valueAt(ipkg).appVersion); } origBase.makeInactive(); } baseProcessTracker = tracker.getProcessStateLocked(info.packageName, uid, Loading Loading @@ -569,6 +576,12 @@ final class ProcessRecord implements WindowProcessListener { if (origBase != null) { origBase.setState(ProcessStats.STATE_NOTHING, tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList.mPkgList); for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(ProcessStats.STATE_NOTHING), pkgList.valueAt(ipkg).appVersion); } origBase.makeInactive(); } baseProcessTracker = null; Loading Loading @@ -831,6 +844,12 @@ final class ProcessRecord implements WindowProcessListener { public void forceProcessStateUpTo(int newState) { if (mRepProcState > newState) { curProcState = mRepProcState = newState; for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(mRepProcState), pkgList.valueAt(ipkg).appVersion); } } } Loading @@ -843,6 +862,12 @@ final class ProcessRecord implements WindowProcessListener { long now = SystemClock.uptimeMillis(); baseProcessTracker.setState(ProcessStats.STATE_NOTHING, tracker.getMemFactorLocked(), now, pkgList.mPkgList); for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(ProcessStats.STATE_NOTHING), pkgList.valueAt(ipkg).appVersion); } if (N != 1) { for (int i=0; i<N; i++) { ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i); Loading Loading @@ -894,6 +919,12 @@ final class ProcessRecord implements WindowProcessListener { void setReportedProcState(int repProcState) { mRepProcState = repProcState; for (int ipkg = pkgList.size() - 1; ipkg >= 0; ipkg--) { StatsLog.write(StatsLog.PROCESS_STATE_CHANGED, uid, processName, pkgList.keyAt(ipkg), ActivityManager.processStateAmToProto(mRepProcState), pkgList.valueAt(ipkg).appVersion); } mWindowProcessController.setReportedProcState(repProcState); } Loading