Import Android SDK Platform P [4697573]
/google/data/ro/projects/android/fetch_artifact \
--bid 4697573 \
--target sdk_phone_armv7-win_sdk \
sdk-repo-linux-sources-4697573.zip
AndroidVersion.ApiLevel has been modified to appear as 28
Change-Id: If80578c3c657366cc9cf75f8db13d46e2dd4e077
diff --git a/com/android/internal/os/BatteryStatsHelper.java b/com/android/internal/os/BatteryStatsHelper.java
index 5a59e70..1e5bd18 100644
--- a/com/android/internal/os/BatteryStatsHelper.java
+++ b/com/android/internal/os/BatteryStatsHelper.java
@@ -136,6 +136,7 @@
PowerCalculator mCameraPowerCalculator;
PowerCalculator mFlashlightPowerCalculator;
PowerCalculator mMemoryPowerCalculator;
+ PowerCalculator mMediaPowerCalculator;
boolean mHasWifiPowerReporting = false;
boolean mHasBluetoothPowerReporting = false;
@@ -424,6 +425,11 @@
}
mFlashlightPowerCalculator.reset();
+ if (mMediaPowerCalculator == null) {
+ mMediaPowerCalculator = new MediaPowerCalculator(mPowerProfile);
+ }
+ mMediaPowerCalculator.reset();
+
mStatsType = statsType;
mRawUptimeUs = rawUptimeUs;
mRawRealtimeUs = rawRealtimeUs;
@@ -560,6 +566,7 @@
mCameraPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType);
mFlashlightPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs,
mStatsType);
+ mMediaPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType);
final double totalPower = app.sumPower();
if (DEBUG && totalPower != 0) {
@@ -643,6 +650,21 @@
}
}
+ /**
+ * Ambient display power is the additional power the screen takes while in ambient display/
+ * screen doze/ always-on display (interchangeable terms) mode. Ambient display power should
+ * be hidden {@link #shouldHideSipper(BatterySipper)}, but should not be included in smearing
+ * {@link #removeHiddenBatterySippers(List)}.
+ */
+ private void addAmbientDisplayUsage() {
+ long ambientDisplayMs = mStats.getScreenDozeTime(mRawRealtimeUs, mStatsType);
+ double power = mPowerProfile.getAveragePower(PowerProfile.POWER_AMBIENT_DISPLAY)
+ * ambientDisplayMs / (60 * 60 * 1000);
+ if (power > 0) {
+ addEntry(DrainType.AMBIENT_DISPLAY, ambientDisplayMs, power);
+ }
+ }
+
private void addRadioUsage() {
BatterySipper radio = new BatterySipper(BatterySipper.DrainType.CELL, null, 0);
mMobileRadioPowerCalculator.calculateRemaining(radio, mStats, mRawRealtimeUs, mRawUptimeUs,
@@ -741,6 +763,7 @@
addUserUsage();
addPhoneUsage();
addScreenUsage();
+ addAmbientDisplayUsage();
addWiFiUsage();
addBluetoothUsage();
addMemoryUsage();
@@ -841,12 +864,13 @@
final BatterySipper sipper = sippers.get(i);
sipper.shouldHide = shouldHideSipper(sipper);
if (sipper.shouldHide) {
- if (sipper.drainType != BatterySipper.DrainType.OVERCOUNTED
- && sipper.drainType != BatterySipper.DrainType.SCREEN
- && sipper.drainType != BatterySipper.DrainType.UNACCOUNTED
- && sipper.drainType != BatterySipper.DrainType.BLUETOOTH
- && sipper.drainType != BatterySipper.DrainType.WIFI
- && sipper.drainType != BatterySipper.DrainType.IDLE) {
+ if (sipper.drainType != DrainType.OVERCOUNTED
+ && sipper.drainType != DrainType.SCREEN
+ && sipper.drainType != DrainType.AMBIENT_DISPLAY
+ && sipper.drainType != DrainType.UNACCOUNTED
+ && sipper.drainType != DrainType.BLUETOOTH
+ && sipper.drainType != DrainType.WIFI
+ && sipper.drainType != DrainType.IDLE) {
// Don't add it if it is overcounted, unaccounted or screen
proportionalSmearPowerMah += sipper.totalPowerMah;
}
@@ -893,13 +917,14 @@
* Check whether we should hide the battery sipper.
*/
public boolean shouldHideSipper(BatterySipper sipper) {
- final BatterySipper.DrainType drainType = sipper.drainType;
+ final DrainType drainType = sipper.drainType;
- return drainType == BatterySipper.DrainType.IDLE
- || drainType == BatterySipper.DrainType.CELL
- || drainType == BatterySipper.DrainType.SCREEN
- || drainType == BatterySipper.DrainType.UNACCOUNTED
- || drainType == BatterySipper.DrainType.OVERCOUNTED
+ return drainType == DrainType.IDLE
+ || drainType == DrainType.CELL
+ || drainType == DrainType.SCREEN
+ || drainType == DrainType.AMBIENT_DISPLAY
+ || drainType == DrainType.UNACCOUNTED
+ || drainType == DrainType.OVERCOUNTED
|| isTypeService(sipper)
|| isTypeSystem(sipper);
}