Commit 868a1534 authored by rajendrant's avatar rajendrant Committed by Commit bot

Record UMA for battery level when precache starts and ends

BUG=646184

Review-Url: https://codereview.chromium.org/2333063002
Cr-Commit-Position: refs/heads/master@{#419337}
parent 712e407b
...@@ -369,6 +369,7 @@ public class PrecacheController { ...@@ -369,6 +369,7 @@ public class PrecacheController {
recordPeriodicTaskIntervalHistogram(); recordPeriodicTaskIntervalHistogram();
cancelPrecacheCompletionTask(mAppContext); cancelPrecacheCompletionTask(mAppContext);
} }
recordBatteryLevelAtStart();
registerDeviceStateReceiver(); registerDeviceStateReceiver();
acquirePrecachingWakeLock(); acquirePrecachingWakeLock();
startPrecachingAfterSyncInit(); startPrecachingAfterSyncInit();
...@@ -439,6 +440,7 @@ public class PrecacheController { ...@@ -439,6 +440,7 @@ public class PrecacheController {
if (precachingIncomplete) { if (precachingIncomplete) {
schedulePrecacheCompletionTask(mAppContext); schedulePrecacheCompletionTask(mAppContext);
} }
recordBatteryLevelAtEnd();
mHandler.removeCallbacks(mTimeoutRunnable); mHandler.removeCallbacks(mTimeoutRunnable);
mAppContext.unregisterReceiver(mDeviceStateReceiver); mAppContext.unregisterReceiver(mDeviceStateReceiver);
releasePrecachingWakeLock(); releasePrecachingWakeLock();
...@@ -543,4 +545,21 @@ public class PrecacheController { ...@@ -543,4 +545,21 @@ public class PrecacheController {
.putLong(PREF_PRECACHE_PERIODIC_TASK_START_TIME_MS, current_start_time_ms) .putLong(PREF_PRECACHE_PERIODIC_TASK_START_TIME_MS, current_start_time_ms)
.apply(); .apply();
} }
private void recordBatteryLevelAtStart() {
mDeviceState.saveCurrentBatteryPercentage(mAppContext);
// Report battery percentage.
RecordHistogram.recordPercentageHistogram(
"Precache.BatteryPercentage.Start", mDeviceState.getSavedBatteryPercentage());
}
private void recordBatteryLevelAtEnd() {
int delta_percentage = mDeviceState.getCurrentBatteryPercentage(mAppContext)
- mDeviceState.getSavedBatteryPercentage();
if (delta_percentage >= 0) {
RecordHistogram.recordPercentageHistogram(
"Precache.BatteryPercentageDiff.End", delta_percentage);
}
}
} }
...@@ -17,6 +17,9 @@ import org.chromium.base.VisibleForTesting; ...@@ -17,6 +17,9 @@ import org.chromium.base.VisibleForTesting;
public class DeviceState { public class DeviceState {
private static DeviceState sDeviceState = null; private static DeviceState sDeviceState = null;
// Saved battery level percentage.
private int mSavedBatteryPercentage = 0;
/** Disallow Construction of DeviceState objects. Use {@link #getInstance()} instead to create /** Disallow Construction of DeviceState objects. Use {@link #getInstance()} instead to create
* a singleton instance. * a singleton instance.
*/ */
...@@ -58,6 +61,37 @@ public class DeviceState { ...@@ -58,6 +61,37 @@ public class DeviceState {
|| status == BatteryManager.BATTERY_STATUS_FULL; || status == BatteryManager.BATTERY_STATUS_FULL;
} }
/**
* @return the previously saved battery level percentage.
* @param context the application context
*/
public int getSavedBatteryPercentage() {
return mSavedBatteryPercentage;
}
/**
* Saves the current battery level percentage to be retrieved later.
*/
public void saveCurrentBatteryPercentage(Context context) {
mSavedBatteryPercentage = getCurrentBatteryPercentage(context);
}
/**
* @return the current battery level as percentage.
* @param context the application context
*/
public int getCurrentBatteryPercentage(Context context) {
IntentFilter iFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, iFilter);
if (batteryStatus == null) return 0;
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
if (level == -1 || scale == -1) return 0;
if (scale == 0) return 0;
return Math.round(100 * level / (float) scale);
}
/** @return whether the currently active network is unmetered. */ /** @return whether the currently active network is unmetered. */
public boolean isUnmeteredNetworkAvailable(Context context) { public boolean isUnmeteredNetworkAvailable(Context context) {
NetworkInfoDelegate networkInfo = NetworkInfoDelegate networkInfo =
......
...@@ -45294,6 +45294,26 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. ...@@ -45294,6 +45294,26 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
</summary> </summary>
</histogram> </histogram>
<histogram name="Precache.BatteryPercentage.Start" units="%">
<owner>bengr@chromium.org</owner>
<owner>rajendrant@chromium.org</owner>
<summary>
The battery level in percentage when the precache task was started.
</summary>
</histogram>
<histogram name="Precache.BatteryPercentageDiff.End" units="%">
<owner>bengr@chromium.org</owner>
<owner>rajendrant@chromium.org</owner>
<summary>
Measures the difference between the battery level percentage when the
precache task is started and ended. This value indicates the possible
battery usage due to the precache task. Logged when the precache task ends,
which could be due to successful completion, time-out, error conditions, max
download limit exceeded, etc.
</summary>
</histogram>
<histogram name="Precache.CacheStatus.NonPrefetch" enum="HttpCachePattern"> <histogram name="Precache.CacheStatus.NonPrefetch" enum="HttpCachePattern">
<owner>jamartin@chromium.org</owner> <owner>jamartin@chromium.org</owner>
<owner>bengr@chromium.org</owner> <owner>bengr@chromium.org</owner>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment