BatteryStats.java revision f37447bad3773b62176baa837908daf6edb44273
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os; 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.PrintWriter; 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Formatter; 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer; 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.SparseArray; 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class providing access to battery usage statistics, including information on 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wakelocks, processes, packages, and services. All times are represented in microseconds 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * except where indicated otherwise. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class BatteryStats implements Parcelable { 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean LOCAL_LOGV = false; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a partial wake lock timer. 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_PARTIAL = 0; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a full wake lock timer. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_FULL = 1; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a window wake lock timer. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_WINDOW = 2; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a sensor timer. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SENSOR = 3; 42105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 43105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 44617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * A constant indicating a a wifi turn on timer 45617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 46617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 47617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 48617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int WIFI_TURNED_ON = 4; 49617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 50617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 51105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * A constant indicating a full wifi lock timer 52105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 53105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 54105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 55617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int FULL_WIFI_LOCK = 5; 56105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 57105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 58105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * A constant indicating a scan wifi lock timer 59105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 60105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 61105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 62617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCAN_WIFI_LOCK = 6; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 645347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt /** 655347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt * A constant indicating a wifi multicast timer 665347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt * 675347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt * {@hide} 685347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt */ 695347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public static final int WIFI_MULTICAST_ENABLED = 7; 705347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 72244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * A constant indicating an audio turn on timer 73244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * 74244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * {@hide} 75244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani */ 76244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public static final int AUDIO_TURNED_ON = 7; 77244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani 78244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani /** 79244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * A constant indicating a video turn on timer 80244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * 81244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * {@hide} 82244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani */ 83244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public static final int VIDEO_TURNED_ON = 8; 84244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani 85244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani /** 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include all of the data in the stats, including previously saved data. 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_TOTAL = 0; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the last run in the stats. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_LAST = 1; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the current run in the stats. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_CURRENT = 2; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the run since the last time the device was unplugged in the stats. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_UNPLUGGED = 3; 104e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar 105e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // NOTE: Update this list if you add/change any stats above. 106e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // These characters are supposed to represent "total", "last", "current", 107e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // and "unplugged". They were shortened for effeciency sake. 108e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String[] STAT_NAMES = { "t", "l", "c", "u" }; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bump the version on this if the checkin format changes. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 113c64edde69d18498fb2954f71a546357b07ab996aEvan Millar private static final int BATTERY_STATS_CHECKIN_VERSION = 5; 11422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 11522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_KB = 1024; 11622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_MB = 1048576; // 1024^2 11722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_GB = 1073741824; //1024^3 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String APK_DATA = "apk"; 121e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String PROCESS_DATA = "pr"; 122e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SENSOR_DATA = "sr"; 123e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String WAKELOCK_DATA = "wl"; 124c64edde69d18498fb2954f71a546357b07ab996aEvan Millar private static final String KERNEL_WAKELOCK_DATA = "kwl"; 125e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String NETWORK_DATA = "nt"; 126e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String USER_ACTIVITY_DATA = "ua"; 127e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String BATTERY_DATA = "bt"; 128e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String BATTERY_LEVEL_DATA = "lv"; 129e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String WIFI_LOCK_DATA = "wfl"; 130e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String MISC_DATA = "m"; 131e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SCREEN_BRIGHTNESS_DATA = "br"; 132e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SIGNAL_STRENGTH_TIME_DATA = "sgt"; 133f37447bad3773b62176baa837908daf6edb44273Amith Yamasani private static final String SIGNAL_SCANNING_TIME_DATA = "sst"; 134e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SIGNAL_STRENGTH_COUNT_DATA = "sgc"; 135e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String DATA_CONNECTION_TIME_DATA = "dct"; 136e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String DATA_CONNECTION_COUNT_DATA = "dcc"; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1381d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final StringBuilder mFormatBuilder = new StringBuilder(32); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Formatter mFormatter = new Formatter(mFormatBuilder); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 142617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * State for keeping track of counting information. 143617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 144617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static abstract class Counter { 145617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 146617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 147617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the count associated with this Counter for the 148617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * selected type of statistics. 149617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 150617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 151617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 152c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract int getCountLocked(int which); 153617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 154617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 155617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Temporary for debugging. 156617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 157617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void logState(Printer pw, String prefix); 158617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 159617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 160617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * State for keeping track of timing information. 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Timer { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the count associated with this Timer for the 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected type of statistics. 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 171c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract int getCountLocked(int which); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time in microseconds associated with this Timer for the 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected type of statistics. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryRealtime system realtime on battery in microseconds 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a time in microseconds 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 181c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract long getTotalTimeLocked(long batteryRealtime, int which); 182244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Temporary for debugging. 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 186627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract void logState(Printer pw, String prefix); 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular uid. 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Uid { 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing wakelock statistics. 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Wakelock objects. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Wakelock> getWakelockStats(); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular wake lock. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Wakelock { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Timer getWakeTime(int type); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing sensor statistics. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Integer sensor ids to Uid.Sensor objects. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<Integer, ? extends Sensor> getSensorStats(); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing process statistics. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Proc objects. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Proc> getProcessStats(); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing package statistics. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Pkg objects. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Pkg> getPackageStats(); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getUid(); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getTcpBytesReceived(int which); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getTcpBytesSent(int which); 243105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 244617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteWifiTurnedOnLocked(); 245617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteWifiTurnedOffLocked(); 246105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteFullWifiLockAcquiredLocked(); 247105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteFullWifiLockReleasedLocked(); 248105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteScanWifiLockAcquiredLocked(); 249105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteScanWifiLockReleasedLocked(); 2505347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract void noteWifiMulticastEnabledLocked(); 2515347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract void noteWifiMulticastDisabledLocked(); 252244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract void noteAudioTurnedOnLocked(); 253244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract void noteAudioTurnedOffLocked(); 254244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract void noteVideoTurnedOnLocked(); 255244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract void noteVideoTurnedOffLocked(); 256617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract long getWifiTurnedOnTime(long batteryRealtime, int which); 257105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getFullWifiLockTime(long batteryRealtime, int which); 258105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getScanWifiLockTime(long batteryRealtime, int which); 2595347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract long getWifiMulticastTime(long batteryRealtime, 2605347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt int which); 261244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract long getAudioTurnedOnTime(long batteryRealtime, int which); 262244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract long getVideoTurnedOnTime(long batteryRealtime, int which); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 264617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 265617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Note that these must match the constants in android.os.LocalPowerManager. 266617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 267617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn static final String[] USER_ACTIVITY_TYPES = { 268617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn "other", "cheek", "touch", "long_touch", "touch_up", "button", "unknown" 269617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn }; 270617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 271617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int NUM_USER_ACTIVITY_TYPES = 7; 272617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 273617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteUserActivityLocked(int type); 274617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract boolean hasUserActivity(); 275617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getUserActivityCount(int type, int which); 276617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Sensor { 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Magic sensor number for the GPS. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS = -10000; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getHandle(); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Timer getSensorTime(); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular process. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Proc { 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time (in 1/100 sec) spent executing in user code. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getUserTime(int which); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time (in 1/100 sec) spent executing in system code. 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getSystemTime(int which); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times the process has been started. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStarts(int which); 311eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani 312eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani /** 313eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the cpu time spent in microseconds while the process was in the foreground. 314eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * @param which one of STATS_TOTAL, STATS_LAST, STATS_CURRENT or STATS_UNPLUGGED 315eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * @return foreground cpu time in microseconds 316eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani */ 317eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani public abstract long getForegroundTime(int which); 318e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani 319e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani /** 320e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * Returns the approximate cpu time spent in microseconds, at a certain CPU speed. 321e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * @param speedStep the index of the CPU speed. This is not the actual speed of the 322e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * CPU. 323e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * @param which one of STATS_TOTAL, STATS_LAST, STATS_CURRENT or STATS_UNPLUGGED 324e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * @see BatteryStats#getCpuSpeedSteps() 325e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani */ 326e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani public abstract long getTimeAtCpuSpeedStep(int speedStep, int which); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular package. 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Pkg { 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times this package has done something that could wake up the 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * device from sleep. 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getWakeups(int which); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing service statistics. 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Serv> getServiceStats(); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular service. 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract class Serv { 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the amount of time spent started. 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryUptime elapsed uptime on battery in microseconds. 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getStartTime(long batteryUptime, int which); 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total number of times startService() has been called. 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStarts(int which); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total number times the service has been launched. 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getLaunches(int which); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times the device has been started. 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStartCount(); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 384eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the screen has been on while the device was 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running on battery. 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getScreenOnTime(long batteryRealtime, int which); 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 391617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_DARK = 0; 392617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_DIM = 1; 393617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_MEDIUM = 2; 394617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_LIGHT = 3; 395617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_BRIGHT = 4; 396617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 397617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn static final String[] SCREEN_BRIGHTNESS_NAMES = { 398617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn "dark", "dim", "medium", "light", "bright" 399617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn }; 400617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 401617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int NUM_SCREEN_BRIGHTNESS_BINS = 5; 402617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 403617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 404eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the screen has been on with 405617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * the given brightness 406617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 407617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 408617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 409617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract long getScreenBrightnessTime(int brightnessBin, 410617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long batteryRealtime, int which); 411617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 412617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getInputEventCount(int which); 413617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 415eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been on while the device was 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running on battery. 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getPhoneOnTime(long batteryRealtime, int which); 421d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 422627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0; 423627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_POOR = 1; 424627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_MODERATE = 2; 425627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_GOOD = 3; 426627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_GREAT = 4; 427627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 428627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn static final String[] SIGNAL_STRENGTH_NAMES = { 429627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn "none", "poor", "moderate", "good", "great" 430627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn }; 431627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 432627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int NUM_SIGNAL_STRENGTH_BINS = 5; 433627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 434627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn /** 435eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been running with 436627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * the given signal strength. 437627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * 438627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * {@hide} 439627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn */ 440627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract long getPhoneSignalStrengthTime(int strengthBin, 441627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn long batteryRealtime, int which); 442627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 443617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 444f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * Returns the time in microseconds that the phone has been trying to 445f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * acquire a signal. 446f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * 447f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * {@hide} 448f37447bad3773b62176baa837908daf6edb44273Amith Yamasani */ 449f37447bad3773b62176baa837908daf6edb44273Amith Yamasani public abstract long getPhoneSignalScanningTime( 450f37447bad3773b62176baa837908daf6edb44273Amith Yamasani long batteryRealtime, int which); 451f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 452f37447bad3773b62176baa837908daf6edb44273Amith Yamasani /** 453617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the number of times the phone has entered the given signal strength. 454617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 455617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 456617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 457617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getPhoneSignalStrengthCount(int strengthBin, int which); 458617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 459627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_NONE = 0; 460627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_GPRS = 1; 461627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_EDGE = 2; 462627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_UMTS = 3; 463627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_OTHER = 4; 464627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 465627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn static final String[] DATA_CONNECTION_NAMES = { 466627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn "none", "gprs", "edge", "umts", "other" 467627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn }; 468627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 469627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int NUM_DATA_CONNECTION_TYPES = 5; 470627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 471627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn /** 472eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been running with 473627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * the given data connection. 474627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * 475627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * {@hide} 476627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn */ 477627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract long getPhoneDataConnectionTime(int dataType, 478627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn long batteryRealtime, int which); 479627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 481617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the number of times the phone has entered the given data 482617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * connection type. 483617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 484617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 485617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 486617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getPhoneDataConnectionCount(int dataType, int which); 487617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 488617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 489eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that wifi has been on while the device was 490105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * running on battery. 491105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 492105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 493105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 494105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getWifiOnTime(long batteryRealtime, int which); 495d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 496d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood /** 497eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that wifi has been on and the driver has 498d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * been in the running state while the device was running on battery. 499d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * 500d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * {@hide} 501d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood */ 502d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood public abstract long getWifiRunningTime(long batteryRealtime, int which); 503d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 504105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 505eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that bluetooth has been on while the device was 506105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * running on battery. 507105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 508105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 509105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 510105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getBluetoothOnTime(long batteryRealtime, int which); 511105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 512105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return whether we are currently running on battery. 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract boolean getIsOnBattery(); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a SparseArray containing the statistics for each uid. 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract SparseArray<? extends Uid> getUidStats(); 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current battery uptime in microseconds. 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the amount of elapsed realtime in microseconds. 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getBatteryUptime(long curTime); 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5303f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani * @deprecated use getRadioDataUptime 5313f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani */ 5323f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani public long getRadioDataUptimeMs() { 5333f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani return getRadioDataUptime() / 1000; 5343f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani } 5353f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 5363f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani /** 5373f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani * Returns the time that the radio was on for data transfers. 5383f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani * @return the uptime in microseconds while unplugged 5393f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani */ 5403f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani public abstract long getRadioDataUptime(); 5413f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 5423f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani /** 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current battery realtime in microseconds. 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the amount of elapsed realtime in microseconds. 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getBatteryRealtime(long curTime); 548105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 549105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 550633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * Returns the battery percentage level at the last time the device was unplugged from power, or 551633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * the last time it booted on battery power. 552105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 553633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public abstract int getDischargeStartLevel(); 554105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 555105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 556633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * Returns the current battery percentage level if we are in a discharge cycle, otherwise 557633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * returns the level at the last plug event. 558105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 559633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public abstract int getDischargeCurrentLevel(); 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current battery uptime in microseconds. 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the elapsed realtime in microseconds. 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeBatteryUptime(long curTime, int which); 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current battery realtime in microseconds. 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeBatteryRealtime(long curTime, int which); 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current uptime in microseconds. 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeUptime(long curTime, int which); 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current realtime in microseconds. 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * * 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeRealtime(long curTime, int which); 592c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 593c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract Map<String, ? extends Timer> getKernelWakelockStats(); 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 595e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani /** Returns the number of different speeds that the CPU can run at */ 596e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani public abstract int getCpuSpeedSteps(); 597e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani 5981d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTimeRaw(StringBuilder out, long seconds) { 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long days = seconds / (60 * 60 * 24); 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (days != 0) { 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(days); 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("d "); 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long used = days * 60 * 60 * 24; 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long hours = (seconds - used) / (60 * 60); 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (hours != 0 || used != 0) { 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(hours); 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("h "); 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project used += hours * 60 * 60; 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long mins = (seconds-used) / 60; 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mins != 0 || used != 0) { 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(mins); 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("m "); 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project used += mins * 60; 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (seconds != 0 || used != 0) { 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(seconds-used); 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("s "); 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTime(StringBuilder sb, long time) { 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long sec = time / 100; 6281d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeRaw(sb, sec); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append((time - (sec * 100)) * 10); 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("ms "); 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6331d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTimeMs(StringBuilder sb, long time) { 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long sec = time / 1000; 6351d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeRaw(sb, sec); 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(time - (sec * 1000)); 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("ms "); 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final String formatRatioLocked(long num, long den) { 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (den == 0L) { 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "---%"; 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float perc = ((float)num) / ((float)den) * 100; 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFormatBuilder.setLength(0); 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFormatter.format("%.1f%%", perc); 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFormatBuilder.toString(); 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 65022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private final String formatBytesLocked(long bytes) { 65122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatBuilder.setLength(0); 65222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 65322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (bytes < BYTES_PER_KB) { 65422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return bytes + "B"; 65522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else if (bytes < BYTES_PER_MB) { 65622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fKB", bytes / (double) BYTES_PER_KB); 65722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 65822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else if (bytes < BYTES_PER_GB){ 65922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fMB", bytes / (double) BYTES_PER_MB); 66022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 66122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else { 66222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fGB", bytes / (double) BYTES_PER_GB); 66322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 66422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 66522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 66622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sb a StringBuilder object. 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timer a Timer object contining the wakelock times. 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryRealtime the current on-battery time in microseconds. 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name of the wakelock. 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linePrefix a String to be prepended to each line of output. 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line prefix 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String printWakeLock(StringBuilder sb, Timer timer, 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long batteryRealtime, String name, int which, String linePrefix) { 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 682c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTimeMicros = timer.getTotalTimeLocked(batteryRealtime, which); 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long totalTimeMillis = (totalTimeMicros + 500) / 1000; 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 685c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTimeMillis != 0) { 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(linePrefix); 6881d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalTimeMillis); 6891d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn if (name != null) sb.append(name); 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(' '); 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append('('); 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" times)"); 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ", "; 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return linePrefix; 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checkin version of wakelock printer. Prints simple comma-separated list. 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sb a StringBuilder object. 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timer a Timer object contining the wakelock times. 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param now the current time in microseconds. 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name of the wakelock. 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linePrefix a String to be prepended to each line of output. 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line prefix 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String printWakeLockCheckin(StringBuilder sb, Timer timer, long now, 712c64edde69d18498fb2954f71a546357b07ab996aEvan Millar String name, int which, String linePrefix) { 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long totalTimeMicros = 0; 7149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = 0; 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 716c64edde69d18498fb2954f71a546357b07ab996aEvan Millar totalTimeMicros = timer.getTotalTimeLocked(now, which); 717c64edde69d18498fb2954f71a546357b07ab996aEvan Millar count = timer.getCountLocked(which); 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(linePrefix); 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append((totalTimeMicros + 500) / 1000); // microseconds to milliseconds with rounding 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(','); 722c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(name != null ? name + "," : ""); 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ","; 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dump a comma-separated line of values for terse checkin mode. 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw the PageWriter to dump log to 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param category category of data (e.g. "total", "last", "unplugged", "current" ) 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type type of data (e.g. "wakelock", "sensor", "process", "apk" , "process", "network") 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param args type-dependent data arguments 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final void dumpLine(PrintWriter pw, int uid, String category, String type, 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object... args ) { 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(uid); pw.print(','); 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(category); pw.print(','); 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(type); 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Object arg : args) { 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(','); 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(arg); 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print('\n'); 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checkin server version of dump to produce more compact, computer-readable log. 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: all times are expressed in 'ms'. 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fd 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void dumpCheckinLocked(PrintWriter pw, int which) { 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawUptime = SystemClock.uptimeMillis() * 1000; 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawRealtime = SystemClock.elapsedRealtime() * 1000; 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryUptime = getBatteryUptime(rawUptime); 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryRealtime = getBatteryRealtime(rawRealtime); 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalRealtime = computeRealtime(rawRealtime, which); 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalUptime = computeUptime(rawUptime, which); 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long screenOnTime = getScreenOnTime(batteryRealtime, which); 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long phoneOnTime = getPhoneOnTime(batteryRealtime, which); 768105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long wifiOnTime = getWifiOnTime(batteryRealtime, which); 769d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long wifiRunningTime = getWifiRunningTime(batteryRealtime, which); 770105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which); 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(128); 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 77422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar SparseArray<? extends Uid> uidStats = getUidStats(); 77522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar final int NU = uidStats.size(); 77622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String category = STAT_NAMES[which]; 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump "battery" stat 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, 0 /* uid */, category, BATTERY_DATA, 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project which == STATS_TOTAL ? getStartCount() : "N/A", 782617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn whichBatteryRealtime / 1000, whichBatteryUptime / 1000, 783617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn totalRealtime / 1000, totalUptime / 1000); 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 78522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar // Calculate total network and wakelock times across all uids. 78622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long rxTotal = 0; 78722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long txTotal = 0; 78822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long fullWakeLockTimeTotal = 0; 78922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long partialWakeLockTimeTotal = 0; 79022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 79122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (int iu = 0; iu < NU; iu++) { 79222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid u = uidStats.valueAt(iu); 79322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar rxTotal += u.getTcpBytesReceived(which); 79422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar txTotal += u.getTcpBytesSent(which); 79522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 79622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 79722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (wakelocks.size() > 0) { 79822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 79922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar : wakelocks.entrySet()) { 80022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid.Wakelock wl = ent.getValue(); 80122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 80222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); 80322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (fullWakeTimer != null) { 804c64edde69d18498fb2954f71a546357b07ab996aEvan Millar fullWakeLockTimeTotal += fullWakeTimer.getTotalTimeLocked(batteryRealtime, which); 80522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 80622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 80722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); 80822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (partialWakeTimer != null) { 809c64edde69d18498fb2954f71a546357b07ab996aEvan Millar partialWakeLockTimeTotal += partialWakeTimer.getTotalTimeLocked( 81022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 81122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 81222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 81322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 81422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 81522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump misc stats 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, 0 /* uid */, category, MISC_DATA, 818d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood screenOnTime / 1000, phoneOnTime / 1000, wifiOnTime / 1000, 81922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar wifiRunningTime / 1000, bluetoothOnTime / 1000, rxTotal, txTotal, 820617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn fullWakeLockTimeTotal, partialWakeLockTimeTotal, 821617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn getInputEventCount(which)); 822617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 823617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn // Dump screen brightness stats 824617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn Object[] args = new Object[NUM_SCREEN_BRIGHTNESS_BINS]; 825617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 826617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getScreenBrightnessTime(i, batteryRealtime, which) / 1000; 827617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 828617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SCREEN_BRIGHTNESS_DATA, args); 829105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 830627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn // Dump signal strength stats 831617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args = new Object[NUM_SIGNAL_STRENGTH_BINS]; 832627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 833627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args[i] = getPhoneSignalStrengthTime(i, batteryRealtime, which) / 1000; 834627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 835617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_TIME_DATA, args); 836f37447bad3773b62176baa837908daf6edb44273Amith Yamasani dumpLine(pw, 0 /* uid */, category, SIGNAL_SCANNING_TIME_DATA, 837f37447bad3773b62176baa837908daf6edb44273Amith Yamasani getPhoneSignalScanningTime(batteryRealtime, which) / 1000); 838617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 839617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getPhoneSignalStrengthCount(i, which); 840617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 841617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_COUNT_DATA, args); 842627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 843627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn // Dump network type stats 844627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args = new Object[NUM_DATA_CONNECTION_TYPES]; 845627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 846627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args[i] = getPhoneDataConnectionTime(i, batteryRealtime, which) / 1000; 847627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 848617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_TIME_DATA, args); 849617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 850617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getPhoneDataConnectionCount(i, which); 851617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 852617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_COUNT_DATA, args); 853627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 854105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (which == STATS_UNPLUGGED) { 855e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar dumpLine(pw, 0 /* uid */, category, BATTERY_LEVEL_DATA, getDischargeStartLevel(), 856633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar getDischargeCurrentLevel()); 857105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859c64edde69d18498fb2954f71a546357b07ab996aEvan Millar Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats(); 860c64edde69d18498fb2954f71a546357b07ab996aEvan Millar if (kernelWakelocks.size() > 0) { 861c64edde69d18498fb2954f71a546357b07ab996aEvan Millar for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) { 862c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.setLength(0); 863c64edde69d18498fb2954f71a546357b07ab996aEvan Millar printWakeLockCheckin(sb, ent.getValue(), batteryRealtime, null, which, ""); 864c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 865c64edde69d18498fb2954f71a546357b07ab996aEvan Millar dumpLine(pw, 0 /* uid */, category, KERNEL_WAKELOCK_DATA, ent.getKey(), 866c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.toString()); 867c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 868c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 869c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int iu = 0; iu < NU; iu++) { 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int uid = uidStats.keyAt(iu); 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid u = uidStats.valueAt(iu); 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump Network stats per uid, if any 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long rx = u.getTcpBytesReceived(which); 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tx = u.getTcpBytesSent(which); 876105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); 877105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); 878617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long wifiTurnedOnTime = u.getWifiTurnedOnTime(batteryRealtime, which); 879105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (rx > 0 || tx > 0) dumpLine(pw, uid, category, NETWORK_DATA, rx, tx); 881105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 882617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 883617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn || wifiTurnedOnTime != 0) { 884105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project dumpLine(pw, uid, category, WIFI_LOCK_DATA, 885617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn fullWifiLockOnTime, scanWifiLockOnTime, wifiTurnedOnTime); 886105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 888617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (u.hasUserActivity()) { 889617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args = new Object[Uid.NUM_USER_ACTIVITY_TYPES]; 890617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean hasData = false; 891617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<Uid.NUM_USER_ACTIVITY_TYPES; i++) { 892617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn int val = u.getUserActivityCount(i, which); 893617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = val; 894617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (val != 0) hasData = true; 895617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 896617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (hasData) { 897617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, USER_ACTIVITY_DATA, args); 898617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 899617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 900617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakelocks.size() > 0) { 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : wakelocks.entrySet()) { 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Wakelock wl = ent.getValue(); 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String linePrefix = ""; 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 908c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), 909c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "f", which, linePrefix); 910c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), 911c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "p", which, linePrefix); 912c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), 913c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "w", which, linePrefix); 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Only log if we had at lease one wakelock... 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sb.length() > 0) { 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, WAKELOCK_DATA, ent.getKey(), sb.toString()); 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<Integer, ? extends BatteryStats.Uid.Sensor> sensors = u.getSensorStats(); 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sensors.size() > 0) { 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> ent 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : sensors.entrySet()) { 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Sensor se = ent.getValue(); 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int sensorNumber = ent.getKey(); 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Timer timer = se.getSensorTime(); 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 9309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 931c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTime = (timer.getTotalTimeLocked(batteryRealtime, which) + 500) / 1000; 932c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTime != 0) { 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, SENSOR_DATA, sensorNumber, totalTime, count); 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats(); 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (processStats.size() > 0) { 9429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent 9439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : processStats.entrySet()) { 9449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Proc ps = ent.getValue(); 9459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long userTime = ps.getUserTime(which); 9479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long systemTime = ps.getSystemTime(which); 9489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ps.getStarts(which); 9499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (userTime != 0 || systemTime != 0 || starts != 0) { 9519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, PROCESS_DATA, 9529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ent.getKey(), // proc 9539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project userTime * 10, // cpu time in ms 9549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project systemTime * 10, // user time in ms 9559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts); // process starts 9569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Pkg> packageStats = u.getPackageStats(); 9619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (packageStats.size() > 0) { 9629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent 9639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : packageStats.entrySet()) { 9649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Pkg ps = ent.getValue(); 9669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int wakeups = ps.getWakeups(which); 9679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats(); 9689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent 9699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : serviceStats.entrySet()) { 9709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStats.Uid.Pkg.Serv ss = sent.getValue(); 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = ss.getStartTime(batteryUptime, which); 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ss.getStarts(which); 9739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int launches = ss.getLaunches(which); 9749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startTime != 0 || starts != 0 || launches != 0) { 9759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, APK_DATA, 9769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wakeups, // wakeup alarms 9779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ent.getKey(), // Apk 9789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sent.getKey(), // service 9799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startTime / 1000, // time spent started, in ms 9809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts, 9819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project launches); 9829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 9901d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final void dumpLocked(PrintWriter pw, String prefix, int which) { 9919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawUptime = SystemClock.uptimeMillis() * 1000; 9929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawRealtime = SystemClock.elapsedRealtime() * 1000; 9939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryUptime = getBatteryUptime(rawUptime); 994d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long batteryRealtime = getBatteryRealtime(rawRealtime); 9959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); 9979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); 9989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalRealtime = computeRealtime(rawRealtime, which); 9999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalUptime = computeUptime(rawUptime, which); 10009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(128); 100222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 100322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar SparseArray<? extends Uid> uidStats = getUidStats(); 100422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar final int NU = uidStats.size(); 10059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10061d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 10071d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 10081d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Time on battery: "); 10091d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("("); 10101d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime)); 10111d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(") realtime, "); 10121d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, whichBatteryUptime / 1000); 10131d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime)); 10141d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(") uptime"); 10151d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 10161d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 10171d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 10181d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Total run time: "); 10191d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalRealtime / 1000); 10201d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("realtime, "); 10211d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalUptime / 1000); 10221d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("uptime, "); 10231d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 10249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1025105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long screenOnTime = getScreenOnTime(batteryRealtime, which); 1026105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long phoneOnTime = getPhoneOnTime(batteryRealtime, which); 1027d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long wifiRunningTime = getWifiRunningTime(batteryRealtime, which); 1028105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long wifiOnTime = getWifiOnTime(batteryRealtime, which); 1029105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which); 1030617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.setLength(0); 10311d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 10321d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Screen on: "); formatTimeMs(sb, screenOnTime / 1000); 10331d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(screenOnTime, whichBatteryRealtime)); 10341d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Input events: "); sb.append(getInputEventCount(which)); 10351d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000); 10361d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime)); 10371d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(")"); 10381d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 10391d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 10401d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 1041617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Screen brightnesses: "); 1042617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean didOne = false; 1043617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 1044617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn final long time = getScreenBrightnessTime(i, batteryRealtime, which); 1045617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (time == 0) { 1046617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn continue; 1047617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1048617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (didOne) sb.append(", "); 1049617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn didOne = true; 1050617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(SCREEN_BRIGHTNESS_NAMES[i]); 1051617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" "); 10521d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 1053617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("("); 1054617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(formatRatioLocked(time, screenOnTime)); 1055617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(")"); 1056617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1057617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (!didOne) sb.append("No activity"); 1058617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(sb.toString()); 1059105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 106022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar // Calculate total network and wakelock times across all uids. 106122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long rxTotal = 0; 106222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long txTotal = 0; 106322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long fullWakeLockTimeTotalMicros = 0; 106422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long partialWakeLockTimeTotalMicros = 0; 106522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 1066c64edde69d18498fb2954f71a546357b07ab996aEvan Millar Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats(); 1067c64edde69d18498fb2954f71a546357b07ab996aEvan Millar if (kernelWakelocks.size() > 0) { 1068c64edde69d18498fb2954f71a546357b07ab996aEvan Millar for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) { 1069c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 1070c64edde69d18498fb2954f71a546357b07ab996aEvan Millar String linePrefix = ": "; 1071c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.setLength(0); 1072c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(prefix); 1073c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(" Kernel Wake lock "); 1074c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(ent.getKey()); 1075c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLock(sb, ent.getValue(), batteryRealtime, null, which, 1076c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix); 1077c64edde69d18498fb2954f71a546357b07ab996aEvan Millar if (!linePrefix.equals(": ")) { 1078c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(" realtime"); 1079c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } else { 1080c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(": (nothing executed)"); 1081c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1082c64edde69d18498fb2954f71a546357b07ab996aEvan Millar pw.println(sb.toString()); 1083c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1084c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1085c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 108622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (int iu = 0; iu < NU; iu++) { 108722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid u = uidStats.valueAt(iu); 108822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar rxTotal += u.getTcpBytesReceived(which); 108922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar txTotal += u.getTcpBytesSent(which); 109022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 109122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 109222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (wakelocks.size() > 0) { 109322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 109422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar : wakelocks.entrySet()) { 109522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid.Wakelock wl = ent.getValue(); 109622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 109722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); 109822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (fullWakeTimer != null) { 1099c64edde69d18498fb2954f71a546357b07ab996aEvan Millar fullWakeLockTimeTotalMicros += fullWakeTimer.getTotalTimeLocked( 110022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 110122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 110222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 110322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); 110422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (partialWakeTimer != null) { 1105c64edde69d18498fb2954f71a546357b07ab996aEvan Millar partialWakeLockTimeTotalMicros += partialWakeTimer.getTotalTimeLocked( 110622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 110722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 110822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 110922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 111022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 111122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 11121d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); 11131d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(" Total received: "); pw.print(formatBytesLocked(rxTotal)); 11141d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(", Total sent: "); pw.println(formatBytesLocked(txTotal)); 11151d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 11161d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 11171d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Total full wakelock time: "); formatTimeMs(sb, 11181d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn (fullWakeLockTimeTotalMicros + 500) / 1000); 11191d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", Total partial waklock time: "); formatTimeMs(sb, 11201d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn (partialWakeLockTimeTotalMicros + 500) / 1000); 11211d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 112222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 1123627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.setLength(0); 11241d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 1125617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Signal levels: "); 1126617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn didOne = false; 1127627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 1128627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn final long time = getPhoneSignalStrengthTime(i, batteryRealtime, which); 1129627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (time == 0) { 1130627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn continue; 1131627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1132627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (didOne) sb.append(", "); 1133627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = true; 1134627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(SIGNAL_STRENGTH_NAMES[i]); 1135627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(" "); 11361d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 1137627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append("("); 1138627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 1139617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(") "); 1140617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(getPhoneSignalStrengthCount(i, which)); 1141617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("x"); 1142627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1143627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (!didOne) sb.append("No activity"); 1144627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn pw.println(sb.toString()); 1145f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 1146f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.setLength(0); 1147f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.append(prefix); 1148f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.append(" Signal scanning time: "); 1149f37447bad3773b62176baa837908daf6edb44273Amith Yamasani formatTimeMs(sb, getPhoneSignalScanningTime(batteryRealtime, which) / 1000); 1150f37447bad3773b62176baa837908daf6edb44273Amith Yamasani pw.println(sb.toString()); 1151f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 1152627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.setLength(0); 11531d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 1154617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Radio types: "); 1155627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = false; 1156627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 1157627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn final long time = getPhoneDataConnectionTime(i, batteryRealtime, which); 1158627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (time == 0) { 1159627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn continue; 1160627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1161627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (didOne) sb.append(", "); 1162627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = true; 1163627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(DATA_CONNECTION_NAMES[i]); 1164627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(" "); 11651d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 1166627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append("("); 1167627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 1168617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(") "); 1169617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(getPhoneDataConnectionCount(i, which)); 1170617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("x"); 1171627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1172627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (!didOne) sb.append("No activity"); 1173627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn pw.println(sb.toString()); 11743f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 11753f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.setLength(0); 11763f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(prefix); 11773f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(" Radio data uptime when unplugged: "); 11783f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(getRadioDataUptime() / 1000); 11793f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(" ms"); 11803f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani pw.println(sb.toString()); 11813f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 11821d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 11831d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 11841d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000); 11851d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiOnTime, whichBatteryRealtime)); 11861d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Wifi running: "); formatTimeMs(sb, wifiRunningTime / 1000); 11871d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiRunningTime, whichBatteryRealtime)); 11881d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Bluetooth on: "); formatTimeMs(sb, bluetoothOnTime / 1000); 11891d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(bluetoothOnTime, whichBatteryRealtime)); 11901d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(")"); 11911d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 1192617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1193105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project pw.println(" "); 1194105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1195105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (which == STATS_UNPLUGGED) { 1196105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (getIsOnBattery()) { 11971d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" Device is currently unplugged"); 11981d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Discharge cycle start level: "); 11991d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeStartLevel()); 12001d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Discharge cycle current level: "); 12011d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeCurrentLevel()); 1202105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } else { 12031d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" Device is currently plugged into power"); 12041d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Last discharge cycle start level: "); 12051d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeStartLevel()); 12061d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Last discharge cycle end level: "); 12071d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeCurrentLevel()); 1208105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 1209617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(" "); 1210105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 121222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int iu=0; iu<NU; iu++) { 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int uid = uidStats.keyAt(iu); 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid u = uidStats.valueAt(iu); 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + " #" + uid + ":"); 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean uidActivity = false; 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tcpReceived = u.getTcpBytesReceived(which); 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tcpSent = u.getTcpBytesSent(which); 1221105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); 1222105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); 1223617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long wifiTurnedOnTime = u.getWifiTurnedOnTime(batteryRealtime, which); 1224105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (tcpReceived != 0 || tcpSent != 0) { 12261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Network: "); 12271d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(formatBytesLocked(tcpReceived)); pw.print(" received, "); 12281d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(formatBytesLocked(tcpSent)); pw.println(" sent"); 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1230617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1231617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (u.hasUserActivity()) { 1232617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean hasData = false; 1233617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 1234617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn int val = u.getUserActivityCount(i, which); 1235617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (val != 0) { 1236617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (!hasData) { 1237617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.setLength(0); 1238617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" User activity: "); 1239617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn hasData = true; 1240617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } else { 1241617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(", "); 1242617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1243617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(val); 1244617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" "); 1245617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(Uid.USER_ACTIVITY_TYPES[i]); 1246617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1247617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1248617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (hasData) { 1249617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(sb.toString()); 1250617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1251617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1252617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1253617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 1254617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn || wifiTurnedOnTime != 0) { 12551d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 12561d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Turned Wifi On: "); 12571d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, wifiTurnedOnTime / 1000); 12581d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiTurnedOnTime, 12591d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")\n"); 12601d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Full Wifi Lock: "); 12611d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, fullWifiLockOnTime / 1000); 12621d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime, 12631d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")\n"); 12641d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Scan Wifi Lock: "); 12651d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, scanWifiLockOnTime / 1000); 12661d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(scanWifiLockOnTime, 12671d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")"); 12681d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 1269105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakelocks.size() > 0) { 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : wakelocks.entrySet()) { 12759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Wakelock wl = ent.getValue(); 12769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String linePrefix = ": "; 12779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 12789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(prefix); 12799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" Wake lock "); 12809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(ent.getKey()); 12819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), batteryRealtime, 12829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "full", which, linePrefix); 12839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), batteryRealtime, 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "partial", which, linePrefix); 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), batteryRealtime, 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "window", which, linePrefix); 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!linePrefix.equals(": ")) { 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" realtime"); 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(": (nothing executed)"); 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(sb.toString()); 12939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<Integer, ? extends BatteryStats.Uid.Sensor> sensors = u.getSensorStats(); 12989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sensors.size() > 0) { 12999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> ent 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : sensors.entrySet()) { 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Sensor se = ent.getValue(); 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int sensorNumber = ent.getKey(); 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(prefix); 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" Sensor "); 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int handle = se.getHandle(); 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handle == Uid.Sensor.GPS) { 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("GPS"); 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(handle); 13119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(": "); 13139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Timer timer = se.getSensorTime(); 13159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 13169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 1317c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTime = (timer.getTotalTimeLocked( 1318c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, which) + 500) / 1000; 1319c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 13209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //timer.logState(); 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTime != 0) { 13221d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalTime); 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("realtime ("); 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" times)"); 13269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("(not used)"); 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("(not used)"); 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(sb.toString()); 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats(); 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (processStats.size() > 0) { 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : processStats.entrySet()) { 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Proc ps = ent.getValue(); 13439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long userTime; 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long systemTime; 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts; 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project userTime = ps.getUserTime(which); 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project systemTime = ps.getSystemTime(which); 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts = ps.getStarts(which); 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (userTime != 0 || systemTime != 0 || starts != 0) { 13521d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 13531d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Proc "); 13541d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(ent.getKey()); sb.append(":\n"); 13551d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" CPU: "); 13561d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTime(sb, userTime); sb.append("usr + "); 13571d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTime(sb, systemTime); sb.append("krn\n"); 13581d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" "); sb.append(starts); 13591d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" proc starts"); 13601d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Pkg> packageStats = u.getPackageStats(); 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (packageStats.size() > 0) { 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : packageStats.entrySet()) { 13701d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Apk "); pw.print(ent.getKey()); pw.println(":"); 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean apkActivity = false; 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Pkg ps = ent.getValue(); 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int wakeups = ps.getWakeups(which); 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakeups != 0) { 13751d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" "); 13761d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(wakeups); pw.println(" wakeup alarms"); 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project apkActivity = true; 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats(); 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (serviceStats.size() > 0) { 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent 13829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : serviceStats.entrySet()) { 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStats.Uid.Pkg.Serv ss = sent.getValue(); 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = ss.getStartTime(batteryUptime, which); 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ss.getStarts(which); 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int launches = ss.getLaunches(which); 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startTime != 0 || starts != 0 || launches != 0) { 13881d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 13891d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Service "); 13901d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(sent.getKey()); sb.append(":\n"); 13911d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Created for: "); 13921d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, startTime / 1000); 13931d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" uptime\n"); 13941d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Starts: "); 13951d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(starts); 13961d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", launches: "); sb.append(launches); 13971d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 13989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project apkActivity = true; 13999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!apkActivity) { 14031d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" (nothing executed)"); 14049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 14069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!uidActivity) { 14091d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" (nothing executed)"); 14109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 14159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dumps a human-readable summary of the battery statistics to the given PrintWriter. 14169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 14179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw a Printer to receive the dump output. 14189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 14199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 14201d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn public void dumpLocked(PrintWriter pw) { 14219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println("Total Statistics (Current and Historic):"); 14229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(" System starts: " + getStartCount() 14239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", currently on battery: " + getIsOnBattery()); 14249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLocked(pw, "", STATS_TOTAL); 14259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(""); 14269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println("Last Run Statistics (Previous run of system):"); 14279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLocked(pw, "", STATS_LAST); 14289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(""); 14299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println("Current Battery Statistics (Currently running system):"); 14309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLocked(pw, "", STATS_CURRENT); 14319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(""); 14329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println("Unplugged Statistics (Since last unplugged from power):"); 14339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLocked(pw, "", STATS_UNPLUGGED); 14349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void dumpCheckinLocked(PrintWriter pw, String[] args) { 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isUnpluggedOnly = false; 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (String arg : args) { 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ("-u".equals(arg)) { 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_LOGV) Log.v("BatteryStats", "Dumping unplugged data"); 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isUnpluggedOnly = true; 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isUnpluggedOnly) { 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_UNPLUGGED); 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else { 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_TOTAL); 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_LAST); 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_UNPLUGGED); 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_CURRENT); 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1459