Loading src/com/android/settings/fuelgauge/BatteryUtils.java +8 −8 Original line number Diff line number Diff line Loading @@ -122,7 +122,10 @@ public class BatteryUtils { } Log.v(TAG, "foreground time(us): " + timeUs); return convertUsToMs(timeUs); // Return the min value of STATE_TOP time and foreground activity time, since both of these // time have some errors. return convertUsToMs( Math.min(timeUs, getForegroundActivityTotalTimeUs(uid, rawRealTimeUs))); } /** Loading Loading @@ -167,15 +170,13 @@ public class BatteryUtils { */ @VisibleForTesting void smearScreenBatterySipper(List<BatterySipper> sippers, BatterySipper screenSipper) { final long rawRealtimeMs = SystemClock.elapsedRealtime(); long totalActivityTimeMs = 0; final SparseLongArray activityTimeArray = new SparseLongArray(); for (int i = 0, size = sippers.size(); i < size; i++) { final BatteryStats.Uid uid = sippers.get(i).uidObj; if (uid != null) { final long timeMs = Math.min(getForegroundActivityTotalTimeMs(uid, rawRealtimeMs), getProcessTimeMs(StatusType.FOREGROUND, uid, BatteryStats.STATS_SINCE_CHARGED)); final long timeMs = getProcessTimeMs(StatusType.FOREGROUND, uid, BatteryStats.STATS_SINCE_CHARGED); activityTimeArray.put(uid.getUid(), timeMs); totalActivityTimeMs += timeMs; } Loading Loading @@ -332,11 +333,10 @@ public class BatteryUtils { } @VisibleForTesting long getForegroundActivityTotalTimeMs(BatteryStats.Uid uid, long rawRealtimeMs) { long getForegroundActivityTotalTimeUs(BatteryStats.Uid uid, long rawRealtimeUs) { final BatteryStats.Timer timer = uid.getForegroundActivityTimer(); if (timer != null) { return convertUsToMs(timer.getTotalTimeLocked(convertMsToUs(rawRealtimeMs), BatteryStats.STATS_SINCE_CHARGED)); return timer.getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED); } return 0; Loading tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,8 @@ public class AdvancedPowerUsageDetailTest { private LoaderManager mLoaderManager; @Mock private AnomalySummaryPreferenceController mAnomalySummaryPreferenceController; @Mock private BatteryStats.Timer mTimer; private Context mContext; private Preference mForegroundPreference; private Preference mBackgroundPreference; Loading Loading @@ -168,6 +170,8 @@ public class AdvancedPowerUsageDetailTest { eq(BatteryStats.Uid.PROCESS_STATE_BACKGROUND), anyLong(), anyInt()); doReturn(FOREGROUND_TIME_US).when(mUid).getProcessStateTime( eq(BatteryStats.Uid.PROCESS_STATE_TOP), anyLong(), anyInt()); doReturn(mTimer).when(mUid).getForegroundActivityTimer(); doReturn(FOREGROUND_TIME_US).when(mTimer).getTotalTimeLocked(anyLong(), anyInt()); ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper); mBatteryEntry.iconId = ICON_ID; mBatterySipper.uidObj = mUid; Loading tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java +17 −13 Original line number Diff line number Diff line Loading @@ -178,6 +178,9 @@ public class BatteryUtilsTest { @Test public void testGetProcessTimeMs_typeForeground_timeCorrect() { doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils).getForegroundActivityTotalTimeUs( eq(mUid), anyLong()); final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.FOREGROUND, mUid, BatteryStats.STATS_SINCE_CHARGED); Loading @@ -194,6 +197,9 @@ public class BatteryUtilsTest { @Test public void testGetProcessTimeMs_typeAll_timeCorrect() { doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils).getForegroundActivityTotalTimeUs( eq(mUid), anyLong()); final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, mUid, BatteryStats.STATS_SINCE_CHARGED); Loading Loading @@ -305,13 +311,13 @@ public class BatteryUtilsTest { @Test public void testSmearScreenBatterySipper() { final BatterySipper sipperNull = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO, TIME_FOREGROUND_ZERO + 500, BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */); final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO + 100, TIME_FOREGROUND_ZERO, BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */); BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */); final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO, BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */); final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND, 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 */); BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */); final BatterySipper sipperFg2 = createTestSmearBatterySipper(TIME_FOREGROUND, BATTERY_APP_USAGE, 3 /* uid */, false /* isUidNull */); final List<BatterySipper> sippers = new ArrayList<>(); sippers.add(sipperNull); Loading Loading @@ -370,16 +376,16 @@ public class BatteryUtilsTest { @Test public void testGetForegroundActivityTotalTimeMs_returnMilliseconds() { final long rawRealtimeMs = SystemClock.elapsedRealtime(); final long rawRealtimeUs = SystemClock.elapsedRealtime() * 1000; doReturn(mTimer).when(mUid).getForegroundActivityTimer(); doReturn(TIME_SINCE_LAST_FULL_CHARGE_US).when(mTimer) .getTotalTimeLocked(rawRealtimeMs * 1000, BatteryStats.STATS_SINCE_CHARGED); .getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED); assertThat(mBatteryUtils.getForegroundActivityTotalTimeMs(mUid, rawRealtimeMs)).isEqualTo( TIME_SINCE_LAST_FULL_CHARGE_MS); assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs)).isEqualTo( TIME_SINCE_LAST_FULL_CHARGE_US); } private BatterySipper createTestSmearBatterySipper(long activityTime, long topTime, private BatterySipper createTestSmearBatterySipper(long topTime, double totalPowerMah, int uidCode, boolean isUidNull) { final BatterySipper sipper = mock(BatterySipper.class); sipper.drainType = BatterySipper.DrainType.APP; Loading @@ -387,8 +393,6 @@ public class BatteryUtilsTest { doReturn(uidCode).when(sipper).getUid(); if (!isUidNull) { final BatteryStats.Uid uid = mock(BatteryStats.Uid.class, RETURNS_DEEP_STUBS); doReturn(activityTime).when(mBatteryUtils).getForegroundActivityTotalTimeMs(eq(uid), anyLong()); doReturn(topTime).when(mBatteryUtils).getProcessTimeMs( eq(BatteryUtils.StatusType.FOREGROUND), eq(uid), anyInt()); doReturn(uidCode).when(uid).getUid(); Loading Loading
src/com/android/settings/fuelgauge/BatteryUtils.java +8 −8 Original line number Diff line number Diff line Loading @@ -122,7 +122,10 @@ public class BatteryUtils { } Log.v(TAG, "foreground time(us): " + timeUs); return convertUsToMs(timeUs); // Return the min value of STATE_TOP time and foreground activity time, since both of these // time have some errors. return convertUsToMs( Math.min(timeUs, getForegroundActivityTotalTimeUs(uid, rawRealTimeUs))); } /** Loading Loading @@ -167,15 +170,13 @@ public class BatteryUtils { */ @VisibleForTesting void smearScreenBatterySipper(List<BatterySipper> sippers, BatterySipper screenSipper) { final long rawRealtimeMs = SystemClock.elapsedRealtime(); long totalActivityTimeMs = 0; final SparseLongArray activityTimeArray = new SparseLongArray(); for (int i = 0, size = sippers.size(); i < size; i++) { final BatteryStats.Uid uid = sippers.get(i).uidObj; if (uid != null) { final long timeMs = Math.min(getForegroundActivityTotalTimeMs(uid, rawRealtimeMs), getProcessTimeMs(StatusType.FOREGROUND, uid, BatteryStats.STATS_SINCE_CHARGED)); final long timeMs = getProcessTimeMs(StatusType.FOREGROUND, uid, BatteryStats.STATS_SINCE_CHARGED); activityTimeArray.put(uid.getUid(), timeMs); totalActivityTimeMs += timeMs; } Loading Loading @@ -332,11 +333,10 @@ public class BatteryUtils { } @VisibleForTesting long getForegroundActivityTotalTimeMs(BatteryStats.Uid uid, long rawRealtimeMs) { long getForegroundActivityTotalTimeUs(BatteryStats.Uid uid, long rawRealtimeUs) { final BatteryStats.Timer timer = uid.getForegroundActivityTimer(); if (timer != null) { return convertUsToMs(timer.getTotalTimeLocked(convertMsToUs(rawRealtimeMs), BatteryStats.STATS_SINCE_CHARGED)); return timer.getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED); } return 0; Loading
tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,8 @@ public class AdvancedPowerUsageDetailTest { private LoaderManager mLoaderManager; @Mock private AnomalySummaryPreferenceController mAnomalySummaryPreferenceController; @Mock private BatteryStats.Timer mTimer; private Context mContext; private Preference mForegroundPreference; private Preference mBackgroundPreference; Loading Loading @@ -168,6 +170,8 @@ public class AdvancedPowerUsageDetailTest { eq(BatteryStats.Uid.PROCESS_STATE_BACKGROUND), anyLong(), anyInt()); doReturn(FOREGROUND_TIME_US).when(mUid).getProcessStateTime( eq(BatteryStats.Uid.PROCESS_STATE_TOP), anyLong(), anyInt()); doReturn(mTimer).when(mUid).getForegroundActivityTimer(); doReturn(FOREGROUND_TIME_US).when(mTimer).getTotalTimeLocked(anyLong(), anyInt()); ReflectionHelpers.setField(mBatteryEntry, "sipper", mBatterySipper); mBatteryEntry.iconId = ICON_ID; mBatterySipper.uidObj = mUid; Loading
tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java +17 −13 Original line number Diff line number Diff line Loading @@ -178,6 +178,9 @@ public class BatteryUtilsTest { @Test public void testGetProcessTimeMs_typeForeground_timeCorrect() { doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils).getForegroundActivityTotalTimeUs( eq(mUid), anyLong()); final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.FOREGROUND, mUid, BatteryStats.STATS_SINCE_CHARGED); Loading @@ -194,6 +197,9 @@ public class BatteryUtilsTest { @Test public void testGetProcessTimeMs_typeAll_timeCorrect() { doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils).getForegroundActivityTotalTimeUs( eq(mUid), anyLong()); final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, mUid, BatteryStats.STATS_SINCE_CHARGED); Loading Loading @@ -305,13 +311,13 @@ public class BatteryUtilsTest { @Test public void testSmearScreenBatterySipper() { final BatterySipper sipperNull = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO, TIME_FOREGROUND_ZERO + 500, BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */); final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO + 100, TIME_FOREGROUND_ZERO, BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */); BATTERY_APP_USAGE, 0 /* uid */, true /* isUidNull */); final BatterySipper sipperBg = createTestSmearBatterySipper(TIME_FOREGROUND_ZERO, BATTERY_APP_USAGE, 1 /* uid */, false /* isUidNull */); final BatterySipper sipperFg = createTestSmearBatterySipper(TIME_FOREGROUND, 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 */); BATTERY_APP_USAGE, 2 /* uid */, false /* isUidNull */); final BatterySipper sipperFg2 = createTestSmearBatterySipper(TIME_FOREGROUND, BATTERY_APP_USAGE, 3 /* uid */, false /* isUidNull */); final List<BatterySipper> sippers = new ArrayList<>(); sippers.add(sipperNull); Loading Loading @@ -370,16 +376,16 @@ public class BatteryUtilsTest { @Test public void testGetForegroundActivityTotalTimeMs_returnMilliseconds() { final long rawRealtimeMs = SystemClock.elapsedRealtime(); final long rawRealtimeUs = SystemClock.elapsedRealtime() * 1000; doReturn(mTimer).when(mUid).getForegroundActivityTimer(); doReturn(TIME_SINCE_LAST_FULL_CHARGE_US).when(mTimer) .getTotalTimeLocked(rawRealtimeMs * 1000, BatteryStats.STATS_SINCE_CHARGED); .getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED); assertThat(mBatteryUtils.getForegroundActivityTotalTimeMs(mUid, rawRealtimeMs)).isEqualTo( TIME_SINCE_LAST_FULL_CHARGE_MS); assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs)).isEqualTo( TIME_SINCE_LAST_FULL_CHARGE_US); } private BatterySipper createTestSmearBatterySipper(long activityTime, long topTime, private BatterySipper createTestSmearBatterySipper(long topTime, double totalPowerMah, int uidCode, boolean isUidNull) { final BatterySipper sipper = mock(BatterySipper.class); sipper.drainType = BatterySipper.DrainType.APP; Loading @@ -387,8 +393,6 @@ public class BatteryUtilsTest { doReturn(uidCode).when(sipper).getUid(); if (!isUidNull) { final BatteryStats.Uid uid = mock(BatteryStats.Uid.class, RETURNS_DEEP_STUBS); doReturn(activityTime).when(mBatteryUtils).getForegroundActivityTotalTimeMs(eq(uid), anyLong()); doReturn(topTime).when(mBatteryUtils).getProcessTimeMs( eq(BatteryUtils.StatusType.FOREGROUND), eq(uid), anyInt()); doReturn(uidCode).when(uid).getUid(); Loading