Merge "Distribute all the hidden items to apps"
This commit is contained in:
committed by
Android (Google) Code Review
commit
979cacd777
@@ -344,23 +344,20 @@ public class PowerUsageSummary extends PowerUsageBase {
|
|||||||
final List<BatterySipper> usageList = getCoalescedUsageList(
|
final List<BatterySipper> usageList = getCoalescedUsageList(
|
||||||
USE_FAKE_DATA ? getFakeStats() : mStatsHelper.getUsageList());
|
USE_FAKE_DATA ? getFakeStats() : mStatsHelper.getUsageList());
|
||||||
|
|
||||||
final double screenPowerMah = removeScreenBatterySipper(usageList);
|
final double hiddenPowerMah = removeHiddenBatterySippers(usageList);
|
||||||
|
|
||||||
final int dischargeAmount = USE_FAKE_DATA ? 5000
|
final int dischargeAmount = USE_FAKE_DATA ? 5000
|
||||||
: stats != null ? stats.getDischargeAmount(mStatsType) : 0;
|
: stats != null ? stats.getDischargeAmount(mStatsType) : 0;
|
||||||
final int numSippers = usageList.size();
|
final int numSippers = usageList.size();
|
||||||
for (int i = 0; i < numSippers; i++) {
|
for (int i = 0; i < numSippers; i++) {
|
||||||
final BatterySipper sipper = usageList.get(i);
|
final BatterySipper sipper = usageList.get(i);
|
||||||
if (shouldHideSipper(sipper)) {
|
// Deduct the power of hidden items from total power, which is used to
|
||||||
continue;
|
// calculate percentOfTotal
|
||||||
}
|
|
||||||
|
|
||||||
// Deduct the screen power from total power, used to calculate percentOfTotal
|
|
||||||
double totalPower = USE_FAKE_DATA ?
|
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
|
// With deduction in totalPower, percentOfTotal is higher because it adds the part
|
||||||
// used in screen
|
// used in screen, system, etc
|
||||||
final double percentOfTotal =
|
final double percentOfTotal =
|
||||||
((sipper.totalPowerMah / totalPower) * dischargeAmount);
|
((sipper.totalPowerMah / totalPower) * dischargeAmount);
|
||||||
|
|
||||||
@@ -451,7 +448,8 @@ public class PowerUsageSummary extends PowerUsageBase {
|
|||||||
final int uid = sipper.getUid();
|
final int uid = sipper.getUid();
|
||||||
|
|
||||||
return drainType == DrainType.IDLE || drainType == DrainType.CELL
|
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;
|
|| (sipper.totalPowerMah * SECONDS_IN_HOUR) < MIN_POWER_THRESHOLD_MILLI_AMP;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -470,16 +468,17 @@ public class PowerUsageSummary extends PowerUsageBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
double removeScreenBatterySipper(List<BatterySipper> sippers) {
|
double removeHiddenBatterySippers(List<BatterySipper> sippers) {
|
||||||
for (int i = 0, size = sippers.size(); i < size; i++) {
|
double totalPowerMah = 0;
|
||||||
|
for (int i = sippers.size() - 1; i >= 0; i--) {
|
||||||
final BatterySipper sipper = sippers.get(i);
|
final BatterySipper sipper = sippers.get(i);
|
||||||
if (sipper.drainType == DrainType.SCREEN) {
|
if (shouldHideSipper(sipper)) {
|
||||||
sippers.remove(i);
|
sippers.remove(i);
|
||||||
return sipper.totalPowerMah;
|
totalPowerMah += sipper.totalPowerMah;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return totalPowerMah;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<BatterySipper> getFakeStats() {
|
private static List<BatterySipper> getFakeStats() {
|
||||||
|
@@ -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.android.settings.fuelgauge.PowerUsageSummary.MENU_ADDITIONAL_BATTERY_INFO;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static org.mockito.Matchers.anyString;
|
import static org.mockito.Matchers.anyString;
|
||||||
import static org.mockito.Mockito.doReturn;
|
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
@@ -61,6 +60,7 @@ public class PowerUsageSummaryTest {
|
|||||||
private static final int UID = 123;
|
private static final int UID = 123;
|
||||||
private static final int POWER_MAH = 100;
|
private static final int POWER_MAH = 100;
|
||||||
private static final double BATTERY_SCREEN_USAGE = 300;
|
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 double PRECISION = 0.001;
|
||||||
private static final Intent ADDITIONAL_BATTERY_INFO_INTENT =
|
private static final Intent ADDITIONAL_BATTERY_INFO_INTENT =
|
||||||
new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
|
new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
|
||||||
@@ -80,6 +80,8 @@ public class PowerUsageSummaryTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private BatterySipper mScreenBatterySipper;
|
private BatterySipper mScreenBatterySipper;
|
||||||
@Mock
|
@Mock
|
||||||
|
private BatterySipper mSystemBatterySipper;
|
||||||
|
@Mock
|
||||||
private PowerGaugePreference mPreference;
|
private PowerGaugePreference mPreference;
|
||||||
|
|
||||||
private TestFragment mFragment;
|
private TestFragment mFragment;
|
||||||
@@ -114,6 +116,9 @@ public class PowerUsageSummaryTest {
|
|||||||
|
|
||||||
mScreenBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
|
mScreenBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
|
||||||
mScreenBatterySipper.totalPowerMah = BATTERY_SCREEN_USAGE;
|
mScreenBatterySipper.totalPowerMah = BATTERY_SCREEN_USAGE;
|
||||||
|
mSystemBatterySipper.drainType = BatterySipper.DrainType.APP;
|
||||||
|
mSystemBatterySipper.totalPowerMah = BATTERY_SYSTEM_USAGE;
|
||||||
|
when(mSystemBatterySipper.getUid()).thenReturn(Process.SYSTEM_UID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -161,17 +166,6 @@ public class PowerUsageSummaryTest {
|
|||||||
assertThat(key).isEqualTo(mNormalBatterySipper.drainType.toString());
|
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
|
@Test
|
||||||
public void testExtractKeyFromSipper_TypeAPPUidObjectNotNull_ReturnUid() {
|
public void testExtractKeyFromSipper_TypeAPPUidObjectNotNull_ReturnUid() {
|
||||||
mNormalBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID);
|
mNormalBatterySipper.uidObj = new BatteryStatsImpl.Uid(new BatteryStatsImpl(), UID);
|
||||||
@@ -181,6 +175,18 @@ public class PowerUsageSummaryTest {
|
|||||||
assertThat(key).isEqualTo(Integer.toString(mNormalBatterySipper.getUid()));
|
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
|
@Test
|
||||||
public void testShouldHideSipper_TypeIdle_ReturnTrue() {
|
public void testShouldHideSipper_TypeIdle_ReturnTrue() {
|
||||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.IDLE;
|
mNormalBatterySipper.drainType = BatterySipper.DrainType.IDLE;
|
||||||
@@ -193,6 +199,12 @@ public class PowerUsageSummaryTest {
|
|||||||
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testShouldHideSipper_TypeScreen_ReturnTrue() {
|
||||||
|
mNormalBatterySipper.drainType = BatterySipper.DrainType.SCREEN;
|
||||||
|
assertThat(mPowerUsageSummary.shouldHideSipper(mNormalBatterySipper)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testShouldHideSipper_UidRoot_ReturnTrue() {
|
public void testShouldHideSipper_UidRoot_ReturnTrue() {
|
||||||
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
|
mNormalBatterySipper.drainType = BatterySipper.DrainType.APP;
|
||||||
|
Reference in New Issue
Block a user