Merge "Use enhanced estimate battery info when available"

This commit is contained in:
Salvador Martinez
2017-05-23 03:28:29 +00:00
committed by Android (Google) Code Review
3 changed files with 20 additions and 55 deletions

View File

@@ -217,7 +217,7 @@ public class BatteryUtils {
return timeUs / 1000;
}
private long convertMsToUs(long timeMs) {
public long convertMsToUs(long timeMs) {
return timeMs * 1000;
}

View File

@@ -187,12 +187,11 @@ public class PowerUsageSummary extends PowerUsageBase implements
mEnhancedEstimate =
mPowerFeatureProvider.getTimeRemainingEstimate(cursor);
}
final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
final long elapsedRealtimeUs =
mBatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
Intent batteryBroadcast = getContext().registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(getContext(),
batteryBroadcast, mStatsHelper.getStats(), elapsedRealtimeUs, false);
useEnhancedEstimateIfAvailable(getContext(), batteryInfo);
BatteryInfo batteryInfo = getBatteryInfo(elapsedRealtimeUs, batteryBroadcast);
updateHeaderPreference(batteryInfo);
}
@@ -494,12 +493,10 @@ public class PowerUsageSummary extends PowerUsageBase implements
initAnomalyDetectionIfPossible();
final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
final long elapsedRealtimeUs = mBatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
Intent batteryBroadcast = context.registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast,
mStatsHelper.getStats(), elapsedRealtimeUs, false);
useEnhancedEstimateIfAvailable(context, batteryInfo);
BatteryInfo batteryInfo = getBatteryInfo(elapsedRealtimeUs, batteryBroadcast);
updateHeaderPreference(batteryInfo);
final long runningTime = calculateRunningTimeBasedOnStatsType();
@@ -660,7 +657,7 @@ public class PowerUsageSummary extends PowerUsageBase implements
@VisibleForTesting
long calculateRunningTimeBasedOnStatsType() {
final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
final long elapsedRealtimeUs = mBatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
// Return the battery time (millisecond) on status mStatsType
return mStatsHelper.getStats().computeBatteryRealtime(elapsedRealtimeUs,
mStatsType /* STATS_SINCE_CHARGED */) / 1000;
@@ -743,17 +740,20 @@ public class PowerUsageSummary extends PowerUsageBase implements
}
}
@VisibleForTesting
void useEnhancedEstimateIfAvailable(Context context, BatteryInfo batteryInfo) {
if (mEnhancedEstimate > 0
&& mPowerFeatureProvider.isEnhancedBatteryPredictionEnabled(context)) {
final Resources resources = context.getResources();
batteryInfo.remainingTimeUs = mEnhancedEstimate;
String timeString = Formatter.formatShortElapsedTime(context, mEnhancedEstimate);
batteryInfo.remainingLabel = resources.getString(
com.android.settingslib.R.string.power_remaining_duration_only,
timeString);
private BatteryInfo getBatteryInfo(long elapsedRealtimeUs, Intent batteryBroadcast) {
BatteryInfo batteryInfo;
if (mEnhancedEstimate > 0 &&
mPowerFeatureProvider.isEnhancedBatteryPredictionEnabled(
getContext())) {
// Drain time is in micro-seconds so we have to multiply by 1000
batteryInfo = BatteryInfo.getBatteryInfo(getContext(), batteryBroadcast,
mStatsHelper.getStats(), elapsedRealtimeUs, false,
mBatteryUtils.convertMsToUs(mEnhancedEstimate), true);
} else {
batteryInfo = BatteryInfo.getBatteryInfo(getContext(), batteryBroadcast,
mStatsHelper.getStats(), elapsedRealtimeUs, false);
}
return batteryInfo;
}
@VisibleForTesting

View File

@@ -491,41 +491,6 @@ public class PowerUsageSummaryTest {
assertThat(mFragment.mAnomalySparseArray.get(UID_2)).containsExactly(anomaly3);
}
@Test
public void testUseEnhancedEstimateIfAvailable() {
// mock out the provider
final long time = 60 * 1000 * 1000;
PowerUsageFeatureProvider provider = mFeatureFactory.getPowerUsageFeatureProvider(mContext);
when(provider.isEnhancedBatteryPredictionEnabled(any())).thenReturn(true);
mFragment.mPowerFeatureProvider = provider;
mFragment.mEnhancedEstimate = time;
mFragment.useEnhancedEstimateIfAvailable(mRealContext, mBatteryInfo);
// The string that gets returned always has weird whitespacing to make it fit
// so we're just going to check that it contains the correct value we care about.
assertThat(mBatteryInfo.remainingTimeUs).isEqualTo(time);
assertThat(mBatteryInfo.remainingLabel).contains("About 17 hrs");
}
@Test
public void testUseEnhancedEstimateIfAvailable_noOpsOnDisabled() {
// mock out the provider
final long time = 60 * 1000 * 1000;
PowerUsageFeatureProvider provider = mFeatureFactory.getPowerUsageFeatureProvider(mContext);
when(provider.isEnhancedBatteryPredictionEnabled(any())).thenReturn(false);
mFragment.mPowerFeatureProvider = provider;
mFragment.mEnhancedEstimate = time;
mBatteryInfo.remainingTimeUs = TIME_SINCE_LAST_FULL_CHARGE_US;
mBatteryInfo.remainingLabel = TIME_LEFT;
mFragment.useEnhancedEstimateIfAvailable(mRealContext, mBatteryInfo);
// check to make sure the values did not change
assertThat(mBatteryInfo.remainingTimeUs).isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_US);
assertThat(mBatteryInfo.remainingLabel).contains(TIME_LEFT);
}
@Test
public void testBatteryPredictionLoaderCallbacks_DoesNotCrashOnNull() {
// Sanity test to check for crash