summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/os/BatteryUsageStats.java73
-rw-r--r--core/java/android/os/BatteryUsageStatsQuery.java13
-rw-r--r--core/java/com/android/internal/os/BatteryStatsHistoryIterator.java2
-rw-r--r--core/java/com/android/internal/os/BatteryUsageStatsProvider.java15
4 files changed, 99 insertions, 4 deletions
diff --git a/core/java/android/os/BatteryUsageStats.java b/core/java/android/os/BatteryUsageStats.java
index 35a5a7c7c1d0..de7b88575e98 100644
--- a/core/java/android/os/BatteryUsageStats.java
+++ b/core/java/android/os/BatteryUsageStats.java
@@ -20,6 +20,9 @@ import android.annotation.NonNull;
import android.util.Range;
import android.util.SparseArray;
+import com.android.internal.os.BatteryStatsHistory;
+import com.android.internal.os.BatteryStatsHistoryIterator;
+
import java.util.ArrayList;
import java.util.List;
@@ -37,12 +40,16 @@ public final class BatteryUsageStats implements Parcelable {
private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers;
private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers;
private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers;
+ private final Parcel mHistoryBuffer;
+ private final List<BatteryStats.HistoryTag> mHistoryTagPool;
private BatteryUsageStats(@NonNull Builder builder) {
mStatsStartRealtimeMs = builder.mStatsStartRealtimeMs;
mDischargePercentage = builder.mDischargePercentage;
mDischargedPowerLowerBound = builder.mDischargedPowerLowerBoundMah;
mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah;
+ mHistoryBuffer = builder.mHistoryBuffer;
+ mHistoryTagPool = builder.mHistoryTagPool;
double totalPower = 0;
@@ -125,6 +132,19 @@ public final class BatteryUsageStats implements Parcelable {
return mUserBatteryConsumers;
}
+ /**
+ * Returns an iterator for {@link android.os.BatteryStats.HistoryItem}'s.
+ */
+ @NonNull
+ public BatteryStatsHistoryIterator iterateBatteryStatsHistory() {
+ if (mHistoryBuffer == null) {
+ throw new IllegalStateException(
+ "Battery history was not requested in the BatteryUsageStatsQuery");
+ }
+ return new BatteryStatsHistoryIterator(new BatteryStatsHistory(mHistoryBuffer),
+ mHistoryTagPool);
+ }
+
@Override
public int describeContents() {
return 0;
@@ -142,6 +162,29 @@ public final class BatteryUsageStats implements Parcelable {
source.readParcelableList(mSystemBatteryConsumers, getClass().getClassLoader());
mUserBatteryConsumers = new ArrayList<>();
source.readParcelableList(mUserBatteryConsumers, getClass().getClassLoader());
+ if (source.readBoolean()) {
+ mHistoryBuffer = Parcel.obtain();
+ mHistoryBuffer.setDataSize(0);
+ mHistoryBuffer.setDataPosition(0);
+
+ int historyBufferSize = source.readInt();
+ int curPos = source.dataPosition();
+ mHistoryBuffer.appendFrom(source, curPos, historyBufferSize);
+ source.setDataPosition(curPos + historyBufferSize);
+
+ int historyTagCount = source.readInt();
+ mHistoryTagPool = new ArrayList<>(historyTagCount);
+ for (int i = 0; i < historyTagCount; i++) {
+ BatteryStats.HistoryTag tag = new BatteryStats.HistoryTag();
+ tag.string = source.readString();
+ tag.uid = source.readInt();
+ tag.poolIdx = source.readInt();
+ mHistoryTagPool.add(tag);
+ }
+ } else {
+ mHistoryBuffer = null;
+ mHistoryTagPool = null;
+ }
}
@Override
@@ -154,6 +197,23 @@ public final class BatteryUsageStats implements Parcelable {
dest.writeParcelableList(mUidBatteryConsumers, flags);
dest.writeParcelableList(mSystemBatteryConsumers, flags);
dest.writeParcelableList(mUserBatteryConsumers, flags);
+ if (mHistoryBuffer != null) {
+ dest.writeBoolean(true);
+
+ final int historyBufferSize = mHistoryBuffer.dataSize();
+ dest.writeInt(historyBufferSize);
+ dest.appendFrom(mHistoryBuffer, 0, historyBufferSize);
+
+ dest.writeInt(mHistoryTagPool.size());
+ for (int i = mHistoryTagPool.size() - 1; i >= 0; i--) {
+ final BatteryStats.HistoryTag tag = mHistoryTagPool.get(i);
+ dest.writeString(tag.string);
+ dest.writeInt(tag.uid);
+ dest.writeInt(tag.poolIdx);
+ }
+ } else {
+ dest.writeBoolean(false);
+ }
}
@NonNull
@@ -183,6 +243,8 @@ public final class BatteryUsageStats implements Parcelable {
new SparseArray<>();
private final SparseArray<UserBatteryConsumer.Builder> mUserBatteryConsumerBuilders =
new SparseArray<>();
+ private Parcel mHistoryBuffer;
+ private List<BatteryStats.HistoryTag> mHistoryTagPool;
public Builder(int customPowerComponentCount, int customTimeComponentCount) {
mCustomPowerComponentCount = customPowerComponentCount;
@@ -227,6 +289,17 @@ public final class BatteryUsageStats implements Parcelable {
}
/**
+ * Sets the parceled recent history.
+ */
+ @NonNull
+ public Builder setBatteryHistory(Parcel historyBuffer,
+ List<BatteryStats.HistoryTag> historyTagPool) {
+ mHistoryBuffer = historyBuffer;
+ mHistoryTagPool = historyTagPool;
+ return this;
+ }
+
+ /**
* Creates or returns a exiting UidBatteryConsumer, which represents battery attribution
* data for an individual UID.
*/
diff --git a/core/java/android/os/BatteryUsageStatsQuery.java b/core/java/android/os/BatteryUsageStatsQuery.java
index 17cb735eea49..9518bf197fa0 100644
--- a/core/java/android/os/BatteryUsageStatsQuery.java
+++ b/core/java/android/os/BatteryUsageStatsQuery.java
@@ -40,6 +40,7 @@ public final class BatteryUsageStatsQuery implements Parcelable {
*/
@IntDef(flag = true, prefix = { "FLAG_BATTERY_USAGE_STATS_" }, value = {
FLAG_BATTERY_USAGE_STATS_POWER_PROFILE_MODEL,
+ FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY,
})
@Retention(RetentionPolicy.SOURCE)
public @interface BatteryUsageStatsFlags {}
@@ -53,6 +54,12 @@ public final class BatteryUsageStatsQuery implements Parcelable {
*/
public static final int FLAG_BATTERY_USAGE_STATS_POWER_PROFILE_MODEL = 1;
+ /**
+ * Indicates that battery history should be included in the BatteryUsageStats.
+ * @hide
+ */
+ public static final int FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY = 2;
+
private final int mFlags;
@NonNull
private final int[] mUserIds;
@@ -146,10 +153,10 @@ public final class BatteryUsageStatsQuery implements Parcelable {
}
/**
- * Sets flags to modify the behavior of {@link BatteryStatsManager#getBatteryUsageStats}.
+ * Requests that battery history be included in the BatteryUsageStats.
*/
- public Builder setFlags(@BatteryUsageStatsFlags int flags) {
- mFlags = flags;
+ public Builder includeBatteryHistory() {
+ mFlags |= BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY;
return this;
}
diff --git a/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java b/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java
index d99af8178feb..1871ac5074c9 100644
--- a/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java
+++ b/core/java/com/android/internal/os/BatteryStatsHistoryIterator.java
@@ -36,7 +36,7 @@ public class BatteryStatsHistoryIterator {
private final String[] mReadHistoryStrings;
private final int[] mReadHistoryUids;
- BatteryStatsHistoryIterator(@NonNull BatteryStatsHistory history,
+ public BatteryStatsHistoryIterator(@NonNull BatteryStatsHistory history,
@NonNull List<BatteryStats.HistoryTag> historyTagPool) {
mBatteryStatsHistory = history;
diff --git a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
index 0163acc295fb..15b584d1fd06 100644
--- a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
+++ b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
@@ -30,6 +30,7 @@ import com.android.internal.annotations.VisibleForTesting;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* Uses accumulated battery stats data and PowerCalculators to produce power
@@ -152,6 +153,20 @@ public class BatteryUsageStatsProvider {
query);
}
+ if ((query.getFlags()
+ & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY) != 0) {
+ ArrayList<BatteryStats.HistoryTag> tags = new ArrayList<>(
+ mStats.mHistoryTagPool.size());
+ for (Map.Entry<BatteryStats.HistoryTag, Integer> entry :
+ mStats.mHistoryTagPool.entrySet()) {
+ final BatteryStats.HistoryTag tag = entry.getKey();
+ tag.poolIdx = entry.getValue();
+ tags.add(tag);
+ }
+
+ batteryUsageStatsBuilder.setBatteryHistory(mStats.mHistoryBuffer, tags);
+ }
+
return batteryUsageStatsBuilder.build();
}