Fix issue #27653326: Sync doesn't work in doze maintenance
Add a (configurable) delay between when we start a maintenance
window until the minimum time we will end it.
Also switch to using the alarm manager callback API. (Yay!)
Also fix a little printing problem in the alarm manager dump
so we put the package name and not some class hash in the
summary string of an alarm entry.
Change-Id: I4281e5c80bc8b26ebc1fb6f603ec33ec0e379daa
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java
index b08142a..cb2130c4 100644
--- a/core/java/android/app/AlarmManager.java
+++ b/core/java/android/app/AlarmManager.java
@@ -559,9 +559,10 @@
* the given time.
* @hide
*/
- public void setIdleUntil(int type, long triggerAtMillis, PendingIntent operation) {
- setImpl(type, triggerAtMillis, WINDOW_EXACT, 0, FLAG_IDLE_UNTIL, operation,
- null, null, null, null, null);
+ public void setIdleUntil(int type, long triggerAtMillis, String tag, OnAlarmListener listener,
+ Handler targetHandler) {
+ setImpl(type, triggerAtMillis, WINDOW_EXACT, 0, FLAG_IDLE_UNTIL, null,
+ listener, tag, targetHandler, null, null);
}
/**
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 6df2a9d..e730ad8 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -1679,7 +1679,7 @@
/**
* Constant for device idle mode: active in full mode.
*/
- public static final int DEVICE_IDLE_MODE_FULL = 2;
+ public static final int DEVICE_IDLE_MODE_DEEP = 2;
/**
* Returns the time in microseconds that device has been in idle mode while
@@ -2754,11 +2754,11 @@
final long powerSaveModeEnabledTime = getPowerSaveModeEnabledTime(rawRealtime, which);
final long deviceIdleModeLightTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT,
rawRealtime, which);
- final long deviceIdleModeFullTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_FULL,
+ final long deviceIdleModeFullTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_DEEP,
rawRealtime, which);
final long deviceLightIdlingTime = getDeviceIdlingTime(DEVICE_IDLE_MODE_LIGHT,
rawRealtime, which);
- final long deviceIdlingTime = getDeviceIdlingTime(DEVICE_IDLE_MODE_FULL,
+ final long deviceIdlingTime = getDeviceIdlingTime(DEVICE_IDLE_MODE_DEEP,
rawRealtime, which);
final int connChanges = getNumConnectivityChange(which);
final long phoneOnTime = getPhoneOnTime(rawRealtime, which);
@@ -2844,14 +2844,14 @@
getMobileRadioActiveTime(rawRealtime, which) / 1000,
getMobileRadioActiveAdjustedTime(which) / 1000, interactiveTime / 1000,
powerSaveModeEnabledTime / 1000, connChanges, deviceIdleModeFullTime / 1000,
- getDeviceIdleModeCount(DEVICE_IDLE_MODE_FULL, which), deviceIdlingTime / 1000,
- getDeviceIdlingCount(DEVICE_IDLE_MODE_FULL, which),
+ getDeviceIdleModeCount(DEVICE_IDLE_MODE_DEEP, which), deviceIdlingTime / 1000,
+ getDeviceIdlingCount(DEVICE_IDLE_MODE_DEEP, which),
getMobileRadioActiveCount(which),
getMobileRadioActiveUnknownTime(which) / 1000, deviceIdleModeLightTime / 1000,
getDeviceIdleModeCount(DEVICE_IDLE_MODE_LIGHT, which), deviceLightIdlingTime / 1000,
getDeviceIdlingCount(DEVICE_IDLE_MODE_LIGHT, which),
getLongestDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT),
- getLongestDeviceIdleModeTime(DEVICE_IDLE_MODE_FULL));
+ getLongestDeviceIdleModeTime(DEVICE_IDLE_MODE_DEEP));
// Dump screen brightness stats
Object[] args = new Object[NUM_SCREEN_BRIGHTNESS_BINS];
@@ -3330,11 +3330,11 @@
final long powerSaveModeEnabledTime = getPowerSaveModeEnabledTime(rawRealtime, which);
final long deviceIdleModeLightTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_LIGHT,
rawRealtime, which);
- final long deviceIdleModeFullTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_FULL,
+ final long deviceIdleModeFullTime = getDeviceIdleModeTime(DEVICE_IDLE_MODE_DEEP,
rawRealtime, which);
final long deviceLightIdlingTime = getDeviceIdlingTime(DEVICE_IDLE_MODE_LIGHT,
rawRealtime, which);
- final long deviceIdlingTime = getDeviceIdlingTime(DEVICE_IDLE_MODE_FULL,
+ final long deviceIdlingTime = getDeviceIdlingTime(DEVICE_IDLE_MODE_DEEP,
rawRealtime, which);
final long phoneOnTime = getPhoneOnTime(rawRealtime, which);
final long wifiRunningTime = getGlobalWifiRunningTime(rawRealtime, which);
@@ -3411,7 +3411,7 @@
formatTimeMs(sb, deviceIdlingTime / 1000);
sb.append("(");
sb.append(formatRatioLocked(deviceIdlingTime, whichBatteryRealtime));
- sb.append(") "); sb.append(getDeviceIdlingCount(DEVICE_IDLE_MODE_FULL, which));
+ sb.append(") "); sb.append(getDeviceIdlingCount(DEVICE_IDLE_MODE_DEEP, which));
sb.append("x");
pw.println(sb.toString());
}
@@ -3423,10 +3423,10 @@
sb.append("(");
sb.append(formatRatioLocked(deviceIdleModeFullTime, whichBatteryRealtime));
sb.append(") ");
- sb.append(getDeviceIdleModeCount(DEVICE_IDLE_MODE_FULL, which));
+ sb.append(getDeviceIdleModeCount(DEVICE_IDLE_MODE_DEEP, which));
sb.append("x");
sb.append(" -- longest ");
- formatTimeMs(sb, getLongestDeviceIdleModeTime(DEVICE_IDLE_MODE_FULL));
+ formatTimeMs(sb, getLongestDeviceIdleModeTime(DEVICE_IDLE_MODE_DEEP));
pw.println(sb.toString());
}
if (phoneOnTime != 0) {
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index d11787d..b0ef012 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -3444,7 +3444,7 @@
public void noteDeviceIdleModeLocked(int mode, String activeReason, int activeUid) {
final long elapsedRealtime = mClocks.elapsedRealtime();
final long uptime = mClocks.uptimeMillis();
- boolean nowIdling = mode == DEVICE_IDLE_MODE_FULL;
+ boolean nowIdling = mode == DEVICE_IDLE_MODE_DEEP;
if (mDeviceIdling && !nowIdling && activeReason == null) {
// We don't go out of general idling mode until explicitly taken out of
// device idle through going active or significant motion.
@@ -3492,7 +3492,7 @@
mLongestLightIdleTime = lastDuration;
}
mDeviceIdleModeLightTimer.stopRunningLocked(elapsedRealtime);
- } else if (mDeviceIdleMode == DEVICE_IDLE_MODE_FULL) {
+ } else if (mDeviceIdleMode == DEVICE_IDLE_MODE_DEEP) {
if (lastDuration > mLongestFullIdleTime) {
mLongestFullIdleTime = lastDuration;
}
@@ -3500,7 +3500,7 @@
}
if (mode == DEVICE_IDLE_MODE_LIGHT) {
mDeviceIdleModeLightTimer.startRunningLocked(elapsedRealtime);
- } else if (mode == DEVICE_IDLE_MODE_FULL) {
+ } else if (mode == DEVICE_IDLE_MODE_DEEP) {
mDeviceIdleModeFullTimer.startRunningLocked(elapsedRealtime);
}
mDeviceIdleMode = mode;
@@ -4452,7 +4452,7 @@
switch (mode) {
case DEVICE_IDLE_MODE_LIGHT:
return mDeviceIdleModeLightTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
- case DEVICE_IDLE_MODE_FULL:
+ case DEVICE_IDLE_MODE_DEEP:
return mDeviceIdleModeFullTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
}
return 0;
@@ -4462,7 +4462,7 @@
switch (mode) {
case DEVICE_IDLE_MODE_LIGHT:
return mDeviceIdleModeLightTimer.getCountLocked(which);
- case DEVICE_IDLE_MODE_FULL:
+ case DEVICE_IDLE_MODE_DEEP:
return mDeviceIdleModeFullTimer.getCountLocked(which);
}
return 0;
@@ -4472,7 +4472,7 @@
switch (mode) {
case DEVICE_IDLE_MODE_LIGHT:
return mLongestLightIdleTime;
- case DEVICE_IDLE_MODE_FULL:
+ case DEVICE_IDLE_MODE_DEEP:
return mLongestFullIdleTime;
}
return 0;
@@ -4482,7 +4482,7 @@
switch (mode) {
case DEVICE_IDLE_MODE_LIGHT:
return mDeviceLightIdlingTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
- case DEVICE_IDLE_MODE_FULL:
+ case DEVICE_IDLE_MODE_DEEP:
return mDeviceIdlingTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
}
return 0;
@@ -4492,7 +4492,7 @@
switch (mode) {
case DEVICE_IDLE_MODE_LIGHT:
return mDeviceLightIdlingTimer.getCountLocked(which);
- case DEVICE_IDLE_MODE_FULL:
+ case DEVICE_IDLE_MODE_DEEP:
return mDeviceIdlingTimer.getCountLocked(which);
}
return 0;