summaryrefslogtreecommitdiffstats
path: root/core/java/android/os
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2015-03-17 17:00:24 -0700
committerDianne Hackborn <hackbod@google.com>2015-03-19 11:10:55 -0700
commit8ad2af7e5b28f71e7bdfc1bb097937c6c1d22b18 (patch)
tree9b954b257d7c6e8ea50a4b7fb32e69cad5a0ad99 /core/java/android/os
parent27eac1d58fe0b7ca3a2e27f5ed64eff232745f45 (diff)
downloadframeworks_base-8ad2af7e5b28f71e7bdfc1bb097937c6c1d22b18.zip
frameworks_base-8ad2af7e5b28f71e7bdfc1bb097937c6c1d22b18.tar.gz
frameworks_base-8ad2af7e5b28f71e7bdfc1bb097937c6c1d22b18.tar.bz2
First stab at device idle mode.
Introduce a new device idle controller service that monitor's the device state and determines when to go in to idle mode. When in idle mode, all we do right now is turn off network access the same as we do for power save mode. Many more things should come in the future -- stopping the alarm manager from scheduling (most) alarms, telling GmsCore for it to stop doing stuff, etc. Battery stats now has state tracking for devie idle mode, as well as events for the reasons we can come out of idle mode (significant motion or the device becoming active). Also added new events noting when packages are installed. Renamed the "low power" event in battery stats to "power save" because the former was just way too confusing. Finally, fix buffer size reading kernel wake locks. (Stupidly, just increasing the buffer size. Ideally we should try to be smarter and grow our buffer to fit the data available, but I'll leave that for another time.) Change-Id: I0be2062466c83ee9d890c6cf5a228d9cc4090eca
Diffstat (limited to 'core/java/android/os')
-rw-r--r--core/java/android/os/BatteryStats.java82
1 files changed, 61 insertions, 21 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index d96a0e9..cab03da 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -30,7 +30,6 @@ import android.content.pm.ApplicationInfo;
import android.telephony.SignalStrength;
import android.text.format.DateFormat;
import android.util.Printer;
-import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseIntArray;
import android.util.TimeUtils;
@@ -1044,14 +1043,15 @@ public abstract class BatteryStats implements Parcelable {
public static final int STATE2_WIFI_SIGNAL_STRENGTH_MASK =
0x7 << STATE2_WIFI_SIGNAL_STRENGTH_SHIFT;
- public static final int STATE2_LOW_POWER_FLAG = 1<<31;
+ public static final int STATE2_POWER_SAVE_FLAG = 1<<31;
public static final int STATE2_VIDEO_ON_FLAG = 1<<30;
public static final int STATE2_WIFI_RUNNING_FLAG = 1<<29;
public static final int STATE2_WIFI_ON_FLAG = 1<<28;
public static final int STATE2_FLASHLIGHT_FLAG = 1<<27;
+ public static final int STATE2_DEVICE_IDLE_FLAG = 1<<26;
public static final int MOST_INTERESTING_STATES2 =
- STATE2_LOW_POWER_FLAG | STATE2_WIFI_ON_FLAG;
+ STATE2_POWER_SAVE_FLAG | STATE2_WIFI_ON_FLAG | STATE2_DEVICE_IDLE_FLAG;
public int states2;
@@ -1086,10 +1086,18 @@ public abstract class BatteryStats implements Parcelable {
public static final int EVENT_USER_RUNNING = 0x0007;
// Events for foreground user.
public static final int EVENT_USER_FOREGROUND = 0x0008;
- // Events for connectivity changed.
+ // Event for connectivity changed.
public static final int EVENT_CONNECTIVITY_CHANGED = 0x0009;
+ // Event for significant motion taking us out of idle mode.
+ public static final int EVENT_SIGNIFICANT_MOTION = 0x000a;
+ // Event for becoming active taking us out of idle mode.
+ public static final int EVENT_ACTIVE = 0x000b;
+ // Event for a package being installed.
+ public static final int EVENT_PACKAGE_INSTALLED = 0x000c;
+ // Event for a package being uninstalled.
+ public static final int EVENT_PACKAGE_UNINSTALLED = 0x000d;
// Number of event types.
- public static final int EVENT_COUNT = 0x000a;
+ public static final int EVENT_COUNT = 0x000e;
// Mask to extract out only the type part of the event.
public static final int EVENT_TYPE_MASK = ~(EVENT_FLAG_START|EVENT_FLAG_FINISH);
@@ -1486,19 +1494,34 @@ public abstract class BatteryStats implements Parcelable {
long elapsedRealtimeUs, int which);
/**
- * Returns the time in microseconds that low power mode has been enabled while the device was
+ * Returns the time in microseconds that power save mode has been enabled while the device was
* running on battery.
*
* {@hide}
*/
- public abstract long getLowPowerModeEnabledTime(long elapsedRealtimeUs, int which);
+ public abstract long getPowerSaveModeEnabledTime(long elapsedRealtimeUs, int which);
/**
- * Returns the number of times that low power mode was enabled.
+ * Returns the number of times that power save mode was enabled.
*
* {@hide}
*/
- public abstract int getLowPowerModeEnabledCount(int which);
+ public abstract int getPowerSaveModeEnabledCount(int which);
+
+ /**
+ * Returns the time in microseconds that device has been in idle mode while
+ * running on battery.
+ *
+ * {@hide}
+ */
+ public abstract long getDeviceIdleModeEnabledTime(long elapsedRealtimeUs, int which);
+
+ /**
+ * Returns the number of times that the devie has gone in to idle mode.
+ *
+ * {@hide}
+ */
+ public abstract int getDeviceIdleModeEnabledCount(int which);
/**
* Returns the number of times that connectivity state changed.
@@ -1692,11 +1715,12 @@ public abstract class BatteryStats implements Parcelable {
public static final BitDescription[] HISTORY_STATE2_DESCRIPTIONS
= new BitDescription[] {
- new BitDescription(HistoryItem.STATE2_LOW_POWER_FLAG, "low_power", "lp"),
+ new BitDescription(HistoryItem.STATE2_POWER_SAVE_FLAG, "power_save", "ps"),
new BitDescription(HistoryItem.STATE2_VIDEO_ON_FLAG, "video", "v"),
new BitDescription(HistoryItem.STATE2_WIFI_RUNNING_FLAG, "wifi_running", "Wr"),
new BitDescription(HistoryItem.STATE2_WIFI_ON_FLAG, "wifi", "W"),
new BitDescription(HistoryItem.STATE2_FLASHLIGHT_FLAG, "flashlight", "fl"),
+ new BitDescription(HistoryItem.STATE2_DEVICE_IDLE_FLAG, "device_idle", "di"),
new BitDescription(HistoryItem.STATE2_WIFI_SIGNAL_STRENGTH_MASK,
HistoryItem.STATE2_WIFI_SIGNAL_STRENGTH_SHIFT, "wifi_signal_strength", "Wss",
new String[] { "0", "1", "2", "3", "4" },
@@ -1707,11 +1731,13 @@ public abstract class BatteryStats implements Parcelable {
};
public static final String[] HISTORY_EVENT_NAMES = new String[] {
- "null", "proc", "fg", "top", "sync", "wake_lock_in", "job", "user", "userfg", "conn"
+ "null", "proc", "fg", "top", "sync", "wake_lock_in", "job", "user", "userfg", "conn",
+ "motion", "active", "pkginst", "pkgunin"
};
public static final String[] HISTORY_EVENT_CHECKIN_NAMES = new String[] {
- "Enl", "Epr", "Efg", "Etp", "Esy", "Ewl", "Ejb", "Eur", "Euf", "Ecn"
+ "Enl", "Epr", "Efg", "Etp", "Esy", "Ewl", "Ejb", "Eur", "Euf", "Ecn",
+ "Esm", "Eac", "Epi", "Epu"
};
/**
@@ -2310,7 +2336,8 @@ public abstract class BatteryStats implements Parcelable {
final long totalUptime = computeUptime(rawUptime, which);
final long screenOnTime = getScreenOnTime(rawRealtime, which);
final long interactiveTime = getInteractiveTime(rawRealtime, which);
- final long lowPowerModeEnabledTime = getLowPowerModeEnabledTime(rawRealtime, which);
+ final long powerSaveModeEnabledTime = getPowerSaveModeEnabledTime(rawRealtime, which);
+ final long deviceIdleModeEnabledTime = getDeviceIdleModeEnabledTime(rawRealtime, which);
final int connChanges = getNumConnectivityChange(which);
final long phoneOnTime = getPhoneOnTime(rawRealtime, which);
final long wifiOnTime = getWifiOnTime(rawRealtime, which);
@@ -2382,7 +2409,8 @@ public abstract class BatteryStats implements Parcelable {
fullWakeLockTimeTotal / 1000, partialWakeLockTimeTotal / 1000,
0 /*legacy input event count*/, getMobileRadioActiveTime(rawRealtime, which) / 1000,
getMobileRadioActiveAdjustedTime(which) / 1000, interactiveTime / 1000,
- lowPowerModeEnabledTime / 1000, connChanges);
+ powerSaveModeEnabledTime / 1000, connChanges, deviceIdleModeEnabledTime / 1000,
+ getDeviceIdleModeEnabledCount(which));
// Dump screen brightness stats
Object[] args = new Object[NUM_SCREEN_BRIGHTNESS_BINS];
@@ -2849,7 +2877,8 @@ public abstract class BatteryStats implements Parcelable {
final long screenOnTime = getScreenOnTime(rawRealtime, which);
final long interactiveTime = getInteractiveTime(rawRealtime, which);
- final long lowPowerModeEnabledTime = getLowPowerModeEnabledTime(rawRealtime, which);
+ final long powerSaveModeEnabledTime = getPowerSaveModeEnabledTime(rawRealtime, which);
+ final long deviceIdleModeEnabledTime = getDeviceIdleModeEnabledTime(rawRealtime, which);
final long phoneOnTime = getPhoneOnTime(rawRealtime, which);
final long wifiRunningTime = getGlobalWifiRunningTime(rawRealtime, which);
final long wifiOnTime = getWifiOnTime(rawRealtime, which);
@@ -2884,22 +2913,33 @@ public abstract class BatteryStats implements Parcelable {
}
if (!didOne) sb.append(" (no activity)");
pw.println(sb.toString());
- if (lowPowerModeEnabledTime != 0) {
+ if (powerSaveModeEnabledTime != 0) {
sb.setLength(0);
sb.append(prefix);
- sb.append(" Low power mode enabled: ");
- formatTimeMs(sb, lowPowerModeEnabledTime / 1000);
+ sb.append(" Power save mode enabled: ");
+ formatTimeMs(sb, powerSaveModeEnabledTime / 1000);
sb.append("(");
- sb.append(formatRatioLocked(lowPowerModeEnabledTime, whichBatteryRealtime));
+ sb.append(formatRatioLocked(powerSaveModeEnabledTime, whichBatteryRealtime));
sb.append(")");
pw.println(sb.toString());
}
+ if (deviceIdleModeEnabledTime != 0) {
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Device idling: ");
+ formatTimeMs(sb, deviceIdleModeEnabledTime / 1000);
+ sb.append("(");
+ sb.append(formatRatioLocked(deviceIdleModeEnabledTime, whichBatteryRealtime));
+ sb.append(") "); sb.append(getDeviceIdleModeEnabledCount(which));
+ sb.append("x");
+ pw.println(sb.toString());
+ }
if (phoneOnTime != 0) {
sb.setLength(0);
sb.append(prefix);
sb.append(" Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000);
sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime));
- sb.append(") "); sb.append(getPhoneOnCount(which));
+ sb.append(") "); sb.append(getPhoneOnCount(which)); sb.append("x");
}
int connChanges = getNumConnectivityChange(which);
if (connChanges != 0) {
@@ -4721,7 +4761,7 @@ public abstract class BatteryStats implements Parcelable {
prepareForDumpLocked();
dumpLine(pw, 0 /* uid */, "i" /* category */, VERSION_DATA,
- "12", getParcelVersion(), getStartPlatformVersion(), getEndPlatformVersion());
+ "13", getParcelVersion(), getStartPlatformVersion(), getEndPlatformVersion());
long now = getHistoryBaseTime() + SystemClock.elapsedRealtime();