Loading core/java/android/os/BatteryStats.java +25 −11 Original line number Diff line number Diff line Loading @@ -169,7 +169,7 @@ public abstract class BatteryStats implements Parcelable { /** * Current version of checkin data format. */ static final String CHECKIN_VERSION = "16"; static final String CHECKIN_VERSION = "17"; /** * Old version, we hit 9 and ran out of room, need to remove. Loading Loading @@ -407,17 +407,23 @@ public abstract class BatteryStats implements Parcelable { public abstract Timer getCameraTurnedOnTimer(); public abstract Timer getForegroundActivityTimer(); // Time this uid has any processes in foreground state. public static final int PROCESS_STATE_FOREGROUND = 0; // Time this uid has any process in active state (not cached). public static final int PROCESS_STATE_ACTIVE = 1; // Time this uid has any processes in the top state. public static final int PROCESS_STATE_TOP = 0; // Time this uid has any process with a started out bound foreground service. public static final int PROCESS_STATE_FOREGROUND_SERVICE = 1; // Time this uid has any process that is top while the device is sleeping. public static final int PROCESS_STATE_TOP_SLEEPING = 2; // Time this uid has any process in an active foreground state. public static final int PROCESS_STATE_FOREGROUND = 3; // Time this uid has any process in an active background state. public static final int PROCESS_STATE_BACKGROUND = 4; // Time this uid has any processes running at all. public static final int PROCESS_STATE_RUNNING = 2; public static final int PROCESS_STATE_CACHED = 5; // Total number of process states we track. public static final int NUM_PROCESS_STATE = 3; public static final int NUM_PROCESS_STATE = 6; static final String[] PROCESS_STATE_NAMES = { "Foreground", "Active", "Running" "Top", "Fg Service", "Top Sleeping", "Foreground", "Background", "Cached" }; public abstract long getProcessStateTime(int state, long elapsedRealtimeUs, int which); Loading Loading @@ -2954,8 +2960,9 @@ public abstract class BatteryStats implements Parcelable { final Object[] stateTimes = new Object[Uid.NUM_PROCESS_STATE]; long totalStateTime = 0; for (int ips=0; ips<Uid.NUM_PROCESS_STATE; ips++) { totalStateTime += u.getProcessStateTime(ips, rawRealtime, which); stateTimes[ips] = (totalStateTime + 500) / 1000; final long time = u.getProcessStateTime(ips, rawRealtime, which); totalStateTime += time; stateTimes[ips] = (time + 500) / 1000; } if (totalStateTime > 0) { dumpLine(pw, uid, category, STATE_TIME_DATA, stateTimes); Loading Loading @@ -4122,11 +4129,18 @@ public abstract class BatteryStats implements Parcelable { sb.append(" "); sb.append(Uid.PROCESS_STATE_NAMES[ips]); sb.append(" for: "); formatTimeMs(sb, (totalStateTime + 500) / 1000); formatTimeMs(sb, (time + 500) / 1000); pw.println(sb.toString()); uidActivity = true; } } if (totalStateTime > 0) { sb.setLength(0); sb.append(prefix); sb.append(" Total running: "); formatTimeMs(sb, (totalStateTime + 500) / 1000); pw.println(sb.toString()); } final long userCpuTimeUs = u.getUserCpuTimeUs(which); final long systemCpuTimeUs = u.getSystemCpuTimeUs(which); Loading core/java/com/android/internal/os/BatteryStatsImpl.java +40 −86 Original line number Diff line number Diff line Loading @@ -105,7 +105,7 @@ public final class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version private static final int VERSION = 136 + (USE_OLD_HISTORY ? 1000 : 0); private static final int VERSION = 138 + (USE_OLD_HISTORY ? 1000 : 0); // Maximum number of items we will record in the history. private static final int MAX_HISTORY_ITEMS = 2000; Loading Loading @@ -2621,10 +2621,9 @@ public final class BatteryStatsImpl extends BatteryStats { } } public void noteProcessStateLocked(String name, int uid, int state) { public void noteUidProcessStateLocked(int uid, int state) { uid = mapUid(uid); final long elapsedRealtime = SystemClock.elapsedRealtime(); getUidStatsLocked(uid).updateProcessStateLocked(name, state, elapsedRealtime); getUidStatsLocked(uid).updateUidProcessStateLocked(state); } public void noteProcessFinishLocked(String name, int uid) { Loading @@ -2632,13 +2631,11 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mActiveEvents.updateState(HistoryItem.EVENT_PROC_FINISH, name, uid, 0)) { return; } final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); getUidStatsLocked(uid).updateProcessStateLocked(name, Uid.PROCESS_STATE_NONE, elapsedRealtime); if (!mRecordAllHistory) { return; } final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_PROC_FINISH, name, uid); } Loading Loading @@ -4446,8 +4443,7 @@ public final class BatteryStatsImpl extends BatteryStats { StopwatchTimer mForegroundActivityTimer; static final int PROCESS_STATE_NONE = NUM_PROCESS_STATE; int mProcessState = PROCESS_STATE_NONE; int mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; StopwatchTimer[] mProcessStateTimer; BatchTimer mVibratorOnTimer; Loading Loading @@ -4812,21 +4808,6 @@ public final class BatteryStatsImpl extends BatteryStats { } } void updateUidProcessStateLocked(int state, long elapsedRealtimeMs) { if (mProcessState == state) return; if (mProcessState != PROCESS_STATE_NONE) { mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtimeMs); } mProcessState = state; if (state != PROCESS_STATE_NONE) { if (mProcessStateTimer[state] == null) { makeProcessState(state, null); } mProcessStateTimer[state].startRunningLocked(elapsedRealtimeMs); } } public BatchTimer createVibratorOnTimerLocked() { if (mVibratorOnTimer == null) { mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON, mOnBatteryTimeBase); Loading Loading @@ -5167,7 +5148,7 @@ public final class BatteryStatsImpl extends BatteryStats { active |= !mProcessStateTimer[i].reset(false); } } active |= (mProcessState != PROCESS_STATE_NONE); active |= (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT); } if (mVibratorOnTimer != null) { if (mVibratorOnTimer.reset(false)) { Loading Loading @@ -5261,14 +5242,9 @@ public final class BatteryStatsImpl extends BatteryStats { } for (int ip=mProcessStats.size()-1; ip>=0; ip--) { Proc proc = mProcessStats.valueAt(ip); if (proc.mProcessState == PROCESS_STATE_NONE) { proc.detach(); mProcessStats.removeAt(ip); } else { proc.reset(); active = true; } } mProcessStats.clear(); if (mPids.size() > 0) { for (int i=mPids.size()-1; i>=0; i--) { Pid pid = mPids.valueAt(i); Loading Loading @@ -5697,7 +5673,7 @@ public final class BatteryStatsImpl extends BatteryStats { } else { mForegroundActivityTimer = null; } mProcessState = PROCESS_STATE_NONE; mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; for (int i = 0; i < NUM_PROCESS_STATE; i++) { if (in.readInt() != 0) { makeProcessState(i, in); Loading Loading @@ -6080,11 +6056,6 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mUnpluggedNumAnrs; /** * Current process state. */ int mProcessState = PROCESS_STATE_NONE; ArrayList<ExcessivePower> mExcessivePower; Proc(String name) { Loading @@ -6104,16 +6075,6 @@ public final class BatteryStatsImpl extends BatteryStats { public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) { } void reset() { mUserTime = mSystemTime = mForegroundTime = 0; mStarts = mNumCrashes = mNumAnrs = 0; mLoadedUserTime = mLoadedSystemTime = mLoadedForegroundTime = 0; mLoadedStarts = mLoadedNumCrashes = mLoadedNumAnrs = 0; mUnpluggedUserTime = mUnpluggedSystemTime = mUnpluggedForegroundTime = 0; mUnpluggedStarts = mUnpluggedNumCrashes = mUnpluggedNumAnrs = 0; mExcessivePower = null; } void detach() { mActive = false; mOnBatteryTimeBase.remove(this); Loading Loading @@ -6668,46 +6629,39 @@ public final class BatteryStatsImpl extends BatteryStats { return ps; } public void updateProcessStateLocked(String procName, int state, long elapsedRealtimeMs) { int procState; if (state <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { procState = PROCESS_STATE_FOREGROUND; } else if (state <= ActivityManager.PROCESS_STATE_RECEIVER) { procState = PROCESS_STATE_ACTIVE; public void updateUidProcessStateLocked(int procState) { int uidRunningState; if (procState == ActivityManager.PROCESS_STATE_NONEXISTENT) { uidRunningState = ActivityManager.PROCESS_STATE_NONEXISTENT; } else if (procState == ActivityManager.PROCESS_STATE_TOP) { uidRunningState = PROCESS_STATE_TOP; } else if (procState <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) { // Persistent and other foreground states go here. uidRunningState = PROCESS_STATE_FOREGROUND_SERVICE; } else if (procState <= ActivityManager.PROCESS_STATE_TOP_SLEEPING) { uidRunningState = PROCESS_STATE_TOP_SLEEPING; } else if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { // Persistent and other foreground states go here. uidRunningState = PROCESS_STATE_FOREGROUND; } else if (procState <= ActivityManager.PROCESS_STATE_RECEIVER) { uidRunningState = PROCESS_STATE_BACKGROUND; } else { procState = PROCESS_STATE_RUNNING; } updateRealProcessStateLocked(procName, procState, elapsedRealtimeMs); uidRunningState = PROCESS_STATE_CACHED; } public void updateRealProcessStateLocked(String procName, int procState, long elapsedRealtimeMs) { Proc proc = getProcessStatsLocked(procName); if (proc.mProcessState != procState) { boolean changed; if (procState < proc.mProcessState) { // Has this process become more important? If so, // we may need to change the uid if the currrent uid proc state // is not as important as what we are now setting. changed = mProcessState > procState; } else { // Has this process become less important? If so, // we may need to change the uid if the current uid proc state // is the same importance as the old setting. changed = mProcessState == proc.mProcessState; } proc.mProcessState = procState; if (changed) { // uid's state may have changed; compute what the new state should be. int uidProcState = PROCESS_STATE_NONE; for (int ip=mProcessStats.size()-1; ip>=0; ip--) { proc = mProcessStats.valueAt(ip); if (proc.mProcessState < uidProcState) { uidProcState = proc.mProcessState; } if (mProcessState == uidRunningState) return; final long elapsedRealtime = SystemClock.elapsedRealtime(); if (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT) { mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtime); } updateUidProcessStateLocked(uidProcState, elapsedRealtimeMs); mProcessState = uidRunningState; if (uidRunningState != ActivityManager.PROCESS_STATE_NONEXISTENT) { if (mProcessStateTimer[uidRunningState] == null) { makeProcessState(uidRunningState, null); } mProcessStateTimer[uidRunningState].startRunningLocked(elapsedRealtime); } } Loading Loading @@ -9423,7 +9377,7 @@ public final class BatteryStatsImpl extends BatteryStats { if (in.readInt() != 0) { u.createForegroundActivityTimerLocked().readSummaryFromParcelLocked(in); } u.mProcessState = Uid.PROCESS_STATE_NONE; u.mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; for (int i = 0; i < Uid.NUM_PROCESS_STATE; i++) { if (in.readInt() != 0) { u.makeProcessState(i, null); Loading services/core/java/com/android/server/am/ActivityManagerService.java +4 −4 Original line number Diff line number Diff line Loading @@ -6072,6 +6072,8 @@ public final class ActivityManagerService extends ActivityManagerNative "No more processes in " + old.uidRecord); enqueueUidChangeLocked(old.uidRecord, -1, UidRecord.CHANGE_GONE); mActiveUids.remove(uid); mBatteryStatsService.noteUidProcessState(uid, ActivityManager.PROCESS_STATE_NONEXISTENT); } old.uidRecord = null; } Loading @@ -6096,6 +6098,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS, "Creating new process uid: " + uidRec); mActiveUids.put(proc.uid, uidRec); mBatteryStatsService.noteUidProcessState(uidRec.uid, uidRec.curProcState); enqueueUidChangeLocked(uidRec, -1, UidRecord.CHANGE_ACTIVE); } proc.uidRecord = uidRec; Loading Loading @@ -19497,10 +19500,6 @@ public final class ActivityManagerService extends ActivityManagerNative if (proc.baseProcessTracker != null) { proc.baseProcessTracker.setState(proc.repProcState, memFactor, now, proc.pkgList); } if (proc.repProcState >= 0) { mBatteryStatsService.noteProcessState(proc.processName, proc.info.uid, proc.repProcState); } } } Loading Loading @@ -20000,6 +19999,7 @@ public final class ActivityManagerService extends ActivityManagerNative } uidRec.setProcState = uidRec.curProcState; enqueueUidChangeLocked(uidRec, -1, uidChange); mBatteryStatsService.noteUidProcessState(uidRec.uid, uidRec.curProcState); } } services/core/java/com/android/server/am/BatteryStatsService.java +4 −4 Original line number Diff line number Diff line Loading @@ -272,15 +272,15 @@ public final class BatteryStatsService extends IBatteryStats.Stub } } void noteProcessState(String name, int uid, int state) { void noteProcessFinish(String name, int uid) { synchronized (mStats) { mStats.noteProcessStateLocked(name, uid, state); mStats.noteProcessFinishLocked(name, uid); } } void noteProcessFinish(String name, int uid) { void noteUidProcessState(int uid, int state) { synchronized (mStats) { mStats.noteProcessFinishLocked(name, uid); mStats.noteUidProcessStateLocked(uid, state); } } Loading Loading
core/java/android/os/BatteryStats.java +25 −11 Original line number Diff line number Diff line Loading @@ -169,7 +169,7 @@ public abstract class BatteryStats implements Parcelable { /** * Current version of checkin data format. */ static final String CHECKIN_VERSION = "16"; static final String CHECKIN_VERSION = "17"; /** * Old version, we hit 9 and ran out of room, need to remove. Loading Loading @@ -407,17 +407,23 @@ public abstract class BatteryStats implements Parcelable { public abstract Timer getCameraTurnedOnTimer(); public abstract Timer getForegroundActivityTimer(); // Time this uid has any processes in foreground state. public static final int PROCESS_STATE_FOREGROUND = 0; // Time this uid has any process in active state (not cached). public static final int PROCESS_STATE_ACTIVE = 1; // Time this uid has any processes in the top state. public static final int PROCESS_STATE_TOP = 0; // Time this uid has any process with a started out bound foreground service. public static final int PROCESS_STATE_FOREGROUND_SERVICE = 1; // Time this uid has any process that is top while the device is sleeping. public static final int PROCESS_STATE_TOP_SLEEPING = 2; // Time this uid has any process in an active foreground state. public static final int PROCESS_STATE_FOREGROUND = 3; // Time this uid has any process in an active background state. public static final int PROCESS_STATE_BACKGROUND = 4; // Time this uid has any processes running at all. public static final int PROCESS_STATE_RUNNING = 2; public static final int PROCESS_STATE_CACHED = 5; // Total number of process states we track. public static final int NUM_PROCESS_STATE = 3; public static final int NUM_PROCESS_STATE = 6; static final String[] PROCESS_STATE_NAMES = { "Foreground", "Active", "Running" "Top", "Fg Service", "Top Sleeping", "Foreground", "Background", "Cached" }; public abstract long getProcessStateTime(int state, long elapsedRealtimeUs, int which); Loading Loading @@ -2954,8 +2960,9 @@ public abstract class BatteryStats implements Parcelable { final Object[] stateTimes = new Object[Uid.NUM_PROCESS_STATE]; long totalStateTime = 0; for (int ips=0; ips<Uid.NUM_PROCESS_STATE; ips++) { totalStateTime += u.getProcessStateTime(ips, rawRealtime, which); stateTimes[ips] = (totalStateTime + 500) / 1000; final long time = u.getProcessStateTime(ips, rawRealtime, which); totalStateTime += time; stateTimes[ips] = (time + 500) / 1000; } if (totalStateTime > 0) { dumpLine(pw, uid, category, STATE_TIME_DATA, stateTimes); Loading Loading @@ -4122,11 +4129,18 @@ public abstract class BatteryStats implements Parcelable { sb.append(" "); sb.append(Uid.PROCESS_STATE_NAMES[ips]); sb.append(" for: "); formatTimeMs(sb, (totalStateTime + 500) / 1000); formatTimeMs(sb, (time + 500) / 1000); pw.println(sb.toString()); uidActivity = true; } } if (totalStateTime > 0) { sb.setLength(0); sb.append(prefix); sb.append(" Total running: "); formatTimeMs(sb, (totalStateTime + 500) / 1000); pw.println(sb.toString()); } final long userCpuTimeUs = u.getUserCpuTimeUs(which); final long systemCpuTimeUs = u.getSystemCpuTimeUs(which); Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +40 −86 Original line number Diff line number Diff line Loading @@ -105,7 +105,7 @@ public final class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version private static final int VERSION = 136 + (USE_OLD_HISTORY ? 1000 : 0); private static final int VERSION = 138 + (USE_OLD_HISTORY ? 1000 : 0); // Maximum number of items we will record in the history. private static final int MAX_HISTORY_ITEMS = 2000; Loading Loading @@ -2621,10 +2621,9 @@ public final class BatteryStatsImpl extends BatteryStats { } } public void noteProcessStateLocked(String name, int uid, int state) { public void noteUidProcessStateLocked(int uid, int state) { uid = mapUid(uid); final long elapsedRealtime = SystemClock.elapsedRealtime(); getUidStatsLocked(uid).updateProcessStateLocked(name, state, elapsedRealtime); getUidStatsLocked(uid).updateUidProcessStateLocked(state); } public void noteProcessFinishLocked(String name, int uid) { Loading @@ -2632,13 +2631,11 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mActiveEvents.updateState(HistoryItem.EVENT_PROC_FINISH, name, uid, 0)) { return; } final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); getUidStatsLocked(uid).updateProcessStateLocked(name, Uid.PROCESS_STATE_NONE, elapsedRealtime); if (!mRecordAllHistory) { return; } final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_PROC_FINISH, name, uid); } Loading Loading @@ -4446,8 +4443,7 @@ public final class BatteryStatsImpl extends BatteryStats { StopwatchTimer mForegroundActivityTimer; static final int PROCESS_STATE_NONE = NUM_PROCESS_STATE; int mProcessState = PROCESS_STATE_NONE; int mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; StopwatchTimer[] mProcessStateTimer; BatchTimer mVibratorOnTimer; Loading Loading @@ -4812,21 +4808,6 @@ public final class BatteryStatsImpl extends BatteryStats { } } void updateUidProcessStateLocked(int state, long elapsedRealtimeMs) { if (mProcessState == state) return; if (mProcessState != PROCESS_STATE_NONE) { mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtimeMs); } mProcessState = state; if (state != PROCESS_STATE_NONE) { if (mProcessStateTimer[state] == null) { makeProcessState(state, null); } mProcessStateTimer[state].startRunningLocked(elapsedRealtimeMs); } } public BatchTimer createVibratorOnTimerLocked() { if (mVibratorOnTimer == null) { mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON, mOnBatteryTimeBase); Loading Loading @@ -5167,7 +5148,7 @@ public final class BatteryStatsImpl extends BatteryStats { active |= !mProcessStateTimer[i].reset(false); } } active |= (mProcessState != PROCESS_STATE_NONE); active |= (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT); } if (mVibratorOnTimer != null) { if (mVibratorOnTimer.reset(false)) { Loading Loading @@ -5261,14 +5242,9 @@ public final class BatteryStatsImpl extends BatteryStats { } for (int ip=mProcessStats.size()-1; ip>=0; ip--) { Proc proc = mProcessStats.valueAt(ip); if (proc.mProcessState == PROCESS_STATE_NONE) { proc.detach(); mProcessStats.removeAt(ip); } else { proc.reset(); active = true; } } mProcessStats.clear(); if (mPids.size() > 0) { for (int i=mPids.size()-1; i>=0; i--) { Pid pid = mPids.valueAt(i); Loading Loading @@ -5697,7 +5673,7 @@ public final class BatteryStatsImpl extends BatteryStats { } else { mForegroundActivityTimer = null; } mProcessState = PROCESS_STATE_NONE; mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; for (int i = 0; i < NUM_PROCESS_STATE; i++) { if (in.readInt() != 0) { makeProcessState(i, in); Loading Loading @@ -6080,11 +6056,6 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mUnpluggedNumAnrs; /** * Current process state. */ int mProcessState = PROCESS_STATE_NONE; ArrayList<ExcessivePower> mExcessivePower; Proc(String name) { Loading @@ -6104,16 +6075,6 @@ public final class BatteryStatsImpl extends BatteryStats { public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) { } void reset() { mUserTime = mSystemTime = mForegroundTime = 0; mStarts = mNumCrashes = mNumAnrs = 0; mLoadedUserTime = mLoadedSystemTime = mLoadedForegroundTime = 0; mLoadedStarts = mLoadedNumCrashes = mLoadedNumAnrs = 0; mUnpluggedUserTime = mUnpluggedSystemTime = mUnpluggedForegroundTime = 0; mUnpluggedStarts = mUnpluggedNumCrashes = mUnpluggedNumAnrs = 0; mExcessivePower = null; } void detach() { mActive = false; mOnBatteryTimeBase.remove(this); Loading Loading @@ -6668,46 +6629,39 @@ public final class BatteryStatsImpl extends BatteryStats { return ps; } public void updateProcessStateLocked(String procName, int state, long elapsedRealtimeMs) { int procState; if (state <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { procState = PROCESS_STATE_FOREGROUND; } else if (state <= ActivityManager.PROCESS_STATE_RECEIVER) { procState = PROCESS_STATE_ACTIVE; public void updateUidProcessStateLocked(int procState) { int uidRunningState; if (procState == ActivityManager.PROCESS_STATE_NONEXISTENT) { uidRunningState = ActivityManager.PROCESS_STATE_NONEXISTENT; } else if (procState == ActivityManager.PROCESS_STATE_TOP) { uidRunningState = PROCESS_STATE_TOP; } else if (procState <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) { // Persistent and other foreground states go here. uidRunningState = PROCESS_STATE_FOREGROUND_SERVICE; } else if (procState <= ActivityManager.PROCESS_STATE_TOP_SLEEPING) { uidRunningState = PROCESS_STATE_TOP_SLEEPING; } else if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { // Persistent and other foreground states go here. uidRunningState = PROCESS_STATE_FOREGROUND; } else if (procState <= ActivityManager.PROCESS_STATE_RECEIVER) { uidRunningState = PROCESS_STATE_BACKGROUND; } else { procState = PROCESS_STATE_RUNNING; } updateRealProcessStateLocked(procName, procState, elapsedRealtimeMs); uidRunningState = PROCESS_STATE_CACHED; } public void updateRealProcessStateLocked(String procName, int procState, long elapsedRealtimeMs) { Proc proc = getProcessStatsLocked(procName); if (proc.mProcessState != procState) { boolean changed; if (procState < proc.mProcessState) { // Has this process become more important? If so, // we may need to change the uid if the currrent uid proc state // is not as important as what we are now setting. changed = mProcessState > procState; } else { // Has this process become less important? If so, // we may need to change the uid if the current uid proc state // is the same importance as the old setting. changed = mProcessState == proc.mProcessState; } proc.mProcessState = procState; if (changed) { // uid's state may have changed; compute what the new state should be. int uidProcState = PROCESS_STATE_NONE; for (int ip=mProcessStats.size()-1; ip>=0; ip--) { proc = mProcessStats.valueAt(ip); if (proc.mProcessState < uidProcState) { uidProcState = proc.mProcessState; } if (mProcessState == uidRunningState) return; final long elapsedRealtime = SystemClock.elapsedRealtime(); if (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT) { mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtime); } updateUidProcessStateLocked(uidProcState, elapsedRealtimeMs); mProcessState = uidRunningState; if (uidRunningState != ActivityManager.PROCESS_STATE_NONEXISTENT) { if (mProcessStateTimer[uidRunningState] == null) { makeProcessState(uidRunningState, null); } mProcessStateTimer[uidRunningState].startRunningLocked(elapsedRealtime); } } Loading Loading @@ -9423,7 +9377,7 @@ public final class BatteryStatsImpl extends BatteryStats { if (in.readInt() != 0) { u.createForegroundActivityTimerLocked().readSummaryFromParcelLocked(in); } u.mProcessState = Uid.PROCESS_STATE_NONE; u.mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT; for (int i = 0; i < Uid.NUM_PROCESS_STATE; i++) { if (in.readInt() != 0) { u.makeProcessState(i, null); Loading
services/core/java/com/android/server/am/ActivityManagerService.java +4 −4 Original line number Diff line number Diff line Loading @@ -6072,6 +6072,8 @@ public final class ActivityManagerService extends ActivityManagerNative "No more processes in " + old.uidRecord); enqueueUidChangeLocked(old.uidRecord, -1, UidRecord.CHANGE_GONE); mActiveUids.remove(uid); mBatteryStatsService.noteUidProcessState(uid, ActivityManager.PROCESS_STATE_NONEXISTENT); } old.uidRecord = null; } Loading @@ -6096,6 +6098,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS, "Creating new process uid: " + uidRec); mActiveUids.put(proc.uid, uidRec); mBatteryStatsService.noteUidProcessState(uidRec.uid, uidRec.curProcState); enqueueUidChangeLocked(uidRec, -1, UidRecord.CHANGE_ACTIVE); } proc.uidRecord = uidRec; Loading Loading @@ -19497,10 +19500,6 @@ public final class ActivityManagerService extends ActivityManagerNative if (proc.baseProcessTracker != null) { proc.baseProcessTracker.setState(proc.repProcState, memFactor, now, proc.pkgList); } if (proc.repProcState >= 0) { mBatteryStatsService.noteProcessState(proc.processName, proc.info.uid, proc.repProcState); } } } Loading Loading @@ -20000,6 +19999,7 @@ public final class ActivityManagerService extends ActivityManagerNative } uidRec.setProcState = uidRec.curProcState; enqueueUidChangeLocked(uidRec, -1, uidChange); mBatteryStatsService.noteUidProcessState(uidRec.uid, uidRec.curProcState); } }
services/core/java/com/android/server/am/BatteryStatsService.java +4 −4 Original line number Diff line number Diff line Loading @@ -272,15 +272,15 @@ public final class BatteryStatsService extends IBatteryStats.Stub } } void noteProcessState(String name, int uid, int state) { void noteProcessFinish(String name, int uid) { synchronized (mStats) { mStats.noteProcessStateLocked(name, uid, state); mStats.noteProcessFinishLocked(name, uid); } } void noteProcessFinish(String name, int uid) { void noteUidProcessState(int uid, int state) { synchronized (mStats) { mStats.noteProcessFinishLocked(name, uid); mStats.noteUidProcessStateLocked(uid, state); } } Loading