Merge "Use BatteryStats instead of BatteryStatsImpl in BatteryUsageStatsProvider" into sc-dev
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index c47fc57..043a22b 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -21,6 +21,7 @@
import static android.os.BatteryStatsManager.NUM_WIFI_SUPPL_STATES;
import android.annotation.IntDef;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.job.JobParameters;
@@ -2622,6 +2623,15 @@
*/
public abstract @Nullable long[] getCustomConsumerMeasuredBatteryConsumptionUC();
+ /**
+ * Returns the names of all {@link android.hardware.power.stats.EnergyConsumer}'s
+ * of (custom) energy consumer type
+ * {@link android.hardware.power.stats.EnergyConsumerType#OTHER}).
+ *
+ * {@hide}
+ */
+ public abstract @NonNull String[] getCustomEnergyConsumerNames();
+
public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS = new BitDescription[] {
new BitDescription(HistoryItem.STATE_CPU_RUNNING_FLAG, "running", "r"),
new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock", "w"),
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index cb1900f..b05a9f8 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -6951,7 +6951,8 @@
/**
* Returns the names of custom power components.
*/
- public @NonNull String[] getCustomPowerComponentNames() {
+ @Override
+ public @NonNull String[] getCustomEnergyConsumerNames() {
if (mGlobalMeasuredEnergyStats == null) {
return new String[0];
}
diff --git a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
index c3986c2..9ad7c15 100644
--- a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
+++ b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
@@ -21,6 +21,7 @@
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
+import android.os.SystemClock;
import android.os.UidBatteryConsumer;
import android.util.SparseArray;
@@ -36,12 +37,12 @@
*/
public class BatteryUsageStatsProvider {
private final Context mContext;
- private final BatteryStatsImpl mStats;
+ private final BatteryStats mStats;
private final PowerProfile mPowerProfile;
private final Object mLock = new Object();
private List<PowerCalculator> mPowerCalculators;
- public BatteryUsageStatsProvider(Context context, BatteryStatsImpl stats) {
+ public BatteryUsageStatsProvider(Context context, BatteryStats stats) {
mContext = context;
mStats = stats;
mPowerProfile = new PowerProfile(mContext);
@@ -97,7 +98,7 @@
allowableStatsAge = Math.min(allowableStatsAge, query.getMaxStatsAge());
}
- return mStats.mClocks.elapsedRealtime() - lastUpdateTimeStampMs > allowableStatsAge;
+ return elapsedRealtime() - lastUpdateTimeStampMs > allowableStatsAge;
}
/**
@@ -120,10 +121,10 @@
*/
@VisibleForTesting
public BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query) {
- final long realtimeUs = mStats.mClocks.elapsedRealtime() * 1000;
- final long uptimeUs = mStats.mClocks.uptimeMillis() * 1000;
+ final long realtimeUs = elapsedRealtime() * 1000;
+ final long uptimeUs = uptimeMillis() * 1000;
- final String[] customPowerComponentNames = mStats.getCustomPowerComponentNames();
+ final String[] customPowerComponentNames = mStats.getCustomEnergyConsumerNames();
// TODO(b/174186358): read extra time component number from configuration
final int customTimeComponentCount = 0;
@@ -154,16 +155,22 @@
if ((query.getFlags()
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY) != 0) {
+ if (!(mStats instanceof BatteryStatsImpl)) {
+ throw new UnsupportedOperationException(
+ "History cannot be included for " + getClass().getName());
+ }
+
+ BatteryStatsImpl batteryStatsImpl = (BatteryStatsImpl) mStats;
ArrayList<BatteryStats.HistoryTag> tags = new ArrayList<>(
- mStats.mHistoryTagPool.size());
+ batteryStatsImpl.mHistoryTagPool.size());
for (Map.Entry<BatteryStats.HistoryTag, Integer> entry :
- mStats.mHistoryTagPool.entrySet()) {
+ batteryStatsImpl.mHistoryTagPool.entrySet()) {
final BatteryStats.HistoryTag tag = entry.getKey();
tag.poolIdx = entry.getValue();
tags.add(tag);
}
- batteryUsageStatsBuilder.setBatteryHistory(mStats.mHistoryBuffer, tags);
+ batteryUsageStatsBuilder.setBatteryHistory(batteryStatsImpl.mHistoryBuffer, tags);
}
return batteryUsageStatsBuilder.build();
@@ -199,4 +206,20 @@
return uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND, realtimeUs,
BatteryStats.STATS_SINCE_CHARGED) / 1000;
}
+
+ private long elapsedRealtime() {
+ if (mStats instanceof BatteryStatsImpl) {
+ return ((BatteryStatsImpl) mStats).mClocks.elapsedRealtime();
+ } else {
+ return SystemClock.elapsedRealtime();
+ }
+ }
+
+ private long uptimeMillis() {
+ if (mStats instanceof BatteryStatsImpl) {
+ return ((BatteryStatsImpl) mStats).mClocks.uptimeMillis();
+ } else {
+ return SystemClock.uptimeMillis();
+ }
+ }
}
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java
index 3a6f7b8..e0739be 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java
@@ -167,7 +167,7 @@
}
BatteryUsageStats apply(BatteryUsageStatsQuery query, PowerCalculator... calculators) {
- final String[] customPowerComponentNames = mBatteryStats.getCustomPowerComponentNames();
+ final String[] customPowerComponentNames = mBatteryStats.getCustomEnergyConsumerNames();
final boolean includePowerModels = (query.getFlags()
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;
BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder(