Loading core/java/android/os/BatteryStats.java +10 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.os.BatteryStatsManager.NUM_WIFI_STATES; 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; Loading Loading @@ -2622,6 +2623,15 @@ public abstract class BatteryStats implements Parcelable { */ 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"), Loading core/java/com/android/internal/os/BatteryStatsImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -6951,7 +6951,8 @@ public class BatteryStatsImpl extends BatteryStats { /** * Returns the names of custom power components. */ public @NonNull String[] getCustomPowerComponentNames() { @Override public @NonNull String[] getCustomEnergyConsumerNames() { if (mGlobalMeasuredEnergyStats == null) { return new String[0]; } Loading core/java/com/android/internal/os/BatteryUsageStatsProvider.java +32 −9 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.hardware.SensorManager; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; import android.os.SystemClock; import android.os.UidBatteryConsumer; import android.util.SparseArray; Loading @@ -36,12 +37,12 @@ import java.util.Map; */ 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); Loading Loading @@ -97,7 +98,7 @@ public class BatteryUsageStatsProvider { allowableStatsAge = Math.min(allowableStatsAge, query.getMaxStatsAge()); } return mStats.mClocks.elapsedRealtime() - lastUpdateTimeStampMs > allowableStatsAge; return elapsedRealtime() - lastUpdateTimeStampMs > allowableStatsAge; } /** Loading @@ -120,10 +121,10 @@ public class BatteryUsageStatsProvider { */ @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; Loading Loading @@ -154,16 +155,22 @@ public class BatteryUsageStatsProvider { 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(); Loading Loading @@ -199,4 +206,20 @@ public class BatteryUsageStatsProvider { 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(); } } } core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java +1 −1 Original line number Diff line number Diff line Loading @@ -167,7 +167,7 @@ public class BatteryUsageStatsRule implements TestRule { } 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( Loading Loading
core/java/android/os/BatteryStats.java +10 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static android.os.BatteryStatsManager.NUM_WIFI_STATES; 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; Loading Loading @@ -2622,6 +2623,15 @@ public abstract class BatteryStats implements Parcelable { */ 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"), Loading
core/java/com/android/internal/os/BatteryStatsImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -6951,7 +6951,8 @@ public class BatteryStatsImpl extends BatteryStats { /** * Returns the names of custom power components. */ public @NonNull String[] getCustomPowerComponentNames() { @Override public @NonNull String[] getCustomEnergyConsumerNames() { if (mGlobalMeasuredEnergyStats == null) { return new String[0]; } Loading
core/java/com/android/internal/os/BatteryUsageStatsProvider.java +32 −9 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.hardware.SensorManager; import android.os.BatteryStats; import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; import android.os.SystemClock; import android.os.UidBatteryConsumer; import android.util.SparseArray; Loading @@ -36,12 +37,12 @@ import java.util.Map; */ 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); Loading Loading @@ -97,7 +98,7 @@ public class BatteryUsageStatsProvider { allowableStatsAge = Math.min(allowableStatsAge, query.getMaxStatsAge()); } return mStats.mClocks.elapsedRealtime() - lastUpdateTimeStampMs > allowableStatsAge; return elapsedRealtime() - lastUpdateTimeStampMs > allowableStatsAge; } /** Loading @@ -120,10 +121,10 @@ public class BatteryUsageStatsProvider { */ @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; Loading Loading @@ -154,16 +155,22 @@ public class BatteryUsageStatsProvider { 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(); Loading Loading @@ -199,4 +206,20 @@ public class BatteryUsageStatsProvider { 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(); } } }
core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java +1 −1 Original line number Diff line number Diff line Loading @@ -167,7 +167,7 @@ public class BatteryUsageStatsRule implements TestRule { } 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( Loading