diff options
author | Dianne Hackborn <hackbod@google.com> | 2014-07-09 16:13:01 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2014-07-09 20:04:03 -0700 |
commit | 61659e5daaea80104d4d0fd567e78b5f757b5df4 (patch) | |
tree | 7a61cc57948338836d6fa57f46888dc6776382fc /services | |
parent | 6b1e88e5d09a88dd77e631918aa7122a95a7ff4b (diff) | |
download | frameworks_base-61659e5daaea80104d4d0fd567e78b5f757b5df4.zip frameworks_base-61659e5daaea80104d4d0fd567e78b5f757b5df4.tar.gz frameworks_base-61659e5daaea80104d4d0fd567e78b5f757b5df4.tar.bz2 |
Add tracking of uid process states in battery stats.
We now keep track of how long each uid had processes in
various states: foreground, active, running. This is based
on a collapse of the various activity manager process states
into these three bins.
You'll see these in a checkin like this:
8,10013,l,st,61504,61504,83109
Also fix issue #16021555: App showing up as on "top" even
when the screen is off. This is "fixed" by just saying we
always report the current app at the top of the activity stack,
regardless of the state of the screen.
Change-Id: I1204904225101243eb00b43425d9806bffdd2ab9
Diffstat (limited to 'services')
-rwxr-xr-x | services/core/java/com/android/server/am/ActivityManagerService.java | 47 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/BatteryStatsService.java | 22 |
2 files changed, 44 insertions, 25 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index e10c48f..053fb5a 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -138,7 +138,6 @@ import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.res.CompatibilityInfo; import android.content.res.Configuration; -import android.graphics.Bitmap; import android.net.Proxy; import android.net.ProxyInfo; import android.net.Uri; @@ -2997,12 +2996,10 @@ public final class ActivityManagerService extends ActivityManagerNative app.processName, uid, uid, gids, debugFlags, mountExternal, app.info.targetSdkVersion, app.info.seinfo, requiredAbi, null); - BatteryStatsImpl bs = mBatteryStatsService.getActiveStatistics(); - synchronized (bs) { - if (bs.isOnBattery()) { - bs.getProcessStatsLocked(app.uid, app.processName).incStartsLocked(); - } + if (app.isolated) { + mBatteryStatsService.addIsolatedUid(app.uid, app.info.uid); } + mBatteryStatsService.noteProcessStart(app.processName, app.info.uid); EventLog.writeEvent(EventLogTags.AM_PROC_START, UserHandle.getUserId(uid), startResult.pid, uid, @@ -3052,14 +3049,13 @@ public final class ActivityManagerService extends ActivityManagerNative mHandler.sendMessageDelayed(msg, startResult.usingWrapper ? PROC_START_TIMEOUT_WITH_WRAPPER : PROC_START_TIMEOUT); } - mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_PROC_START, - app.processName, app.info.uid); - if (app.isolated) { - mBatteryStatsService.addIsolatedUid(app.uid, app.info.uid); - } } catch (RuntimeException e) { // XXX do better error recovery. app.setPid(0); + mBatteryStatsService.noteProcessFinish(app.processName, app.info.uid); + if (app.isolated) { + mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid); + } Slog.e(TAG, "Failure starting process " + app.processName, e); } } @@ -5121,8 +5117,7 @@ public final class ActivityManagerService extends ActivityManagerNative mPidsSelfLocked.remove(pid); mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app); } - mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_PROC_FINISH, - app.processName, app.info.uid); + mBatteryStatsService.noteProcessFinish(app.processName, app.info.uid); if (app.isolated) { mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid); } @@ -5166,8 +5161,7 @@ public final class ActivityManagerService extends ActivityManagerNative mHeavyWeightProcess.userId, 0)); mHeavyWeightProcess = null; } - mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_PROC_FINISH, - app.processName, app.info.uid); + mBatteryStatsService.noteProcessFinish(app.processName, app.info.uid); if (app.isolated) { mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid); } @@ -13285,8 +13279,7 @@ public final class ActivityManagerService extends ActivityManagerNative mPidsSelfLocked.remove(app.pid); mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app); } - mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_PROC_FINISH, - app.processName, app.info.uid); + mBatteryStatsService.noteProcessFinish(app.processName, app.info.uid); if (app.isolated) { mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid); } @@ -16039,7 +16032,7 @@ public final class ActivityManagerService extends ActivityManagerNative app.notCachedSinceIdle = false; } if (!doingAll) { - setProcessTrackerState(app, mProcessStats.getMemFactorLocked(), now); + setProcessTrackerStateLocked(app, mProcessStats.getMemFactorLocked(), now); } else { app.procStateChanged = true; } @@ -16092,9 +16085,15 @@ public final class ActivityManagerService extends ActivityManagerNative return success; } - private final void setProcessTrackerState(ProcessRecord proc, int memFactor, long now) { - if (proc.thread != null && proc.baseProcessTracker != null) { - proc.baseProcessTracker.setState(proc.repProcState, memFactor, now, proc.pkgList); + private final void setProcessTrackerStateLocked(ProcessRecord proc, int memFactor, long now) { + if (proc.thread != null) { + 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); + } } } @@ -16149,7 +16148,7 @@ public final class ActivityManagerService extends ActivityManagerNative ActivityRecord act = mStackSupervisor.resumedAppLocked(); String pkg; int uid; - if (act != null && !act.sleeping) { + if (act != null) { pkg = act.packageName; uid = act.info.applicationInfo.uid; } else { @@ -16430,7 +16429,7 @@ public final class ActivityManagerService extends ActivityManagerNative for (int i=N-1; i>=0; i--) { ProcessRecord app = mLruProcesses.get(i); if (allChanged || app.procStateChanged) { - setProcessTrackerState(app, trackerMemFactor, now); + setProcessTrackerStateLocked(app, trackerMemFactor, now); app.procStateChanged = false; } if (app.curProcState >= ActivityManager.PROCESS_STATE_HOME @@ -16521,7 +16520,7 @@ public final class ActivityManagerService extends ActivityManagerNative for (int i=N-1; i>=0; i--) { ProcessRecord app = mLruProcesses.get(i); if (allChanged || app.procStateChanged) { - setProcessTrackerState(app, trackerMemFactor, now); + setProcessTrackerStateLocked(app, trackerMemFactor, now); app.procStateChanged = false; } if ((app.curProcState >= ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 5c5e3e3..da444f9 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -33,7 +33,6 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.os.WorkSource; -import android.telephony.DataConnectionRealTimeInfo; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; import android.util.Slog; @@ -166,6 +165,27 @@ public final class BatteryStatsService extends IBatteryStats.Stub } } + public void noteProcessStart(String name, int uid) { + enforceCallingPermission(); + synchronized (mStats) { + mStats.noteProcessStartLocked(name, uid); + } + } + + public void noteProcessState(String name, int uid, int state) { + enforceCallingPermission(); + synchronized (mStats) { + mStats.noteProcessStateLocked(name, uid, state); + } + } + + public void noteProcessFinish(String name, int uid) { + enforceCallingPermission(); + synchronized (mStats) { + mStats.noteProcessFinishLocked(name, uid); + } + } + public void noteStartWakelock(int uid, int pid, String name, String historyName, int type, boolean unimportantForLogging) { enforceCallingPermission(); |