OSDN Git Service

Update the method about foreground time.
authorjackqdyulei <jackqdyulei@google.com>
Fri, 30 Jun 2017 17:18:34 +0000 (10:18 -0700)
committerjackqdyulei <jackqdyulei@google.com>
Fri, 30 Jun 2017 23:18:29 +0000 (16:18 -0700)
For now it uses MIN(STATE_TOP_TIME, FOREGROUND_ACTIVITY_TIME) and this
method is used in both display and screen smearing.

Bug: 63080621
Test: RunSettingsRoboTests
Change-Id: I2ca3109697aa66fae67d8b2f4f10c4d08bb99d59

src/com/android/settings/fuelgauge/BatteryUtils.java
tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java

index 7dc7800..dbfbed1 100644 (file)
@@ -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)));
     }
 
     /**
@@ -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;
             }
@@ -328,11 +329,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;
index a78c385..0cabb05 100644 (file)
@@ -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;
@@ -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;
index 151463a..e2c6f6d 100644 (file)
@@ -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);
 
@@ -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);
 
@@ -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);
@@ -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;
@@ -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();