BatteryStats.java revision 5347bd4cda2b6afc18f8acab48e52131f35ed13c
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 /** 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include all of the data in the stats, including previously saved data. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_TOTAL = 0; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the last run in the stats. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_LAST = 1; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the current run in the stats. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_CURRENT = 2; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the run since the last time the device was unplugged in the stats. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_UNPLUGGED = 3; 90e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar 91e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // NOTE: Update this list if you add/change any stats above. 92e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // These characters are supposed to represent "total", "last", "current", 93e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // and "unplugged". They were shortened for effeciency sake. 94e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String[] STAT_NAMES = { "t", "l", "c", "u" }; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bump the version on this if the checkin format changes. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 99c64edde69d18498fb2954f71a546357b07ab996aEvan Millar private static final int BATTERY_STATS_CHECKIN_VERSION = 5; 10022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 10122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_KB = 1024; 10222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_MB = 1048576; // 1024^2 10322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_GB = 1073741824; //1024^3 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String APK_DATA = "apk"; 107e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String PROCESS_DATA = "pr"; 108e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SENSOR_DATA = "sr"; 109e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String WAKELOCK_DATA = "wl"; 110c64edde69d18498fb2954f71a546357b07ab996aEvan Millar private static final String KERNEL_WAKELOCK_DATA = "kwl"; 111e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String NETWORK_DATA = "nt"; 112e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String USER_ACTIVITY_DATA = "ua"; 113e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String BATTERY_DATA = "bt"; 114e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String BATTERY_LEVEL_DATA = "lv"; 115e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String WIFI_LOCK_DATA = "wfl"; 116e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String MISC_DATA = "m"; 117e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SCREEN_BRIGHTNESS_DATA = "br"; 118e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SIGNAL_STRENGTH_TIME_DATA = "sgt"; 119e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SIGNAL_STRENGTH_COUNT_DATA = "sgc"; 120e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String DATA_CONNECTION_TIME_DATA = "dct"; 121e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String DATA_CONNECTION_COUNT_DATA = "dcc"; 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1231d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final StringBuilder mFormatBuilder = new StringBuilder(32); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Formatter mFormatter = new Formatter(mFormatBuilder); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 127617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * State for keeping track of counting information. 128617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 129617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static abstract class Counter { 130617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 131617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 132617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the count associated with this Counter for the 133617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * selected type of statistics. 134617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 135617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 136617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 137c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract int getCountLocked(int which); 138617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 139617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 140617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Temporary for debugging. 141617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 142617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void logState(Printer pw, String prefix); 143617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 144617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 145617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * State for keeping track of timing information. 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Timer { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the count associated with this Timer for the 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected type of statistics. 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 156c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract int getCountLocked(int which); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time in microseconds associated with this Timer for the 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected type of statistics. 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryRealtime system realtime on battery in microseconds 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a time in microseconds 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 166c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract long getTotalTimeLocked(long batteryRealtime, int which); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Temporary for debugging. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 171627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract void logState(Printer pw, String prefix); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular uid. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Uid { 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing wakelock statistics. 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Wakelock objects. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Wakelock> getWakelockStats(); 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular wake lock. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Wakelock { 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Timer getWakeTime(int type); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing sensor statistics. 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Integer sensor ids to Uid.Sensor objects. 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<Integer, ? extends Sensor> getSensorStats(); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing process statistics. 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Proc objects. 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Proc> getProcessStats(); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing package statistics. 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Pkg objects. 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Pkg> getPackageStats(); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getUid(); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getTcpBytesReceived(int which); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getTcpBytesSent(int which); 228105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 229617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteWifiTurnedOnLocked(); 230617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteWifiTurnedOffLocked(); 231105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteFullWifiLockAcquiredLocked(); 232105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteFullWifiLockReleasedLocked(); 233105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteScanWifiLockAcquiredLocked(); 234105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteScanWifiLockReleasedLocked(); 2355347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract void noteWifiMulticastEnabledLocked(); 2365347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract void noteWifiMulticastDisabledLocked(); 237617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract long getWifiTurnedOnTime(long batteryRealtime, int which); 238105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getFullWifiLockTime(long batteryRealtime, int which); 239105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getScanWifiLockTime(long batteryRealtime, int which); 2405347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract long getWifiMulticastTime(long batteryRealtime, 2415347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt int which); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 243617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 244617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Note that these must match the constants in android.os.LocalPowerManager. 245617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 246617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn static final String[] USER_ACTIVITY_TYPES = { 247617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn "other", "cheek", "touch", "long_touch", "touch_up", "button", "unknown" 248617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn }; 249617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 250617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int NUM_USER_ACTIVITY_TYPES = 7; 251617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 252617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteUserActivityLocked(int type); 253617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract boolean hasUserActivity(); 254617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getUserActivityCount(int type, int which); 255617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Sensor { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Magic sensor number for the GPS. 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS = -10000; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getHandle(); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Timer getSensorTime(); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular process. 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Proc { 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time (in 1/100 sec) spent executing in user code. 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getUserTime(int which); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time (in 1/100 sec) spent executing in system code. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getSystemTime(int which); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times the process has been started. 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStarts(int which); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular package. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Pkg { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times this package has done something that could wake up the 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * device from sleep. 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 int getWakeups(int which); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing service statistics. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Serv> getServiceStats(); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular service. 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract class Serv { 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the amount of time spent started. 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryUptime elapsed uptime on battery in microseconds. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getStartTime(long batteryUptime, int which); 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total number of times startService() has been called. 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStarts(int which); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total number times the service has been launched. 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getLaunches(int which); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times the device has been started. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStartCount(); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time in milliseconds that the screen has been on while the device was 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running on battery. 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getScreenOnTime(long batteryRealtime, int which); 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 354617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_DARK = 0; 355617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_DIM = 1; 356617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_MEDIUM = 2; 357617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_LIGHT = 3; 358617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_BRIGHT = 4; 359617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 360617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn static final String[] SCREEN_BRIGHTNESS_NAMES = { 361617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn "dark", "dim", "medium", "light", "bright" 362617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn }; 363617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 364617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int NUM_SCREEN_BRIGHTNESS_BINS = 5; 365617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 366617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 367617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the time in milliseconds that the screen has been on with 368617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * the given brightness 369617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 370617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 371617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 372617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract long getScreenBrightnessTime(int brightnessBin, 373617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long batteryRealtime, int which); 374617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 375617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getInputEventCount(int which); 376617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the time in milliseconds that the phone has been on while the device was 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running on battery. 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getPhoneOnTime(long batteryRealtime, int which); 384d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 385627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0; 386627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_POOR = 1; 387627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_MODERATE = 2; 388627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_GOOD = 3; 389627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_GREAT = 4; 390627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 391627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn static final String[] SIGNAL_STRENGTH_NAMES = { 392627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn "none", "poor", "moderate", "good", "great" 393627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn }; 394627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 395627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int NUM_SIGNAL_STRENGTH_BINS = 5; 396627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 397627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn /** 398627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * Returns the time in milliseconds that the phone has been running with 399627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * the given signal strength. 400627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * 401627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * {@hide} 402627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn */ 403627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract long getPhoneSignalStrengthTime(int strengthBin, 404627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn long batteryRealtime, int which); 405627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 406617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 407617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the number of times the phone has entered the given signal strength. 408617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 409617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 410617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 411617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getPhoneSignalStrengthCount(int strengthBin, int which); 412617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 413627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_NONE = 0; 414627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_GPRS = 1; 415627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_EDGE = 2; 416627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_UMTS = 3; 417627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_OTHER = 4; 418627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 419627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn static final String[] DATA_CONNECTION_NAMES = { 420627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn "none", "gprs", "edge", "umts", "other" 421627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn }; 422627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 423627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int NUM_DATA_CONNECTION_TYPES = 5; 424627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 425627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn /** 426627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * Returns the time in milliseconds that the phone has been running with 427627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * the given data connection. 428627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * 429627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * {@hide} 430627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn */ 431627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract long getPhoneDataConnectionTime(int dataType, 432627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn long batteryRealtime, int which); 433627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 435617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the number of times the phone has entered the given data 436617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * connection type. 437617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 438617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 439617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 440617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getPhoneDataConnectionCount(int dataType, int which); 441617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 442617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 443105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Returns the time in milliseconds that wifi has been on while the device was 444105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * running on battery. 445105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 446105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 447105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 448105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getWifiOnTime(long batteryRealtime, int which); 449d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 450d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood /** 451d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * Returns the time in milliseconds that wifi has been on and the driver has 452d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * been in the running state while the device was running on battery. 453d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * 454d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * {@hide} 455d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood */ 456d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood public abstract long getWifiRunningTime(long batteryRealtime, int which); 457d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 458105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 459105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * Returns the time in milliseconds that bluetooth has been on while the device was 460105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * running on battery. 461105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 462105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 463105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 464105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getBluetoothOnTime(long batteryRealtime, int which); 465105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 466105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return whether we are currently running on battery. 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract boolean getIsOnBattery(); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a SparseArray containing the statistics for each uid. 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract SparseArray<? extends Uid> getUidStats(); 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current battery uptime in microseconds. 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the amount of elapsed realtime in microseconds. 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getBatteryUptime(long curTime); 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current battery realtime in microseconds. 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the amount of elapsed realtime in microseconds. 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getBatteryRealtime(long curTime); 489105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 490105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 491633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * Returns the battery percentage level at the last time the device was unplugged from power, or 492633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * the last time it booted on battery power. 493105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 494633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public abstract int getDischargeStartLevel(); 495105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 496105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 497633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * Returns the current battery percentage level if we are in a discharge cycle, otherwise 498633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * returns the level at the last plug event. 499105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 500633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public abstract int getDischargeCurrentLevel(); 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current battery uptime in microseconds. 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the elapsed realtime in microseconds. 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeBatteryUptime(long curTime, int which); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current battery realtime in microseconds. 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeBatteryRealtime(long curTime, int which); 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current uptime in microseconds. 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeUptime(long curTime, int which); 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current realtime in microseconds. 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * * 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeRealtime(long curTime, int which); 533c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 534c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract Map<String, ? extends Timer> getKernelWakelockStats(); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5361d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTimeRaw(StringBuilder out, long seconds) { 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long days = seconds / (60 * 60 * 24); 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (days != 0) { 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(days); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("d "); 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long used = days * 60 * 60 * 24; 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long hours = (seconds - used) / (60 * 60); 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (hours != 0 || used != 0) { 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(hours); 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("h "); 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project used += hours * 60 * 60; 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long mins = (seconds-used) / 60; 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mins != 0 || used != 0) { 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(mins); 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("m "); 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project used += mins * 60; 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (seconds != 0 || used != 0) { 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(seconds-used); 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("s "); 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5641d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTime(StringBuilder sb, long time) { 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long sec = time / 100; 5661d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeRaw(sb, sec); 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append((time - (sec * 100)) * 10); 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("ms "); 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5711d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTimeMs(StringBuilder sb, long time) { 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long sec = time / 1000; 5731d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeRaw(sb, sec); 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(time - (sec * 1000)); 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("ms "); 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final String formatRatioLocked(long num, long den) { 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (den == 0L) { 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "---%"; 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float perc = ((float)num) / ((float)den) * 100; 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFormatBuilder.setLength(0); 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFormatter.format("%.1f%%", perc); 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFormatBuilder.toString(); 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 58822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private final String formatBytesLocked(long bytes) { 58922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatBuilder.setLength(0); 59022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 59122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (bytes < BYTES_PER_KB) { 59222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return bytes + "B"; 59322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else if (bytes < BYTES_PER_MB) { 59422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fKB", bytes / (double) BYTES_PER_KB); 59522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 59622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else if (bytes < BYTES_PER_GB){ 59722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fMB", bytes / (double) BYTES_PER_MB); 59822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 59922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else { 60022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fGB", bytes / (double) BYTES_PER_GB); 60122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 60222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 60322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 60422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sb a StringBuilder object. 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timer a Timer object contining the wakelock times. 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryRealtime the current on-battery time in microseconds. 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name of the wakelock. 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linePrefix a String to be prepended to each line of output. 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line prefix 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String printWakeLock(StringBuilder sb, Timer timer, 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long batteryRealtime, String name, int which, String linePrefix) { 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 620c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTimeMicros = timer.getTotalTimeLocked(batteryRealtime, which); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long totalTimeMillis = (totalTimeMicros + 500) / 1000; 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 623c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTimeMillis != 0) { 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(linePrefix); 6261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalTimeMillis); 6271d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn if (name != null) sb.append(name); 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(' '); 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append('('); 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" times)"); 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ", "; 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return linePrefix; 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checkin version of wakelock printer. Prints simple comma-separated list. 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sb a StringBuilder object. 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timer a Timer object contining the wakelock times. 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param now the current time in microseconds. 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name of the wakelock. 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linePrefix a String to be prepended to each line of output. 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line prefix 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String printWakeLockCheckin(StringBuilder sb, Timer timer, long now, 650c64edde69d18498fb2954f71a546357b07ab996aEvan Millar String name, int which, String linePrefix) { 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long totalTimeMicros = 0; 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = 0; 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 654c64edde69d18498fb2954f71a546357b07ab996aEvan Millar totalTimeMicros = timer.getTotalTimeLocked(now, which); 655c64edde69d18498fb2954f71a546357b07ab996aEvan Millar count = timer.getCountLocked(which); 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(linePrefix); 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append((totalTimeMicros + 500) / 1000); // microseconds to milliseconds with rounding 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(','); 660c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(name != null ? name + "," : ""); 6619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ","; 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dump a comma-separated line of values for terse checkin mode. 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw the PageWriter to dump log to 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param category category of data (e.g. "total", "last", "unplugged", "current" ) 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type type of data (e.g. "wakelock", "sensor", "process", "apk" , "process", "network") 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param args type-dependent data arguments 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final void dumpLine(PrintWriter pw, int uid, String category, String type, 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object... args ) { 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(uid); pw.print(','); 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(category); pw.print(','); 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(type); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Object arg : args) { 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(','); 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(arg); 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print('\n'); 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checkin server version of dump to produce more compact, computer-readable log. 6899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: all times are expressed in 'ms'. 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fd 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final void dumpCheckinLocked(PrintWriter pw, int which) { 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawUptime = SystemClock.uptimeMillis() * 1000; 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawRealtime = SystemClock.elapsedRealtime() * 1000; 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryUptime = getBatteryUptime(rawUptime); 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryRealtime = getBatteryRealtime(rawRealtime); 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalRealtime = computeRealtime(rawRealtime, which); 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalUptime = computeUptime(rawUptime, which); 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long screenOnTime = getScreenOnTime(batteryRealtime, which); 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long phoneOnTime = getPhoneOnTime(batteryRealtime, which); 706105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long wifiOnTime = getWifiOnTime(batteryRealtime, which); 707d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long wifiRunningTime = getWifiRunningTime(batteryRealtime, which); 708105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which); 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(128); 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 71222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar SparseArray<? extends Uid> uidStats = getUidStats(); 71322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar final int NU = uidStats.size(); 71422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 7159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String category = STAT_NAMES[which]; 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump "battery" stat 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, 0 /* uid */, category, BATTERY_DATA, 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project which == STATS_TOTAL ? getStartCount() : "N/A", 720617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn whichBatteryRealtime / 1000, whichBatteryUptime / 1000, 721617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn totalRealtime / 1000, totalUptime / 1000); 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 72322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar // Calculate total network and wakelock times across all uids. 72422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long rxTotal = 0; 72522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long txTotal = 0; 72622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long fullWakeLockTimeTotal = 0; 72722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long partialWakeLockTimeTotal = 0; 72822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 72922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (int iu = 0; iu < NU; iu++) { 73022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid u = uidStats.valueAt(iu); 73122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar rxTotal += u.getTcpBytesReceived(which); 73222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar txTotal += u.getTcpBytesSent(which); 73322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 73422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 73522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (wakelocks.size() > 0) { 73622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 73722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar : wakelocks.entrySet()) { 73822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid.Wakelock wl = ent.getValue(); 73922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 74022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); 74122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (fullWakeTimer != null) { 742c64edde69d18498fb2954f71a546357b07ab996aEvan Millar fullWakeLockTimeTotal += fullWakeTimer.getTotalTimeLocked(batteryRealtime, which); 74322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 74422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 74522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); 74622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (partialWakeTimer != null) { 747c64edde69d18498fb2954f71a546357b07ab996aEvan Millar partialWakeLockTimeTotal += partialWakeTimer.getTotalTimeLocked( 74822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 74922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 75022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 75122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 75222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 75322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump misc stats 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, 0 /* uid */, category, MISC_DATA, 756d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood screenOnTime / 1000, phoneOnTime / 1000, wifiOnTime / 1000, 75722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar wifiRunningTime / 1000, bluetoothOnTime / 1000, rxTotal, txTotal, 758617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn fullWakeLockTimeTotal, partialWakeLockTimeTotal, 759617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn getInputEventCount(which)); 760617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 761617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn // Dump screen brightness stats 762617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn Object[] args = new Object[NUM_SCREEN_BRIGHTNESS_BINS]; 763617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 764617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getScreenBrightnessTime(i, batteryRealtime, which) / 1000; 765617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 766617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SCREEN_BRIGHTNESS_DATA, args); 767105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 768627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn // Dump signal strength stats 769617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args = new Object[NUM_SIGNAL_STRENGTH_BINS]; 770627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 771627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args[i] = getPhoneSignalStrengthTime(i, batteryRealtime, which) / 1000; 772627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 773617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_TIME_DATA, args); 774617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 775617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getPhoneSignalStrengthCount(i, which); 776617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 777617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_COUNT_DATA, args); 778627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 779627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn // Dump network type stats 780627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args = new Object[NUM_DATA_CONNECTION_TYPES]; 781627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 782627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args[i] = getPhoneDataConnectionTime(i, batteryRealtime, which) / 1000; 783627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 784617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_TIME_DATA, args); 785617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 786617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getPhoneDataConnectionCount(i, which); 787617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 788617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_COUNT_DATA, args); 789627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 790105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (which == STATS_UNPLUGGED) { 791e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar dumpLine(pw, 0 /* uid */, category, BATTERY_LEVEL_DATA, getDischargeStartLevel(), 792633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar getDischargeCurrentLevel()); 793105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 795c64edde69d18498fb2954f71a546357b07ab996aEvan Millar Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats(); 796c64edde69d18498fb2954f71a546357b07ab996aEvan Millar if (kernelWakelocks.size() > 0) { 797c64edde69d18498fb2954f71a546357b07ab996aEvan Millar for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) { 798c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.setLength(0); 799c64edde69d18498fb2954f71a546357b07ab996aEvan Millar printWakeLockCheckin(sb, ent.getValue(), batteryRealtime, null, which, ""); 800c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 801c64edde69d18498fb2954f71a546357b07ab996aEvan Millar dumpLine(pw, 0 /* uid */, category, KERNEL_WAKELOCK_DATA, ent.getKey(), 802c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.toString()); 803c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 804c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 805c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int iu = 0; iu < NU; iu++) { 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int uid = uidStats.keyAt(iu); 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid u = uidStats.valueAt(iu); 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump Network stats per uid, if any 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long rx = u.getTcpBytesReceived(which); 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tx = u.getTcpBytesSent(which); 812105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); 813105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); 814617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long wifiTurnedOnTime = u.getWifiTurnedOnTime(batteryRealtime, which); 815105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (rx > 0 || tx > 0) dumpLine(pw, uid, category, NETWORK_DATA, rx, tx); 817105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 818617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 819617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn || wifiTurnedOnTime != 0) { 820105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project dumpLine(pw, uid, category, WIFI_LOCK_DATA, 821617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn fullWifiLockOnTime, scanWifiLockOnTime, wifiTurnedOnTime); 822105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 824617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (u.hasUserActivity()) { 825617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args = new Object[Uid.NUM_USER_ACTIVITY_TYPES]; 826617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean hasData = false; 827617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<Uid.NUM_USER_ACTIVITY_TYPES; i++) { 828617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn int val = u.getUserActivityCount(i, which); 829617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = val; 830617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (val != 0) hasData = true; 831617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 832617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (hasData) { 833617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, USER_ACTIVITY_DATA, args); 834617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 835617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 836617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakelocks.size() > 0) { 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 8409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : wakelocks.entrySet()) { 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Wakelock wl = ent.getValue(); 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String linePrefix = ""; 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 844c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), 845c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "f", which, linePrefix); 846c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), 847c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "p", which, linePrefix); 848c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), 849c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "w", which, linePrefix); 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Only log if we had at lease one wakelock... 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sb.length() > 0) { 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, WAKELOCK_DATA, ent.getKey(), sb.toString()); 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<Integer, ? extends BatteryStats.Uid.Sensor> sensors = u.getSensorStats(); 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sensors.size() > 0) { 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> ent 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : sensors.entrySet()) { 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Sensor se = ent.getValue(); 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int sensorNumber = ent.getKey(); 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Timer timer = se.getSensorTime(); 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 867c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTime = (timer.getTotalTimeLocked(batteryRealtime, which) + 500) / 1000; 868c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTime != 0) { 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, SENSOR_DATA, sensorNumber, totalTime, count); 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats(); 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (processStats.size() > 0) { 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : processStats.entrySet()) { 8809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Proc ps = ent.getValue(); 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long userTime = ps.getUserTime(which); 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long systemTime = ps.getSystemTime(which); 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ps.getStarts(which); 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (userTime != 0 || systemTime != 0 || starts != 0) { 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, PROCESS_DATA, 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ent.getKey(), // proc 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project userTime * 10, // cpu time in ms 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project systemTime * 10, // user time in ms 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts); // process starts 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Pkg> packageStats = u.getPackageStats(); 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (packageStats.size() > 0) { 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : packageStats.entrySet()) { 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Pkg ps = ent.getValue(); 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int wakeups = ps.getWakeups(which); 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats(); 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : serviceStats.entrySet()) { 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStats.Uid.Pkg.Serv ss = sent.getValue(); 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = ss.getStartTime(batteryUptime, which); 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ss.getStarts(which); 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int launches = ss.getLaunches(which); 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startTime != 0 || starts != 0 || launches != 0) { 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, APK_DATA, 9129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wakeups, // wakeup alarms 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ent.getKey(), // Apk 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sent.getKey(), // service 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startTime / 1000, // time spent started, in ms 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts, 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project launches); 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 } 9239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 9261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final void dumpLocked(PrintWriter pw, String prefix, int which) { 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawUptime = SystemClock.uptimeMillis() * 1000; 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawRealtime = SystemClock.elapsedRealtime() * 1000; 9299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryUptime = getBatteryUptime(rawUptime); 930d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long batteryRealtime = getBatteryRealtime(rawRealtime); 9319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalRealtime = computeRealtime(rawRealtime, which); 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalUptime = computeUptime(rawUptime, which); 9369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(128); 93822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 93922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar SparseArray<? extends Uid> uidStats = getUidStats(); 94022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar final int NU = uidStats.size(); 9419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9421d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 9431d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 9441d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Time on battery: "); 9451d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("("); 9461d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime)); 9471d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(") realtime, "); 9481d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, whichBatteryUptime / 1000); 9491d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime)); 9501d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(") uptime"); 9511d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 9521d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 9531d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 9541d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Total run time: "); 9551d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalRealtime / 1000); 9561d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("realtime, "); 9571d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalUptime / 1000); 9581d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("uptime, "); 9591d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 9609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 961105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long screenOnTime = getScreenOnTime(batteryRealtime, which); 962105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long phoneOnTime = getPhoneOnTime(batteryRealtime, which); 963d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long wifiRunningTime = getWifiRunningTime(batteryRealtime, which); 964105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long wifiOnTime = getWifiOnTime(batteryRealtime, which); 965105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which); 966617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.setLength(0); 9671d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 9681d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Screen on: "); formatTimeMs(sb, screenOnTime / 1000); 9691d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(screenOnTime, whichBatteryRealtime)); 9701d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Input events: "); sb.append(getInputEventCount(which)); 9711d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000); 9721d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime)); 9731d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(")"); 9741d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 9751d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 9761d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 977617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Screen brightnesses: "); 978617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean didOne = false; 979617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 980617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn final long time = getScreenBrightnessTime(i, batteryRealtime, which); 981617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (time == 0) { 982617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn continue; 983617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 984617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (didOne) sb.append(", "); 985617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn didOne = true; 986617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(SCREEN_BRIGHTNESS_NAMES[i]); 987617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" "); 9881d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 989617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("("); 990617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(formatRatioLocked(time, screenOnTime)); 991617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(")"); 992617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 993617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (!didOne) sb.append("No activity"); 994617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(sb.toString()); 995105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 99622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar // Calculate total network and wakelock times across all uids. 99722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long rxTotal = 0; 99822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long txTotal = 0; 99922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long fullWakeLockTimeTotalMicros = 0; 100022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long partialWakeLockTimeTotalMicros = 0; 100122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 1002c64edde69d18498fb2954f71a546357b07ab996aEvan Millar Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats(); 1003c64edde69d18498fb2954f71a546357b07ab996aEvan Millar if (kernelWakelocks.size() > 0) { 1004c64edde69d18498fb2954f71a546357b07ab996aEvan Millar for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) { 1005c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 1006c64edde69d18498fb2954f71a546357b07ab996aEvan Millar String linePrefix = ": "; 1007c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.setLength(0); 1008c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(prefix); 1009c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(" Kernel Wake lock "); 1010c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(ent.getKey()); 1011c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLock(sb, ent.getValue(), batteryRealtime, null, which, 1012c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix); 1013c64edde69d18498fb2954f71a546357b07ab996aEvan Millar if (!linePrefix.equals(": ")) { 1014c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(" realtime"); 1015c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } else { 1016c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(": (nothing executed)"); 1017c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1018c64edde69d18498fb2954f71a546357b07ab996aEvan Millar pw.println(sb.toString()); 1019c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1020c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1021c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 102222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (int iu = 0; iu < NU; iu++) { 102322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid u = uidStats.valueAt(iu); 102422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar rxTotal += u.getTcpBytesReceived(which); 102522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar txTotal += u.getTcpBytesSent(which); 102622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 102722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 102822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (wakelocks.size() > 0) { 102922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 103022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar : wakelocks.entrySet()) { 103122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid.Wakelock wl = ent.getValue(); 103222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 103322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); 103422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (fullWakeTimer != null) { 1035c64edde69d18498fb2954f71a546357b07ab996aEvan Millar fullWakeLockTimeTotalMicros += fullWakeTimer.getTotalTimeLocked( 103622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 103722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 103822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 103922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); 104022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (partialWakeTimer != null) { 1041c64edde69d18498fb2954f71a546357b07ab996aEvan Millar partialWakeLockTimeTotalMicros += partialWakeTimer.getTotalTimeLocked( 104222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 104322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 104422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 104522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 104622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 104722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 10481d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); 10491d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(" Total received: "); pw.print(formatBytesLocked(rxTotal)); 10501d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(", Total sent: "); pw.println(formatBytesLocked(txTotal)); 10511d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 10521d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 10531d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Total full wakelock time: "); formatTimeMs(sb, 10541d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn (fullWakeLockTimeTotalMicros + 500) / 1000); 10551d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", Total partial waklock time: "); formatTimeMs(sb, 10561d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn (partialWakeLockTimeTotalMicros + 500) / 1000); 10571d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 105822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 1059627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.setLength(0); 10601d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 1061617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Signal levels: "); 1062617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn didOne = false; 1063627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 1064627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn final long time = getPhoneSignalStrengthTime(i, batteryRealtime, which); 1065627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (time == 0) { 1066627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn continue; 1067627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1068627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (didOne) sb.append(", "); 1069627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = true; 1070627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(SIGNAL_STRENGTH_NAMES[i]); 1071627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(" "); 10721d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 1073627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append("("); 1074627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 1075617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(") "); 1076617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(getPhoneSignalStrengthCount(i, which)); 1077617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("x"); 1078627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1079627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (!didOne) sb.append("No activity"); 1080627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn pw.println(sb.toString()); 1081627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 1082627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.setLength(0); 10831d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 1084617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Radio types: "); 1085627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = false; 1086627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 1087627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn final long time = getPhoneDataConnectionTime(i, batteryRealtime, which); 1088627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (time == 0) { 1089627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn continue; 1090627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1091627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (didOne) sb.append(", "); 1092627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = true; 1093627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(DATA_CONNECTION_NAMES[i]); 1094627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(" "); 10951d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 1096627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append("("); 1097627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 1098617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(") "); 1099617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(getPhoneDataConnectionCount(i, which)); 1100617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("x"); 1101627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1102627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (!didOne) sb.append("No activity"); 1103627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn pw.println(sb.toString()); 1104627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 11051d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 11061d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 11071d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000); 11081d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiOnTime, whichBatteryRealtime)); 11091d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Wifi running: "); formatTimeMs(sb, wifiRunningTime / 1000); 11101d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiRunningTime, whichBatteryRealtime)); 11111d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Bluetooth on: "); formatTimeMs(sb, bluetoothOnTime / 1000); 11121d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(bluetoothOnTime, whichBatteryRealtime)); 11131d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(")"); 11141d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 1115617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1116105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project pw.println(" "); 1117105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1118105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (which == STATS_UNPLUGGED) { 1119105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (getIsOnBattery()) { 11201d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" Device is currently unplugged"); 11211d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Discharge cycle start level: "); 11221d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeStartLevel()); 11231d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Discharge cycle current level: "); 11241d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeCurrentLevel()); 1125105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } else { 11261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" Device is currently plugged into power"); 11271d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Last discharge cycle start level: "); 11281d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeStartLevel()); 11291d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Last discharge cycle end level: "); 11301d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeCurrentLevel()); 1131105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 1132617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(" "); 1133105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 113522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int iu=0; iu<NU; iu++) { 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int uid = uidStats.keyAt(iu); 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid u = uidStats.valueAt(iu); 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + " #" + uid + ":"); 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean uidActivity = false; 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tcpReceived = u.getTcpBytesReceived(which); 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tcpSent = u.getTcpBytesSent(which); 1144105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); 1145105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); 1146617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long wifiTurnedOnTime = u.getWifiTurnedOnTime(batteryRealtime, which); 1147105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (tcpReceived != 0 || tcpSent != 0) { 11491d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Network: "); 11501d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(formatBytesLocked(tcpReceived)); pw.print(" received, "); 11511d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(formatBytesLocked(tcpSent)); pw.println(" sent"); 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1153617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1154617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (u.hasUserActivity()) { 1155617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean hasData = false; 1156617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 1157617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn int val = u.getUserActivityCount(i, which); 1158617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (val != 0) { 1159617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (!hasData) { 1160617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.setLength(0); 1161617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" User activity: "); 1162617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn hasData = true; 1163617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } else { 1164617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(", "); 1165617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1166617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(val); 1167617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" "); 1168617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(Uid.USER_ACTIVITY_TYPES[i]); 1169617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1170617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1171617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (hasData) { 1172617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(sb.toString()); 1173617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1174617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1175617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1176617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 1177617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn || wifiTurnedOnTime != 0) { 11781d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 11791d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Turned Wifi On: "); 11801d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, wifiTurnedOnTime / 1000); 11811d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiTurnedOnTime, 11821d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")\n"); 11831d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Full Wifi Lock: "); 11841d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, fullWifiLockOnTime / 1000); 11851d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime, 11861d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")\n"); 11871d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Scan Wifi Lock: "); 11881d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, scanWifiLockOnTime / 1000); 11891d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(scanWifiLockOnTime, 11901d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")"); 11911d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 1192105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 11939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 11959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakelocks.size() > 0) { 11969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 11979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : wakelocks.entrySet()) { 11989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Wakelock wl = ent.getValue(); 11999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String linePrefix = ": "; 12009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 12019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(prefix); 12029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" Wake lock "); 12039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(ent.getKey()); 12049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), batteryRealtime, 12059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "full", which, linePrefix); 12069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), batteryRealtime, 12079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "partial", which, linePrefix); 12089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), batteryRealtime, 12099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "window", which, linePrefix); 12109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!linePrefix.equals(": ")) { 12119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" realtime"); 12129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(": (nothing executed)"); 12149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(sb.toString()); 12169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 12179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<Integer, ? extends BatteryStats.Uid.Sensor> sensors = u.getSensorStats(); 12219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sensors.size() > 0) { 12229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> ent 12239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : sensors.entrySet()) { 12249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Sensor se = ent.getValue(); 12259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int sensorNumber = ent.getKey(); 12269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 12279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(prefix); 12289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" Sensor "); 12299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int handle = se.getHandle(); 12309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handle == Uid.Sensor.GPS) { 12319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("GPS"); 12329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(handle); 12349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(": "); 12369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Timer timer = se.getSensorTime(); 12389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 12399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 1240c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTime = (timer.getTotalTimeLocked( 1241c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, which) + 500) / 1000; 1242c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 12439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //timer.logState(); 12449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTime != 0) { 12451d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalTime); 12469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("realtime ("); 12479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" times)"); 12499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("(not used)"); 12519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 12539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("(not used)"); 12549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(sb.toString()); 12579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 12589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats(); 12629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (processStats.size() > 0) { 12639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent 12649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : processStats.entrySet()) { 12659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Proc ps = ent.getValue(); 12669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long userTime; 12679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long systemTime; 12689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts; 12699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project userTime = ps.getUserTime(which); 12719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project systemTime = ps.getSystemTime(which); 12729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts = ps.getStarts(which); 12739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (userTime != 0 || systemTime != 0 || starts != 0) { 12751d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 12761d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Proc "); 12771d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(ent.getKey()); sb.append(":\n"); 12781d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" CPU: "); 12791d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTime(sb, userTime); sb.append("usr + "); 12801d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTime(sb, systemTime); sb.append("krn\n"); 12811d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" "); sb.append(starts); 12821d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" proc starts"); 12831d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 12849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 12859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 12889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Pkg> packageStats = u.getPackageStats(); 12909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (packageStats.size() > 0) { 12919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent 12929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : packageStats.entrySet()) { 12931d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Apk "); pw.print(ent.getKey()); pw.println(":"); 12949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean apkActivity = false; 12959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Pkg ps = ent.getValue(); 12969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int wakeups = ps.getWakeups(which); 12979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakeups != 0) { 12981d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" "); 12991d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(wakeups); pw.println(" wakeup alarms"); 13009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project apkActivity = true; 13019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats(); 13039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (serviceStats.size() > 0) { 13049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent 13059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : serviceStats.entrySet()) { 13069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStats.Uid.Pkg.Serv ss = sent.getValue(); 13079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = ss.getStartTime(batteryUptime, which); 13089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ss.getStarts(which); 13099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int launches = ss.getLaunches(which); 13109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startTime != 0 || starts != 0 || launches != 0) { 13111d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 13121d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Service "); 13131d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(sent.getKey()); sb.append(":\n"); 13141d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Created for: "); 13151d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, startTime / 1000); 13161d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" uptime\n"); 13171d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Starts: "); 13181d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(starts); 13191d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", launches: "); sb.append(launches); 13201d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 13219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project apkActivity = true; 13229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!apkActivity) { 13261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" (nothing executed)"); 13279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 13299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!uidActivity) { 13321d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" (nothing executed)"); 13339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 13389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dumps a human-readable summary of the battery statistics to the given PrintWriter. 13399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 13409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw a Printer to receive the dump output. 13419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 13429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 13431d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn public void dumpLocked(PrintWriter pw) { 13449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println("Total Statistics (Current and Historic):"); 13459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(" System starts: " + getStartCount() 13469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", currently on battery: " + getIsOnBattery()); 13479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLocked(pw, "", STATS_TOTAL); 13489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(""); 13499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println("Last Run Statistics (Previous run of system):"); 13509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLocked(pw, "", STATS_LAST); 13519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(""); 13529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println("Current Battery Statistics (Currently running system):"); 13539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLocked(pw, "", STATS_CURRENT); 13549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(""); 13559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println("Unplugged Statistics (Since last unplugged from power):"); 13569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLocked(pw, "", STATS_UNPLUGGED); 13579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 13609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void dumpCheckinLocked(PrintWriter pw, String[] args) { 13619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isUnpluggedOnly = false; 13629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (String arg : args) { 13649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ("-u".equals(arg)) { 13659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_LOGV) Log.v("BatteryStats", "Dumping unplugged data"); 13669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isUnpluggedOnly = true; 13679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isUnpluggedOnly) { 13719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_UNPLUGGED); 13729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else { 13749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_TOTAL); 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_LAST); 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_UNPLUGGED); 13779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpCheckinLocked(pw, STATS_CURRENT); 13789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 13809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1382