summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2014-07-09 16:13:01 -0700
committerDianne Hackborn <hackbod@google.com>2014-07-09 20:04:03 -0700
commit61659e5daaea80104d4d0fd567e78b5f757b5df4 (patch)
tree7a61cc57948338836d6fa57f46888dc6776382fc /services
parent6b1e88e5d09a88dd77e631918aa7122a95a7ff4b (diff)
downloadframeworks_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-xservices/core/java/com/android/server/am/ActivityManagerService.java47
-rw-r--r--services/core/java/com/android/server/am/BatteryStatsService.java22
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();