From 0c7e50cb4331782aa3fa514c004cc6d0a31ee61d Mon Sep 17 00:00:00 2001 From: ykhung Date: Mon, 3 May 2021 15:46:19 +0800 Subject: [PATCH] Add new field for data interpolation usage reference the decription in cl/371645876 Bug: 184807417 Test: make SettingsRoboTests Change-Id: I944399dc205cad9b96fe22e82e4c651b4ccc4e37 --- .../settings/fuelgauge/BatteryHistEntry.java | 9 ++- .../settings/fuelgauge/ConvertUtils.java | 43 ++++++----- .../fuelgauge/BatteryHistEntryTest.java | 13 ++-- .../settings/fuelgauge/ConvertUtilsTest.java | 72 +++++++++++-------- 4 files changed, 83 insertions(+), 54 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryHistEntry.java b/src/com/android/settings/fuelgauge/BatteryHistEntry.java index be8a845eebd..f5620000baf 100644 --- a/src/com/android/settings/fuelgauge/BatteryHistEntry.java +++ b/src/com/android/settings/fuelgauge/BatteryHistEntry.java @@ -30,6 +30,8 @@ public class BatteryHistEntry { public static final String KEY_APP_LABEL = "appLabel"; public static final String KEY_PACKAGE_NAME = "packageName"; public static final String KEY_IS_HIDDEN = "isHidden"; + // Device booting elapsed time from SystemClock.elapsedRealtime(). + public static final String KEY_BOOT_TIMESTAMP = "bootTimestamp"; public static final String KEY_TIMESTAMP = "timestamp"; public static final String KEY_ZONE_ID = "zoneId"; public static final String KEY_TOTAL_POWER = "totalPower"; @@ -50,6 +52,7 @@ public class BatteryHistEntry { // Whether the data is represented as system component or not? public final boolean mIsHidden; // Records the timestamp relative information. + public final long mBootTimestamp; public final long mTimestamp; public final String mZoneId; // Records the battery usage relative information. @@ -74,6 +77,7 @@ public class BatteryHistEntry { mAppLabel = getString(values, KEY_APP_LABEL); mPackageName = getString(values, KEY_PACKAGE_NAME); mIsHidden = getBoolean(values, KEY_IS_HIDDEN); + mBootTimestamp = getLong(values, KEY_BOOT_TIMESTAMP); mTimestamp = getLong(values, KEY_TIMESTAMP); mZoneId = getString(values, KEY_ZONE_ID); mTotalPower = getDouble(values, KEY_TOTAL_POWER); @@ -94,6 +98,7 @@ public class BatteryHistEntry { mAppLabel = getString(cursor, KEY_APP_LABEL); mPackageName = getString(cursor, KEY_PACKAGE_NAME); mIsHidden = getBoolean(cursor, KEY_IS_HIDDEN); + mBootTimestamp = getLong(cursor, KEY_BOOT_TIMESTAMP); mTimestamp = getLong(cursor, KEY_TIMESTAMP); mZoneId = getString(cursor, KEY_ZONE_ID); mTotalPower = getDouble(cursor, KEY_TOTAL_POWER); @@ -153,7 +158,8 @@ public class BatteryHistEntry { .append("\nBatteryHistEntry{") .append(String.format("\n\tpackage=%s|label=%s|uid=%d|userId=%d|isHidden=%b", mPackageName, mAppLabel, mUid, mUserId, mIsHidden)) - .append(String.format("\n\ttimestamp=%s|zoneId=%s", recordAtDateTime, mZoneId)) + .append(String.format("\n\ttimestamp=%s|zoneId=%s|bootTimestamp=%d", + recordAtDateTime, mZoneId, Duration.ofMillis(mBootTimestamp).getSeconds())) .append(String.format("\n\tusage=%f|total=%f|consume=%f|elapsedTime=%d|%d", mPercentOfTotal, mTotalPower, mConsumePower, Duration.ofMillis(mForegroundUsageTimeInMs).getSeconds(), @@ -249,5 +255,4 @@ public class BatteryHistEntry { mIsValidEntry = false; return false; } - } diff --git a/src/com/android/settings/fuelgauge/ConvertUtils.java b/src/com/android/settings/fuelgauge/ConvertUtils.java index 7c3ebef52e3..1d332a20e72 100644 --- a/src/com/android/settings/fuelgauge/ConvertUtils.java +++ b/src/com/android/settings/fuelgauge/ConvertUtils.java @@ -107,33 +107,40 @@ public final class ConvertUtils { int batteryLevel, int batteryStatus, int batteryHealth, + long bootTimestamp, long timestamp) { final ContentValues values = new ContentValues(); if (entry != null && batteryUsageStats != null) { - values.put("uid", Long.valueOf(entry.getUid())); - values.put("userId", + values.put(BatteryHistEntry.KEY_UID, Long.valueOf(entry.getUid())); + values.put(BatteryHistEntry.KEY_USER_ID, Long.valueOf(UserHandle.getUserId(entry.getUid()))); - values.put("appLabel", entry.getLabel()); - values.put("packageName", entry.getDefaultPackageName()); - values.put("isHidden", Boolean.valueOf(entry.isHidden())); - values.put("totalPower", + values.put(BatteryHistEntry.KEY_APP_LABEL, entry.getLabel()); + values.put(BatteryHistEntry.KEY_PACKAGE_NAME, + entry.getDefaultPackageName()); + values.put(BatteryHistEntry.KEY_IS_HIDDEN, Boolean.valueOf(entry.isHidden())); + values.put(BatteryHistEntry.KEY_TOTAL_POWER, Double.valueOf(batteryUsageStats.getConsumedPower())); - values.put("consumePower", Double.valueOf(entry.getConsumedPower())); - values.put("percentOfTotal", Double.valueOf(entry.percent)); - values.put("foregroundUsageTimeInMs", + values.put(BatteryHistEntry.KEY_CONSUME_POWER, + Double.valueOf(entry.getConsumedPower())); + values.put(BatteryHistEntry.KEY_PERCENT_OF_TOTAL, + Double.valueOf(entry.percent)); + values.put(BatteryHistEntry.KEY_FOREGROUND_USAGE_TIME, Long.valueOf(entry.getTimeInForegroundMs())); - values.put("backgroundUsageTimeInMs", + values.put(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME, Long.valueOf(entry.getTimeInBackgroundMs())); - values.put("drainType", getDrainType(entry.getBatteryConsumer())); - values.put("consumerType", getConsumerType(entry.getBatteryConsumer())); + values.put(BatteryHistEntry.KEY_DRAIN_TYPE, + getDrainType(entry.getBatteryConsumer())); + values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, + getConsumerType(entry.getBatteryConsumer())); } else { - values.put("packageName", FAKE_PACKAGE_NAME); + values.put(BatteryHistEntry.KEY_PACKAGE_NAME, FAKE_PACKAGE_NAME); } - values.put("timestamp", Long.valueOf(timestamp)); - values.put("zoneId", TimeZone.getDefault().getID()); - values.put("batteryLevel", Integer.valueOf(batteryLevel)); - values.put("batteryStatus", Integer.valueOf(batteryStatus)); - values.put("batteryHealth", Integer.valueOf(batteryHealth)); + values.put(BatteryHistEntry.KEY_BOOT_TIMESTAMP, Long.valueOf(bootTimestamp)); + values.put(BatteryHistEntry.KEY_TIMESTAMP, Long.valueOf(timestamp)); + values.put(BatteryHistEntry.KEY_ZONE_ID, TimeZone.getDefault().getID()); + values.put(BatteryHistEntry.KEY_BATTERY_LEVEL, Integer.valueOf(batteryLevel)); + values.put(BatteryHistEntry.KEY_BATTERY_STATUS, Integer.valueOf(batteryStatus)); + values.put(BatteryHistEntry.KEY_BATTERY_HEALTH, Integer.valueOf(batteryHealth)); return values; } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java index e4a86b107d6..9a196cb1822 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java @@ -75,6 +75,7 @@ public final class BatteryHistEntryTest { /*batteryLevel=*/ 12, /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL, /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD, + /*bootTimestamp=*/ 101L, /*timestamp=*/ 10001L); assertBatteryHistEntry( @@ -98,6 +99,7 @@ public final class BatteryHistEntryTest { BatteryHistEntry.KEY_APP_LABEL, BatteryHistEntry.KEY_PACKAGE_NAME, BatteryHistEntry.KEY_IS_HIDDEN, + BatteryHistEntry.KEY_BOOT_TIMESTAMP, BatteryHistEntry.KEY_TIMESTAMP, BatteryHistEntry.KEY_ZONE_ID, BatteryHistEntry.KEY_TOTAL_POWER, @@ -117,6 +119,7 @@ public final class BatteryHistEntryTest { "Settings", "com.google.android.settings.battery", Integer.valueOf(1), + Long.valueOf(101l), Long.valueOf(10001L), TimeZone.getDefault().getID(), Double.valueOf(5.1), @@ -141,7 +144,7 @@ public final class BatteryHistEntryTest { public void testGetKey_consumerUidType_returnExpectedString() { final ContentValues values = getContentValuesWithType( ConvertUtils.CONSUMER_TYPE_UID_BATTERY); - values.put("uid", 3); + values.put(BatteryHistEntry.KEY_UID, 3); final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values); assertThat(batteryHistEntry.getKey()).isEqualTo("3"); @@ -151,7 +154,7 @@ public final class BatteryHistEntryTest { public void testGetKey_consumerUserType_returnExpectedString() { final ContentValues values = getContentValuesWithType( ConvertUtils.CONSUMER_TYPE_USER_BATTERY); - values.put("userId", 2); + values.put(BatteryHistEntry.KEY_USER_ID, 2); final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values); assertThat(batteryHistEntry.getKey()).isEqualTo("U|2"); @@ -161,7 +164,7 @@ public final class BatteryHistEntryTest { public void testGetKey_consumerSystemType_returnExpectedString() { final ContentValues values = getContentValuesWithType( ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); - values.put("drainType", 1); + values.put(BatteryHistEntry.KEY_DRAIN_TYPE, 1); final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values); assertThat(batteryHistEntry.getKey()).isEqualTo("S|1"); @@ -203,7 +206,8 @@ public final class BatteryHistEntryTest { private static ContentValues getContentValuesWithType(int consumerType) { final ContentValues values = new ContentValues(); - values.put("consumerType", Integer.valueOf(consumerType)); + values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, + Integer.valueOf(consumerType)); return values; } @@ -216,6 +220,7 @@ public final class BatteryHistEntryTest { assertThat(entry.mPackageName) .isEqualTo("com.google.android.settings.battery"); assertThat(entry.mIsHidden).isTrue(); + assertThat(entry.mBootTimestamp).isEqualTo(101L); assertThat(entry.mTimestamp).isEqualTo(10001L); assertThat(entry.mZoneId).isEqualTo(TimeZone.getDefault().getID()); assertThat(entry.mTotalPower).isEqualTo(5.1); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java index c9c9f3b4a57..c993d6ff181 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java @@ -95,30 +95,36 @@ public final class ConvertUtilsTest { /*batteryLevel=*/ 12, /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL, /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD, + /*bootTimestamp=*/ 101L, /*timestamp=*/ 10001L); - assertThat(values.getAsLong("uid")).isEqualTo(1001L); - assertThat(values.getAsLong("userId")) + assertThat(values.getAsLong(BatteryHistEntry.KEY_UID)).isEqualTo(1001L); + assertThat(values.getAsLong(BatteryHistEntry.KEY_USER_ID)) .isEqualTo(UserHandle.getUserId(1001)); - assertThat(values.getAsString("appLabel")).isEqualTo("Settings"); - assertThat(values.getAsString("packageName")) + assertThat(values.getAsString(BatteryHistEntry.KEY_APP_LABEL)) + .isEqualTo("Settings"); + assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME)) .isEqualTo("com.google.android.settings.battery"); - assertThat(values.getAsBoolean("isHidden")).isTrue(); - assertThat(values.getAsLong("timestamp")).isEqualTo(10001L); - assertThat(values.getAsString("zoneId")) + assertThat(values.getAsBoolean(BatteryHistEntry.KEY_IS_HIDDEN)).isTrue(); + assertThat(values.getAsLong(BatteryHistEntry.KEY_BOOT_TIMESTAMP)) + .isEqualTo(101L); + assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP)).isEqualTo(10001L); + assertThat(values.getAsString(BatteryHistEntry.KEY_ZONE_ID)) .isEqualTo(TimeZone.getDefault().getID()); - assertThat(values.getAsDouble("totalPower")).isEqualTo(5.1); - assertThat(values.getAsDouble("consumePower")).isEqualTo(1.1); - assertThat(values.getAsDouble("percentOfTotal")).isEqualTo(0.3); - assertThat(values.getAsLong("foregroundUsageTimeInMs")).isEqualTo(1234L); - assertThat(values.getAsLong("backgroundUsageTimeInMs")).isEqualTo(5689L); - assertThat(values.getAsInteger("drainType")).isEqualTo(expectedType); - assertThat(values.getAsInteger("consumerType")) + assertThat(values.getAsDouble(BatteryHistEntry.KEY_TOTAL_POWER)).isEqualTo(5.1); + assertThat(values.getAsDouble(BatteryHistEntry.KEY_CONSUME_POWER)).isEqualTo(1.1); + assertThat(values.getAsDouble(BatteryHistEntry.KEY_PERCENT_OF_TOTAL)).isEqualTo(0.3); + assertThat(values.getAsLong(BatteryHistEntry.KEY_FOREGROUND_USAGE_TIME)) + .isEqualTo(1234L); + assertThat(values.getAsLong(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME)) + .isEqualTo(5689L); + assertThat(values.getAsInteger(BatteryHistEntry.KEY_DRAIN_TYPE)).isEqualTo(expectedType); + assertThat(values.getAsInteger(BatteryHistEntry.KEY_CONSUMER_TYPE)) .isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); - assertThat(values.getAsInteger("batteryLevel")).isEqualTo(12); - assertThat(values.getAsInteger("batteryStatus")) + assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_LEVEL)).isEqualTo(12); + assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_STATUS)) .isEqualTo(BatteryManager.BATTERY_STATUS_FULL); - assertThat(values.getAsInteger("batteryHealth")) + assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_HEALTH)) .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD); } @@ -131,17 +137,21 @@ public final class ConvertUtilsTest { /*batteryLevel=*/ 12, /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL, /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD, + /*bootTimestamp=*/ 101L, /*timestamp=*/ 10001L); - assertThat(values.getAsLong("timestamp")).isEqualTo(10001L); - assertThat(values.getAsString("zoneId")) + assertThat(values.getAsLong(BatteryHistEntry.KEY_BOOT_TIMESTAMP)) + .isEqualTo(101L); + assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP)) + .isEqualTo(10001L); + assertThat(values.getAsString(BatteryHistEntry.KEY_ZONE_ID)) .isEqualTo(TimeZone.getDefault().getID()); - assertThat(values.getAsInteger("batteryLevel")).isEqualTo(12); - assertThat(values.getAsInteger("batteryStatus")) + assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_LEVEL)).isEqualTo(12); + assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_STATUS)) .isEqualTo(BatteryManager.BATTERY_STATUS_FULL); - assertThat(values.getAsInteger("batteryHealth")) + assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_HEALTH)) .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD); - assertThat(values.getAsString("packageName")) + assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME)) .isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME); } @@ -287,14 +297,16 @@ public final class ConvertUtilsTest { long uid, long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) { // Only insert required fields. final ContentValues values = new ContentValues(); - values.put("packageName", packageName); - values.put("appLabel", appLabel); - values.put("uid", Long.valueOf(uid)); - values.put("consumerType", + values.put(BatteryHistEntry.KEY_PACKAGE_NAME, packageName); + values.put(BatteryHistEntry.KEY_APP_LABEL, appLabel); + values.put(BatteryHistEntry.KEY_UID, Long.valueOf(uid)); + values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf(ConvertUtils.CONSUMER_TYPE_UID_BATTERY)); - values.put("consumePower", consumePower); - values.put("foregroundUsageTimeInMs", Long.valueOf(foregroundUsageTimeInMs)); - values.put("backgroundUsageTimeInMs", Long.valueOf(backgroundUsageTimeInMs)); + values.put(BatteryHistEntry.KEY_CONSUME_POWER, consumePower); + values.put(BatteryHistEntry.KEY_FOREGROUND_USAGE_TIME, + Long.valueOf(foregroundUsageTimeInMs)); + values.put(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME, + Long.valueOf(backgroundUsageTimeInMs)); return new BatteryHistEntry(values); }