Loading src/com/android/settings/fuelgauge/PowerUsageSummary.java +13 −14 Original line number Diff line number Diff line Loading @@ -344,23 +344,20 @@ public class PowerUsageSummary extends PowerUsageBase { final List<BatterySipper> usageList = getCoalescedUsageList( USE_FAKE_DATA ? getFakeStats() : mStatsHelper.getUsageList()); final double screenPowerMah = removeScreenBatterySipper(usageList); final double hiddenPowerMah = removeHiddenBatterySippers(usageList); final int dischargeAmount = USE_FAKE_DATA ? 5000 : stats != null ? stats.getDischargeAmount(mStatsType) : 0; final int numSippers = usageList.size(); for (int i = 0; i < numSippers; i++) { final BatterySipper sipper = usageList.get(i); if (shouldHideSipper(sipper)) { continue; } // Deduct the screen power from total power, used to calculate percentOfTotal // Deduct the power of hidden items from total power, which is used to // calculate percentOfTotal double totalPower = USE_FAKE_DATA ? 4000 : mStatsHelper.getTotalPower() - screenPowerMah; 4000 : mStatsHelper.getTotalPower() - hiddenPowerMah; // With deduction in totalPower, percentOfTotal is higher because it adds the part // used in screen // used in screen, system, etc final double percentOfTotal = ((sipper.totalPowerMah / totalPower) * dischargeAmount); Loading Loading @@ -451,7 +448,8 @@ public class PowerUsageSummary extends PowerUsageBase { final int uid = sipper.getUid(); return drainType == DrainType.IDLE || drainType == DrainType.CELL || uid == Process.ROOT_UID || uid == Process.SYSTEM_UID || drainType == DrainType.SCREEN || uid == Process.ROOT_UID || uid == Process.SYSTEM_UID || (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP; } Loading @@ -470,16 +468,17 @@ public class PowerUsageSummary extends PowerUsageBase { } @VisibleForTesting double removeScreenBatterySipper(List<BatterySipper> sippers) { for (int i = 0, size = sippers.size(); i < size; i++) { double removeHiddenBatterySippers(List<BatterySipper> sippers) { double totalPowerMah = 0; for (int i = sippers.size() - 1; i >= 0; i--) { final BatterySipper sipper = sippers.get(i); if (sipper.drainType == DrainType.SCREEN) { if (shouldHideSipper(sipper)) { sippers.remove(i); return sipper.totalPowerMah; totalPowerMah += sipper.totalPowerMah; } } return 0; return totalPowerMah; } private static List<BatterySipper> getFakeStats() { Loading tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +24 −12 Original line number Diff line number Diff line Loading @@ -44,7 +44,6 @@ import static com.android.settings.fuelgauge.PowerUsageBase.MENU_STATS_REFRESH; import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_ADDITIONAL_BATTERY_INFO; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; Loading @@ -61,6 +60,7 @@ public class PowerUsageSummaryTest { private static final int UID = 123; private static final int POWER_MAH = 100; private static final double BATTERY_SCREEN_USAGE = 300; private static final double BATTERY_SYSTEM_USAGE = 600; private static final double PRECISION = 0.001; private static final Intent ADDITIONAL_BATTERY_INFO_INTENT = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO"); Loading @@ -80,6 +80,8 @@ public class PowerUsageSummaryTest { @Mock private BatterySipper mScreenBatterySipper; @Mock private BatterySipper mSystemBatterySipper; @Mock private PowerGaugePreference mPreference; private TestFragment mFragment; Loading Loading @@ -114,6 +116,9 @@ public class PowerUsageSummaryTest { mScreenBatterySipper.drainType = BatterySipper.DrainType.SCREEN; mScreenBatterySipper.totalPowerMah = BATTERY_SCREEN_USAGE; mSystemBatterySipper.drainType = BatterySipper.DrainType.APP; mSystemBatterySipper.totalPowerMah = BATTERY_SYSTEM_USAGE; when(mSystemBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID); } @Test Loading Loading @@ -161,17 +166,6 @@ public class PowerUsageSummaryTest { assertThat(key).isEqualTo(mNormalBatterySipper.drainType.toString()); } @Test public void testRemoveScreenBatterySipper_ContainsScreenSipper_RemoveAndReturnValue() { final List<BatterySipper> sippers = new ArrayList<>(); sippers.add(mNormalBatterySipper); sippers.add(mScreenBatterySipper); final double screenUsage = mPowerUsageSummary.removeScreenBatterySipper(sippers); assertThat(sippers).containsExactly(mNormalBatterySipper); assertThat(screenUsage).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE); } @Test public void testExtractKeyFromSipper_TypeAPPUidObjectNotNull_ReturnUid() { mNormalBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID); Loading @@ -181,6 +175,18 @@ public class PowerUsageSummaryTest { assertThat(key).isEqualTo(Integer.toString(mNormalBatterySipper.getUid())); } @Test public void testRemoveHiddenBatterySippers_ContainsHiddenSippers_RemoveAndReturnValue() { final List<BatterySipper> sippers = new ArrayList<>(); sippers.add(mNormalBatterySipper); sippers.add(mScreenBatterySipper); sippers.add(mSystemBatterySipper); final double totalUsage = mPowerUsageSummary.removeHiddenBatterySippers(sippers); assertThat(sippers).containsExactly(mNormalBatterySipper); assertThat(totalUsage).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE + BATTERY_SYSTEM_USAGE); } @Test public void testShouldHideSipper_TypeIdle_ReturnTrue() { mNormalBatterySipper.drainType = BatterySipper.DrainType.IDLE; Loading @@ -193,6 +199,12 @@ public class PowerUsageSummaryTest { assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue(); } @Test public void testShouldHideSipper_TypeScreen_ReturnTrue() { mNormalBatterySipper.drainType = BatterySipper.DrainType.SCREEN; assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue(); } @Test public void testShouldHideSipper_UidRoot_ReturnTrue() { mNormalBatterySipper.drainType = BatterySipper.DrainType.APP; Loading Loading
src/com/android/settings/fuelgauge/PowerUsageSummary.java +13 −14 Original line number Diff line number Diff line Loading @@ -344,23 +344,20 @@ public class PowerUsageSummary extends PowerUsageBase { final List<BatterySipper> usageList = getCoalescedUsageList( USE_FAKE_DATA ? getFakeStats() : mStatsHelper.getUsageList()); final double screenPowerMah = removeScreenBatterySipper(usageList); final double hiddenPowerMah = removeHiddenBatterySippers(usageList); final int dischargeAmount = USE_FAKE_DATA ? 5000 : stats != null ? stats.getDischargeAmount(mStatsType) : 0; final int numSippers = usageList.size(); for (int i = 0; i < numSippers; i++) { final BatterySipper sipper = usageList.get(i); if (shouldHideSipper(sipper)) { continue; } // Deduct the screen power from total power, used to calculate percentOfTotal // Deduct the power of hidden items from total power, which is used to // calculate percentOfTotal double totalPower = USE_FAKE_DATA ? 4000 : mStatsHelper.getTotalPower() - screenPowerMah; 4000 : mStatsHelper.getTotalPower() - hiddenPowerMah; // With deduction in totalPower, percentOfTotal is higher because it adds the part // used in screen // used in screen, system, etc final double percentOfTotal = ((sipper.totalPowerMah / totalPower) * dischargeAmount); Loading Loading @@ -451,7 +448,8 @@ public class PowerUsageSummary extends PowerUsageBase { final int uid = sipper.getUid(); return drainType == DrainType.IDLE || drainType == DrainType.CELL || uid == Process.ROOT_UID || uid == Process.SYSTEM_UID || drainType == DrainType.SCREEN || uid == Process.ROOT_UID || uid == Process.SYSTEM_UID || (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP; } Loading @@ -470,16 +468,17 @@ public class PowerUsageSummary extends PowerUsageBase { } @VisibleForTesting double removeScreenBatterySipper(List<BatterySipper> sippers) { for (int i = 0, size = sippers.size(); i < size; i++) { double removeHiddenBatterySippers(List<BatterySipper> sippers) { double totalPowerMah = 0; for (int i = sippers.size() - 1; i >= 0; i--) { final BatterySipper sipper = sippers.get(i); if (sipper.drainType == DrainType.SCREEN) { if (shouldHideSipper(sipper)) { sippers.remove(i); return sipper.totalPowerMah; totalPowerMah += sipper.totalPowerMah; } } return 0; return totalPowerMah; } private static List<BatterySipper> getFakeStats() { Loading
tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java +24 −12 Original line number Diff line number Diff line Loading @@ -44,7 +44,6 @@ import static com.android.settings.fuelgauge.PowerUsageBase.MENU_STATS_REFRESH; import static com.android.settings.fuelgauge.PowerUsageSummary.MENU_ADDITIONAL_BATTERY_INFO; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; Loading @@ -61,6 +60,7 @@ public class PowerUsageSummaryTest { private static final int UID = 123; private static final int POWER_MAH = 100; private static final double BATTERY_SCREEN_USAGE = 300; private static final double BATTERY_SYSTEM_USAGE = 600; private static final double PRECISION = 0.001; private static final Intent ADDITIONAL_BATTERY_INFO_INTENT = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO"); Loading @@ -80,6 +80,8 @@ public class PowerUsageSummaryTest { @Mock private BatterySipper mScreenBatterySipper; @Mock private BatterySipper mSystemBatterySipper; @Mock private PowerGaugePreference mPreference; private TestFragment mFragment; Loading Loading @@ -114,6 +116,9 @@ public class PowerUsageSummaryTest { mScreenBatterySipper.drainType = BatterySipper.DrainType.SCREEN; mScreenBatterySipper.totalPowerMah = BATTERY_SCREEN_USAGE; mSystemBatterySipper.drainType = BatterySipper.DrainType.APP; mSystemBatterySipper.totalPowerMah = BATTERY_SYSTEM_USAGE; when(mSystemBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID); } @Test Loading Loading @@ -161,17 +166,6 @@ public class PowerUsageSummaryTest { assertThat(key).isEqualTo(mNormalBatterySipper.drainType.toString()); } @Test public void testRemoveScreenBatterySipper_ContainsScreenSipper_RemoveAndReturnValue() { final List<BatterySipper> sippers = new ArrayList<>(); sippers.add(mNormalBatterySipper); sippers.add(mScreenBatterySipper); final double screenUsage = mPowerUsageSummary.removeScreenBatterySipper(sippers); assertThat(sippers).containsExactly(mNormalBatterySipper); assertThat(screenUsage).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE); } @Test public void testExtractKeyFromSipper_TypeAPPUidObjectNotNull_ReturnUid() { mNormalBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID); Loading @@ -181,6 +175,18 @@ public class PowerUsageSummaryTest { assertThat(key).isEqualTo(Integer.toString(mNormalBatterySipper.getUid())); } @Test public void testRemoveHiddenBatterySippers_ContainsHiddenSippers_RemoveAndReturnValue() { final List<BatterySipper> sippers = new ArrayList<>(); sippers.add(mNormalBatterySipper); sippers.add(mScreenBatterySipper); sippers.add(mSystemBatterySipper); final double totalUsage = mPowerUsageSummary.removeHiddenBatterySippers(sippers); assertThat(sippers).containsExactly(mNormalBatterySipper); assertThat(totalUsage).isWithin(PRECISION).of(BATTERY_SCREEN_USAGE + BATTERY_SYSTEM_USAGE); } @Test public void testShouldHideSipper_TypeIdle_ReturnTrue() { mNormalBatterySipper.drainType = BatterySipper.DrainType.IDLE; Loading @@ -193,6 +199,12 @@ public class PowerUsageSummaryTest { assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue(); } @Test public void testShouldHideSipper_TypeScreen_ReturnTrue() { mNormalBatterySipper.drainType = BatterySipper.DrainType.SCREEN; assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue(); } @Test public void testShouldHideSipper_UidRoot_ReturnTrue() { mNormalBatterySipper.drainType = BatterySipper.DrainType.APP; Loading