Loading core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java 0 → 100644 +57 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.os; import android.os.BatteryStats; import android.os.UserHandle; import android.util.SparseArray; import java.util.List; /** * Estimates power consumed by the ambient display */ public class AmbientDisplayPowerCalculator extends PowerCalculator { private final PowerProfile mPowerProfile; public AmbientDisplayPowerCalculator(PowerProfile powerProfile) { mPowerProfile = powerProfile; } /** * 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 BatteryStatsHelper#shouldHideSipper(BatterySipper)}, but should not be * included in smearing {@link BatteryStatsHelper#removeHiddenBatterySippers(List)}. */ @Override public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) { long ambientDisplayMs = batteryStats.getScreenDozeTime(rawRealtimeUs, statsType) / 1000; double power = mPowerProfile.getAveragePower(PowerProfile.POWER_AMBIENT_DISPLAY) * ambientDisplayMs / (60 * 60 * 1000); if (power > 0) { BatterySipper bs = new BatterySipper(BatterySipper.DrainType.AMBIENT_DISPLAY, null, 0); bs.usagePowerMah = power; bs.usageTimeMs = ambientDisplayMs; bs.sumPower(); sippers.add(bs); } } } core/java/com/android/internal/os/BatterySipper.java +4 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,10 @@ public class BatterySipper implements Comparable<BatterySipper> { public double wifiPowerMah; public double systemServiceCpuPowerMah; // Do not include this sipper in results because it is included // in an aggregate sipper. public boolean isAggregated; // **************** // This list must be kept current with atoms.proto (frameworks/base/cmds/statsd/src/atoms.proto) // so the ordinal values (and therefore the order) must never change. Loading core/java/com/android/internal/os/BatteryStatsHelper.java +62 −394 File changed.Preview size limit exceeded, changes collapsed. Show changes core/java/com/android/internal/os/BluetoothPowerCalculator.java +36 −5 Original line number Diff line number Diff line Loading @@ -16,14 +16,20 @@ package com.android.internal.os; import android.os.BatteryStats; import android.os.Process; import android.os.UserHandle; import android.util.Log; import android.util.SparseArray; import java.util.List; public class BluetoothPowerCalculator extends PowerCalculator { private static final boolean DEBUG = BatteryStatsHelper.DEBUG; private static final String TAG = "BluetoothPowerCalculator"; private static final String TAG = "BluetoothPowerCalc"; private final double mIdleMa; private final double mRxMa; private final double mTxMa; private final boolean mHasBluetoothPowerController; private double mAppTotalPowerMah = 0; private long mAppTotalTimeMs = 0; Loading @@ -31,10 +37,36 @@ public class BluetoothPowerCalculator extends PowerCalculator { mIdleMa = profile.getAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_IDLE); mRxMa = profile.getAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_RX); mTxMa = profile.getAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_TX); mHasBluetoothPowerController = mIdleMa != 0 && mRxMa != 0 && mTxMa != 0; } @Override public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) { if (!mHasBluetoothPowerController || !batteryStats.hasBluetoothActivityReporting()) { return; } super.calculate(sippers, batteryStats, rawRealtimeUs, rawUptimeUs, statsType, asUsers); BatterySipper bs = new BatterySipper(BatterySipper.DrainType.BLUETOOTH, null, 0); calculateRemaining(bs, batteryStats, rawRealtimeUs, rawUptimeUs, statsType); for (int i = sippers.size() - 1; i >= 0; i--) { BatterySipper app = sippers.get(i); if (app.getUid() == Process.BLUETOOTH_UID) { if (DEBUG) Log.d(TAG, "Bluetooth adding sipper " + app + ": cpu=" + app.cpuTimeMs); app.isAggregated = true; bs.add(app); } } if (bs.sumPower() > 0) { sippers.add(bs); } } @Override protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, long rawUptimeUs, int statsType) { final BatteryStats.ControllerActivityCounter counter = u.getBluetoothControllerActivity(); Loading Loading @@ -63,8 +95,7 @@ public class BluetoothPowerCalculator extends PowerCalculator { mAppTotalTimeMs += totalTimeMs; } @Override public void calculateRemaining(BatterySipper app, BatteryStats stats, long rawRealtimeUs, private void calculateRemaining(BatterySipper app, BatteryStats stats, long rawRealtimeUs, long rawUptimeUs, int statsType) { final BatteryStats.ControllerActivityCounter counter = stats.getBluetoothControllerActivity(); Loading @@ -87,7 +118,7 @@ public class BluetoothPowerCalculator extends PowerCalculator { if (DEBUG && powerMah != 0) { Log.d(TAG, "Bluetooth active: time=" + (totalTimeMs) + " power=" + BatteryStatsHelper.makemAh(powerMah)); + " power=" + formatCharge(powerMah)); } app.bluetoothPowerMah = powerMah; Loading core/java/com/android/internal/os/CameraPowerCalculator.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ public class CameraPowerCalculator extends PowerCalculator { } @Override public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, long rawUptimeUs, int statsType) { // Calculate camera power usage. Right now, this is a (very) rough estimate based on the Loading Loading
core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java 0 → 100644 +57 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.os; import android.os.BatteryStats; import android.os.UserHandle; import android.util.SparseArray; import java.util.List; /** * Estimates power consumed by the ambient display */ public class AmbientDisplayPowerCalculator extends PowerCalculator { private final PowerProfile mPowerProfile; public AmbientDisplayPowerCalculator(PowerProfile powerProfile) { mPowerProfile = powerProfile; } /** * 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 BatteryStatsHelper#shouldHideSipper(BatterySipper)}, but should not be * included in smearing {@link BatteryStatsHelper#removeHiddenBatterySippers(List)}. */ @Override public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) { long ambientDisplayMs = batteryStats.getScreenDozeTime(rawRealtimeUs, statsType) / 1000; double power = mPowerProfile.getAveragePower(PowerProfile.POWER_AMBIENT_DISPLAY) * ambientDisplayMs / (60 * 60 * 1000); if (power > 0) { BatterySipper bs = new BatterySipper(BatterySipper.DrainType.AMBIENT_DISPLAY, null, 0); bs.usagePowerMah = power; bs.usageTimeMs = ambientDisplayMs; bs.sumPower(); sippers.add(bs); } } }
core/java/com/android/internal/os/BatterySipper.java +4 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,10 @@ public class BatterySipper implements Comparable<BatterySipper> { public double wifiPowerMah; public double systemServiceCpuPowerMah; // Do not include this sipper in results because it is included // in an aggregate sipper. public boolean isAggregated; // **************** // This list must be kept current with atoms.proto (frameworks/base/cmds/statsd/src/atoms.proto) // so the ordinal values (and therefore the order) must never change. Loading
core/java/com/android/internal/os/BatteryStatsHelper.java +62 −394 File changed.Preview size limit exceeded, changes collapsed. Show changes
core/java/com/android/internal/os/BluetoothPowerCalculator.java +36 −5 Original line number Diff line number Diff line Loading @@ -16,14 +16,20 @@ package com.android.internal.os; import android.os.BatteryStats; import android.os.Process; import android.os.UserHandle; import android.util.Log; import android.util.SparseArray; import java.util.List; public class BluetoothPowerCalculator extends PowerCalculator { private static final boolean DEBUG = BatteryStatsHelper.DEBUG; private static final String TAG = "BluetoothPowerCalculator"; private static final String TAG = "BluetoothPowerCalc"; private final double mIdleMa; private final double mRxMa; private final double mTxMa; private final boolean mHasBluetoothPowerController; private double mAppTotalPowerMah = 0; private long mAppTotalTimeMs = 0; Loading @@ -31,10 +37,36 @@ public class BluetoothPowerCalculator extends PowerCalculator { mIdleMa = profile.getAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_IDLE); mRxMa = profile.getAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_RX); mTxMa = profile.getAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_TX); mHasBluetoothPowerController = mIdleMa != 0 && mRxMa != 0 && mTxMa != 0; } @Override public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats, long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) { if (!mHasBluetoothPowerController || !batteryStats.hasBluetoothActivityReporting()) { return; } super.calculate(sippers, batteryStats, rawRealtimeUs, rawUptimeUs, statsType, asUsers); BatterySipper bs = new BatterySipper(BatterySipper.DrainType.BLUETOOTH, null, 0); calculateRemaining(bs, batteryStats, rawRealtimeUs, rawUptimeUs, statsType); for (int i = sippers.size() - 1; i >= 0; i--) { BatterySipper app = sippers.get(i); if (app.getUid() == Process.BLUETOOTH_UID) { if (DEBUG) Log.d(TAG, "Bluetooth adding sipper " + app + ": cpu=" + app.cpuTimeMs); app.isAggregated = true; bs.add(app); } } if (bs.sumPower() > 0) { sippers.add(bs); } } @Override protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, long rawUptimeUs, int statsType) { final BatteryStats.ControllerActivityCounter counter = u.getBluetoothControllerActivity(); Loading Loading @@ -63,8 +95,7 @@ public class BluetoothPowerCalculator extends PowerCalculator { mAppTotalTimeMs += totalTimeMs; } @Override public void calculateRemaining(BatterySipper app, BatteryStats stats, long rawRealtimeUs, private void calculateRemaining(BatterySipper app, BatteryStats stats, long rawRealtimeUs, long rawUptimeUs, int statsType) { final BatteryStats.ControllerActivityCounter counter = stats.getBluetoothControllerActivity(); Loading @@ -87,7 +118,7 @@ public class BluetoothPowerCalculator extends PowerCalculator { if (DEBUG && powerMah != 0) { Log.d(TAG, "Bluetooth active: time=" + (totalTimeMs) + " power=" + BatteryStatsHelper.makemAh(powerMah)); + " power=" + formatCharge(powerMah)); } app.bluetoothPowerMah = powerMah; Loading
core/java/com/android/internal/os/CameraPowerCalculator.java +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ public class CameraPowerCalculator extends PowerCalculator { } @Override public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, long rawUptimeUs, int statsType) { // Calculate camera power usage. Right now, this is a (very) rough estimate based on the Loading