Change the method to get foreground time.

This cl changes it to:
foregroundTime = MIN(topTime, foregroundActivityTime);

Bug: 62884954
Test: RunSettingsRoboTests
Change-Id: I236c18b19c4f06c5a6d018bc06ffb9862af51de2
This commit is contained in:
jackqdyulei
2017-06-22 10:24:27 -07:00
parent f6e125b46d
commit 3d93fc16f4
2 changed files with 22 additions and 13 deletions

View File

@@ -45,6 +45,7 @@ import java.util.List;
*/ */
public class BatteryUtils { public class BatteryUtils {
public static final int UID_NULL = -1; public static final int UID_NULL = -1;
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@IntDef({StatusType.FOREGROUND, @IntDef({StatusType.FOREGROUND,
StatusType.BACKGROUND, StatusType.BACKGROUND,
@@ -171,7 +172,9 @@ public class BatteryUtils {
for (int i = 0, size = sippers.size(); i < size; i++) { for (int i = 0, size = sippers.size(); i < size; i++) {
final BatteryStats.Uid uid = sippers.get(i).uidObj; final BatteryStats.Uid uid = sippers.get(i).uidObj;
if (uid != null) { if (uid != null) {
final long timeMs = getForegroundActivityTotalTimeMs(uid, rawRealtimeMs); final long timeMs = Math.min(getForegroundActivityTotalTimeMs(uid, rawRealtimeMs),
getProcessTimeMs(StatusType.FOREGROUND, uid,
BatteryStats.STATS_SINCE_CHARGED));
activityTimeArray.put(uid.getUid(), timeMs); activityTimeArray.put(uid.getUid(), timeMs);
totalActivityTimeMs += timeMs; totalActivityTimeMs += timeMs;
} }
@@ -248,7 +251,6 @@ public class BatteryUtils {
* @return the package name. If there are multiple packages related to * @return the package name. If there are multiple packages related to
* given id, return the first one. Or return null if there are no known * given id, return the first one. Or return null if there are no known
* packages with the given id * packages with the given id
*
* @see PackageManager#getPackagesForUid(int) * @see PackageManager#getPackagesForUid(int)
*/ */
public String getPackageName(int uid) { public String getPackageName(int uid) {

View File

@@ -69,8 +69,8 @@ public class BatteryUtilsTest {
private static final long TIME_STATE_TOP_SLEEPING = 2500 * UNIT; private static final long TIME_STATE_TOP_SLEEPING = 2500 * UNIT;
private static final long TIME_STATE_FOREGROUND = 3000 * UNIT; private static final long TIME_STATE_FOREGROUND = 3000 * UNIT;
private static final long TIME_STATE_BACKGROUND = 6000 * UNIT; private static final long TIME_STATE_BACKGROUND = 6000 * UNIT;
private static final long TIME_FOREGROUND_ACTIVITY_ZERO = 0; private static final long TIME_FOREGROUND_ZERO = 0;
private static final long TIME_FOREGROUND_ACTIVITY = 100 * DateUtils.MINUTE_IN_MILLIS; private static final long TIME_FOREGROUND = 100 * DateUtils.MINUTE_IN_MILLIS;
private static final long TIME_SINCE_LAST_FULL_CHARGE_MS = 120 * 60 * 1000; private static final long TIME_SINCE_LAST_FULL_CHARGE_MS = 120 * 60 * 1000;
private static final long TIME_SINCE_LAST_FULL_CHARGE_US = private static final long TIME_SINCE_LAST_FULL_CHARGE_US =
TIME_SINCE_LAST_FULL_CHARGE_MS * 1000; TIME_SINCE_LAST_FULL_CHARGE_MS * 1000;
@@ -294,24 +294,29 @@ public class BatteryUtilsTest {
@Test @Test
public void testSmearScreenBatterySipper() { public void testSmearScreenBatterySipper() {
final BatterySipper sipperNull = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY_ZERO, final BatterySipper sipperNull = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO,
BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */); TIME_FOREGROUND_ZERO + 500, BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */);
final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY_ZERO, final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO + 100,
BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */); TIME_FOREGROUND_ZERO, BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */);
final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND_ACTIVITY, final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND,
BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */); TIME_FOREGROUND + 200, BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */);
final BatterySipper sipperFg2 = createTestSmearBatterySipper(TIME_FOREGROUND + 600,
TIME_FOREGROUND, BATTERY_APP_USAGE, 3 /* uid */, false /* isUidNull */);
final List<BatterySipper> sippers = new ArrayList<>(); final List<BatterySipper> sippers = new ArrayList<>();
sippers.add(sipperNull); sippers.add(sipperNull);
sippers.add(sipperBg); sippers.add(sipperBg);
sippers.add(sipperFg); sippers.add(sipperFg);
sippers.add(sipperFg2);
mBatteryUtils.smearScreenBatterySipper(sippers, mScreenBatterySipper); mBatteryUtils.smearScreenBatterySipper(sippers, mScreenBatterySipper);
assertThat(sipperNull.totalPowerMah).isWithin(PRECISION).of(BATTERY_APP_USAGE); assertThat(sipperNull.totalPowerMah).isWithin(PRECISION).of(BATTERY_APP_USAGE);
assertThat(sipperBg.totalPowerMah).isWithin(PRECISION).of(BATTERY_APP_USAGE); assertThat(sipperBg.totalPowerMah).isWithin(PRECISION).of(BATTERY_APP_USAGE);
assertThat(sipperFg.totalPowerMah).isWithin(PRECISION).of( assertThat(sipperFg.totalPowerMah).isWithin(PRECISION).of(
BATTERY_APP_USAGE + BATTERY_SCREEN_USAGE); BATTERY_APP_USAGE + BATTERY_SCREEN_USAGE / 2);
assertThat(sipperFg2.totalPowerMah).isWithin(PRECISION).of(
BATTERY_APP_USAGE + BATTERY_SCREEN_USAGE / 2);
} }
@Test @Test
@@ -353,8 +358,8 @@ public class BatteryUtilsTest {
.isEqualTo(R.string.battery_abnormal_location_summary); .isEqualTo(R.string.battery_abnormal_location_summary);
} }
private BatterySipper createTestSmearBatterySipper(long activityTime, double totalPowerMah, private BatterySipper createTestSmearBatterySipper(long activityTime, long topTime,
int uidCode, boolean isUidNull) { double totalPowerMah, int uidCode, boolean isUidNull) {
final BatterySipper sipper = mock(BatterySipper.class); final BatterySipper sipper = mock(BatterySipper.class);
sipper.drainType = BatterySipper.DrainType.APP; sipper.drainType = BatterySipper.DrainType.APP;
sipper.totalPowerMah = totalPowerMah; sipper.totalPowerMah = totalPowerMah;
@@ -363,6 +368,8 @@ public class BatteryUtilsTest {
final BatteryStats.Uid uid = mock(BatteryStats.Uid.class, RETURNS_DEEP_STUBS); final BatteryStats.Uid uid = mock(BatteryStats.Uid.class, RETURNS_DEEP_STUBS);
doReturn(activityTime).when(mBatteryUtils).getForegroundActivityTotalTimeMs(eq(uid), doReturn(activityTime).when(mBatteryUtils).getForegroundActivityTotalTimeMs(eq(uid),
anyLong()); anyLong());
doReturn(topTime).when(mBatteryUtils).getProcessTimeMs(
eq(BatteryUtils.StatusType.FOREGROUND), eq(uid), anyInt());
doReturn(uidCode).when(uid).getUid(); doReturn(uidCode).when(uid).getUid();
sipper.uidObj = uid; sipper.uidObj = uid;
} }