diff options
3 files changed, 30 insertions, 19 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index d631f689b89b..01a89017ab6c 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -5296,8 +5296,11 @@ public abstract class BatteryStats implements Parcelable { } if (bs.customMeasuredPowerMah != null) { for (int idx = 0; idx < bs.customMeasuredPowerMah.length; idx++) { - pw.print(" custom[" + idx + "]="); - printmAh(pw, bs.customMeasuredPowerMah[idx]); + final double customPowerMah = bs.customMeasuredPowerMah[idx]; + if (customPowerMah != 0) { + pw.print(" custom[" + idx + "]="); + printmAh(pw, customPowerMah); + } } } pw.print(" )"); diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index cc6dd7b6679a..520dcd5e251d 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -1001,8 +1001,12 @@ public class BatteryStatsImpl extends BatteryStats { int mWifiRadioPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW; /** - * Accumulated energy consumption, that is not attributed to individual uids, of various - * consumers while on battery. + * Accumulated global (generally, device-wide total) energy consumption of various consumers + * while on battery. + * Its '<b>custom</b> energy buckets' correspond to the + * {@link android.hardware.power.stats.EnergyConsumer.ordinal}s of (custom) energy consumer + * type {@link android.hardware.power.stats.EnergyConsumerType#OTHER}). + * * If energy consumer data is completely unavailable this will be null. */ @GuardedBy("this") @@ -7532,9 +7536,16 @@ public class BatteryStatsImpl extends BatteryStats { */ private final ArraySet<BinderCallStats> mBinderCallStats = new ArraySet<>(); - /** Measured energies attributed to this uid while on battery. */ - // We do not use a SparseArray<LongSamplingCounters> since it would cause lots of - // unnecessary timebase references, and we're just going to use on-battery anyway... + /** + * Measured energies attributed to this uid while on battery. + * Its '<b>custom</b> energy buckets' correspond to the + * {@link android.hardware.power.stats.EnergyConsumer.ordinal}s of (custom) energy consumer + * type {@link android.hardware.power.stats.EnergyConsumerType#OTHER}). + * + * Will be null if energy consumer data is completely unavailable (in which case + * {@link #mGlobalMeasuredEnergyStats} will also be null) or if the power usage by this uid + * is 0 for every bucket. + */ private MeasuredEnergyStats mUidMeasuredEnergyStats; /** @@ -12518,11 +12529,8 @@ public class BatteryStatsImpl extends BatteryStats { final int uidInt = mapUid(uidEnergies.keyAt(i)); final long uidEnergyUJ = uidEnergies.valueAt(i); if (uidEnergyUJ == 0) continue; - // TODO: Worry about uids not in BSI currently, including uninstalled uids 'coming back' - // Specifically: What if the uid had been removed? We'll re-create it now. - // And if we instead use getAvailableUidStatsLocked() and chec for null, then we might - // not create a Uid even when we should be (say, the app's first event, somehow, was to - // use GPU). I guess that CPU/kernel data might already have this problem? + // TODO(b/180030409): Worry about dead Uids (no longer in BSI) being revived by this, + // or converse problem of not creating a new Uid if its first blame is recorded here. final Uid uidObj = getUidStatsLocked(uidInt); uidObj.addEnergyToCustomBucketLocked(uidEnergyUJ, customEnergyBucket, true); } @@ -14524,7 +14532,7 @@ public class BatteryStatsImpl extends BatteryStats { return; } - dumpMeasuredEnergyStatsLocked(pw, "non-uid usage", mGlobalMeasuredEnergyStats); + dumpMeasuredEnergyStatsLocked(pw, "global usage", mGlobalMeasuredEnergyStats); int size = mUidStats.size(); for (int i = 0; i < size; i++) { diff --git a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java index b9943897a486..52bb55f12d79 100644 --- a/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java +++ b/services/core/java/com/android/server/am/BatteryExternalStatsWorker.java @@ -149,7 +149,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { * Maps an {@link EnergyConsumerType} to it's corresponding {@link EnergyConsumer#id}s, * unless it is of {@link EnergyConsumer#type}=={@link EnergyConsumerType#OTHER} */ - // TODO: Hook this up (it isn't used yet) + // TODO(b/180029015): Hook this up (it isn't used yet) @GuardedBy("mWorkerLock") private @Nullable SparseArray<int[]> mEnergyConsumerTypeToIdMap = null; @@ -818,14 +818,14 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { if (energyConsumerIds.isEmpty()) { return null; } - // TODO: Query *specific* subsystems from HAL based on energyConsumerIds.toArray() + // TODO(b/180029015): Query specific subsystems from HAL based on energyConsumerIds.toArray return getEnergyConsumptionData(); } @GuardedBy("mWorkerLock") private void addEnergyConsumerIdLocked( List<Integer> energyConsumerIds, @EnergyConsumerType int type) { - final int consumerId = 0; // TODO: Use mEnergyConsumerTypeToIdMap to get this + final int consumerId = 0; // TODO(b/180029015): Use mEnergyConsumerTypeToIdMap to get this energyConsumerIds.add(consumerId); } @@ -840,7 +840,7 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { return null; } - // TODO: Initialize typeToIds + // TODO(b/180029015): Initialize typeToIds // Maps type -> {ids} (1:n map, since multiple ids might have the same type) // final SparseArray<SparseIntArray> typeToIds = new SparseArray<>(); @@ -862,9 +862,9 @@ class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStatsSync { } } idToConsumer.put(consumer.id, consumer); - // TODO: Also populate typeToIds map + // TODO(b/180029015): Also populate typeToIds map } - // TODO: Store typeToIds in mEnergyConsumerTypeToIdMap. + // TODO(b/180029015): Store typeToIds in mEnergyConsumerTypeToIdMap. return idToConsumer; } } |