summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/BatteryUsageStats.java1
-rw-r--r--core/java/android/os/UidBatteryConsumer.java71
-rw-r--r--services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java18
3 files changed, 74 insertions, 16 deletions
diff --git a/core/java/android/os/BatteryUsageStats.java b/core/java/android/os/BatteryUsageStats.java
index a5f8844a2921..cd52b5c0f7f3 100644
--- a/core/java/android/os/BatteryUsageStats.java
+++ b/core/java/android/os/BatteryUsageStats.java
@@ -115,6 +115,7 @@ public final class BatteryUsageStats implements Parcelable, Closeable {
static final String XML_ATTR_HIGHEST_DRAIN_PACKAGE = "highest_drain_package";
static final String XML_ATTR_TIME_IN_FOREGROUND = "time_in_foreground";
static final String XML_ATTR_TIME_IN_BACKGROUND = "time_in_background";
+ static final String XML_ATTR_TIME_IN_FOREGROUND_SERVICE = "time_in_foreground_service";
// We need about 700 bytes per UID
private static final long BATTERY_CONSUMER_CURSOR_WINDOW_SIZE = 5_000 * 700;
diff --git a/core/java/android/os/UidBatteryConsumer.java b/core/java/android/os/UidBatteryConsumer.java
index 03a1b6f7fe01..3eea94eaf2e6 100644
--- a/core/java/android/os/UidBatteryConsumer.java
+++ b/core/java/android/os/UidBatteryConsumer.java
@@ -71,7 +71,8 @@ public final class UidBatteryConsumer extends BatteryConsumer {
static final int COLUMN_INDEX_PACKAGE_WITH_HIGHEST_DRAIN = COLUMN_INDEX_UID + 1;
static final int COLUMN_INDEX_TIME_IN_FOREGROUND = COLUMN_INDEX_UID + 2;
static final int COLUMN_INDEX_TIME_IN_BACKGROUND = COLUMN_INDEX_UID + 3;
- static final int COLUMN_COUNT = BatteryConsumer.COLUMN_COUNT + 4;
+ static final int COLUMN_INDEX_TIME_IN_FOREGROUND_SERVICE = COLUMN_INDEX_UID + 4;
+ static final int COLUMN_COUNT = BatteryConsumer.COLUMN_COUNT + 5;
UidBatteryConsumer(BatteryConsumerData data) {
super(data);
@@ -92,17 +93,35 @@ public final class UidBatteryConsumer extends BatteryConsumer {
/**
* Returns the amount of time in milliseconds this UID spent in the specified state.
+ * @deprecated use {@link #getTimeInProcessStateMs} instead.
*/
+ @Deprecated
public long getTimeInStateMs(@State int state) {
switch (state) {
case STATE_BACKGROUND:
- return mData.getInt(COLUMN_INDEX_TIME_IN_BACKGROUND);
+ return mData.getInt(COLUMN_INDEX_TIME_IN_BACKGROUND)
+ + mData.getInt(COLUMN_INDEX_TIME_IN_FOREGROUND_SERVICE);
case STATE_FOREGROUND:
return mData.getInt(COLUMN_INDEX_TIME_IN_FOREGROUND);
}
return 0;
}
+ /**
+ * Returns the amount of time in milliseconds this UID spent in the specified process state.
+ */
+ public long getTimeInProcessStateMs(@ProcessState int state) {
+ switch (state) {
+ case PROCESS_STATE_BACKGROUND:
+ return mData.getInt(COLUMN_INDEX_TIME_IN_BACKGROUND);
+ case PROCESS_STATE_FOREGROUND:
+ return mData.getInt(COLUMN_INDEX_TIME_IN_FOREGROUND);
+ case PROCESS_STATE_FOREGROUND_SERVICE:
+ return mData.getInt(COLUMN_INDEX_TIME_IN_FOREGROUND_SERVICE);
+ }
+ return 0;
+ }
+
@Override
public void dump(PrintWriter pw, boolean skipEmptyComponents) {
pw.print("UID ");
@@ -158,9 +177,11 @@ public final class UidBatteryConsumer extends BatteryConsumer {
packageWithHighestDrain);
}
serializer.attributeLong(null, BatteryUsageStats.XML_ATTR_TIME_IN_FOREGROUND,
- getTimeInStateMs(STATE_FOREGROUND));
+ getTimeInProcessStateMs(PROCESS_STATE_FOREGROUND));
serializer.attributeLong(null, BatteryUsageStats.XML_ATTR_TIME_IN_BACKGROUND,
- getTimeInStateMs(STATE_BACKGROUND));
+ getTimeInProcessStateMs(PROCESS_STATE_BACKGROUND));
+ serializer.attributeLong(null, BatteryUsageStats.XML_ATTR_TIME_IN_FOREGROUND_SERVICE,
+ getTimeInProcessStateMs(PROCESS_STATE_FOREGROUND_SERVICE));
mPowerComponents.writeToXml(serializer);
serializer.endTag(null, BatteryUsageStats.XML_TAG_UID);
}
@@ -180,10 +201,13 @@ public final class UidBatteryConsumer extends BatteryConsumer {
consumerBuilder.setPackageWithHighestDrain(
parser.getAttributeValue(null, BatteryUsageStats.XML_ATTR_HIGHEST_DRAIN_PACKAGE));
- consumerBuilder.setTimeInStateMs(STATE_FOREGROUND,
+ consumerBuilder.setTimeInProcessStateMs(PROCESS_STATE_FOREGROUND,
parser.getAttributeLong(null, BatteryUsageStats.XML_ATTR_TIME_IN_FOREGROUND));
- consumerBuilder.setTimeInStateMs(STATE_BACKGROUND,
+ consumerBuilder.setTimeInProcessStateMs(PROCESS_STATE_BACKGROUND,
parser.getAttributeLong(null, BatteryUsageStats.XML_ATTR_TIME_IN_BACKGROUND));
+ consumerBuilder.setTimeInProcessStateMs(PROCESS_STATE_FOREGROUND_SERVICE,
+ parser.getAttributeLong(null,
+ BatteryUsageStats.XML_ATTR_TIME_IN_FOREGROUND_SERVICE));
while (!(eventType == XmlPullParser.END_TAG
&& parser.getName().equals(BatteryUsageStats.XML_TAG_UID))
&& eventType != XmlPullParser.END_DOCUMENT) {
@@ -255,7 +279,9 @@ public final class UidBatteryConsumer extends BatteryConsumer {
/**
* Sets the duration, in milliseconds, that this UID was active in a particular state,
* such as foreground or background.
+ * @deprecated use {@link #setTimeInProcessStateMs} instead.
*/
+ @Deprecated
@NonNull
public Builder setTimeInStateMs(@State int state, long timeInStateMs) {
switch (state) {
@@ -272,6 +298,28 @@ public final class UidBatteryConsumer extends BatteryConsumer {
}
/**
+ * Sets the duration, in milliseconds, that this UID was active in a particular process
+ * state, such as foreground service.
+ */
+ @NonNull
+ public Builder setTimeInProcessStateMs(@ProcessState int state, long timeInProcessStateMs) {
+ switch (state) {
+ case PROCESS_STATE_FOREGROUND:
+ mData.putLong(COLUMN_INDEX_TIME_IN_FOREGROUND, timeInProcessStateMs);
+ break;
+ case PROCESS_STATE_BACKGROUND:
+ mData.putLong(COLUMN_INDEX_TIME_IN_BACKGROUND, timeInProcessStateMs);
+ break;
+ case PROCESS_STATE_FOREGROUND_SERVICE:
+ mData.putLong(COLUMN_INDEX_TIME_IN_FOREGROUND_SERVICE, timeInProcessStateMs);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported process state: " + state);
+ }
+ return this;
+ }
+
+ /**
* Marks the UidBatteryConsumer for exclusion from the result set.
*/
public Builder excludeFromBatteryUsageStats() {
@@ -285,12 +333,15 @@ public final class UidBatteryConsumer extends BatteryConsumer {
public Builder add(UidBatteryConsumer consumer) {
mPowerComponentsBuilder.addPowerAndDuration(consumer.mPowerComponents);
- setTimeInStateMs(STATE_FOREGROUND,
+ setTimeInProcessStateMs(PROCESS_STATE_FOREGROUND,
mData.getLong(COLUMN_INDEX_TIME_IN_FOREGROUND)
- + consumer.getTimeInStateMs(STATE_FOREGROUND));
- setTimeInStateMs(STATE_BACKGROUND,
+ + consumer.getTimeInProcessStateMs(PROCESS_STATE_FOREGROUND));
+ setTimeInProcessStateMs(PROCESS_STATE_BACKGROUND,
mData.getLong(COLUMN_INDEX_TIME_IN_BACKGROUND)
- + consumer.getTimeInStateMs(STATE_BACKGROUND));
+ + consumer.getTimeInProcessStateMs(PROCESS_STATE_BACKGROUND));
+ setTimeInProcessStateMs(PROCESS_STATE_FOREGROUND_SERVICE,
+ mData.getLong(COLUMN_INDEX_TIME_IN_FOREGROUND_SERVICE)
+ + consumer.getTimeInProcessStateMs(PROCESS_STATE_FOREGROUND_SERVICE));
if (mPackageWithHighestDrain == PACKAGE_NAME_UNINITIALIZED) {
mPackageWithHighestDrain = consumer.getPackageWithHighestDrain();
diff --git a/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java b/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
index 851a3f7bdaba..83d7d72059b4 100644
--- a/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
+++ b/services/core/java/com/android/server/power/stats/BatteryUsageStatsProvider.java
@@ -188,10 +188,12 @@ public class BatteryUsageStatsProvider {
}
batteryUsageStatsBuilder.getOrCreateUidBatteryConsumerBuilder(uid)
- .setTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND,
+ .setTimeInProcessStateMs(UidBatteryConsumer.PROCESS_STATE_BACKGROUND,
getProcessBackgroundTimeMs(uid, realtimeUs))
- .setTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND,
- getProcessForegroundTimeMs(uid, realtimeUs));
+ .setTimeInProcessStateMs(UidBatteryConsumer.PROCESS_STATE_FOREGROUND,
+ getProcessForegroundTimeMs(uid, realtimeUs))
+ .setTimeInProcessStateMs(UidBatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE,
+ getProcessForegroundServiceTimeMs(uid, realtimeUs));
}
final int[] powerComponents = query.getPowerComponents();
@@ -295,10 +297,14 @@ public class BatteryUsageStatsProvider {
}
private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
- return (uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
+ return uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
+ realtimeUs, BatteryStats.STATS_SINCE_CHARGED)
+ / 1000;
+ }
+
+ private long getProcessForegroundServiceTimeMs(BatteryStats.Uid uid, long realtimeUs) {
+ return uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
realtimeUs, BatteryStats.STATS_SINCE_CHARGED)
- + uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
- realtimeUs, BatteryStats.STATS_SINCE_CHARGED))
/ 1000;
}