From c86b4777e003d292f81b3b44c89064b08270aebc Mon Sep 17 00:00:00 2001 From: Adam Bookatz Date: Tue, 25 May 2021 10:27:29 -0700 Subject: [PATCH] BatteryUsageStats - use bus end time Now that BUS contains an end time and a duration, use those in the atom instead of estimating them from the clock time that the request was made. Bug: 187223764 Test: atest BatteryUsageStatsProtoTests Change-Id: Ie69d42bfd19c3a0055e96a25ac33c16c0f7d1a3f --- core/java/android/os/BatteryUsageStats.java | 22 ++++++------------- .../os/BatteryUsageStatsPulledTest.java | 7 +++--- .../server/am/BatteryStatsService.java | 4 +--- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/core/java/android/os/BatteryUsageStats.java b/core/java/android/os/BatteryUsageStats.java index 370052d47d169..f2857ceb59d7b 100644 --- a/core/java/android/os/BatteryUsageStats.java +++ b/core/java/android/os/BatteryUsageStats.java @@ -368,27 +368,19 @@ public final class BatteryUsageStats implements Parcelable { }; /** Returns a proto (as used for atoms.proto) corresponding to this BatteryUsageStats. */ - public byte[] getStatsProto(long sessionEndTimestampMs) { - - final long sessionStartMillis = getStatsStartTimestamp(); - // TODO(b/187223764): Use the getStatsEndTimestamp() instead, once that is added. - final long sessionEndMillis = sessionEndTimestampMs; - final long sessionDurationMillis = sessionEndTimestampMs - getStatsStartTimestamp(); - + public byte[] getStatsProto() { final BatteryConsumer deviceBatteryConsumer = getAggregateBatteryConsumer( AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE); - final int sessionDischargePercentage = getDischargePercentage(); - final ProtoOutputStream proto = new ProtoOutputStream(); - proto.write(BatteryUsageStatsAtomsProto.SESSION_START_MILLIS, sessionStartMillis); - proto.write(BatteryUsageStatsAtomsProto.SESSION_END_MILLIS, sessionEndMillis); - proto.write(BatteryUsageStatsAtomsProto.SESSION_DURATION_MILLIS, sessionDurationMillis); + proto.write(BatteryUsageStatsAtomsProto.SESSION_START_MILLIS, getStatsStartTimestamp()); + proto.write(BatteryUsageStatsAtomsProto.SESSION_END_MILLIS, getStatsEndTimestamp()); + proto.write(BatteryUsageStatsAtomsProto.SESSION_DURATION_MILLIS, getStatsDuration()); deviceBatteryConsumer.writeStatsProto(proto, BatteryUsageStatsAtomsProto.DEVICE_BATTERY_CONSUMER); writeUidBatteryConsumersProto(proto); proto.write(BatteryUsageStatsAtomsProto.SESSION_DISCHARGE_PERCENTAGE, - sessionDischargePercentage); + getDischargePercentage()); return proto.getBytes(); } @@ -399,8 +391,8 @@ public final class BatteryUsageStats implements Parcelable { private void writeUidBatteryConsumersProto(ProtoOutputStream proto) { final List consumers = getUidBatteryConsumers(); - // TODO: Sort the list by power consumption. If during the for, proto.getRawSize() > 45kb, - // truncate the remainder of the list. + // TODO(b/189225426): Sort the list by power consumption. If during the for, + // proto.getRawSize() > 45kb, truncate the remainder of the list. final int size = consumers.size(); for (int i = 0; i < size; i++) { final UidBatteryConsumer consumer = consumers.get(i); diff --git a/core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java b/core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java index bee0a0bf1fd6c..333eebb86d4c7 100644 --- a/core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java +++ b/core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java @@ -48,9 +48,8 @@ public class BatteryUsageStatsPulledTest { @Test public void testGetStatsProto() { - final long sessionEndTimestampMs = 1050; final BatteryUsageStats bus = buildBatteryUsageStats(); - final byte[] bytes = bus.getStatsProto(sessionEndTimestampMs); + final byte[] bytes = bus.getStatsProto(); BatteryUsageStatsAtomsProto proto; try { proto = BatteryUsageStatsAtomsProto.parseFrom(bytes); @@ -60,9 +59,9 @@ public class BatteryUsageStatsPulledTest { } assertEquals(bus.getStatsStartTimestamp(), proto.sessionStartMillis); - assertEquals(sessionEndTimestampMs, proto.sessionEndMillis); + assertEquals(bus.getStatsEndTimestamp(), proto.sessionEndMillis); assertEquals( - sessionEndTimestampMs - bus.getStatsStartTimestamp(), + bus.getStatsEndTimestamp() - bus.getStatsStartTimestamp(), proto.sessionDurationMillis); assertEquals(bus.getDischargePercentage(), proto.sessionDischargePercentage); diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 6cb374a84ad0e..4e6e91ac7b5d3 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -771,9 +771,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub default: throw new UnsupportedOperationException("Unknown tagId=" + atomTag); } - // TODO(b/187223764): busTime won't be needed once end_session is a field in BUS. - final long busTime = System.currentTimeMillis(); - final byte[] statsProto = bus.getStatsProto(busTime); + final byte[] statsProto = bus.getStatsProto(); data.add(FrameworkStatsLog.buildStatsEvent(atomTag, statsProto));