BatteryStats.java revision 6b7b4845212b3a439c527f2e1eca205b6b45fceb
115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root/* 215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Copyright (C) 2008 The Android Open Source Project 315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * you may not use this file except in compliance with the License. 615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * You may obtain a copy of the License at 715a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 815a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * http://www.apache.org/licenses/LICENSE-2.0 915a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * 1015a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * Unless required by applicable law or agreed to in writing, software 1115a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1215a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1315a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * See the License for the specific language governing permissions and 1415a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root * limitations under the License. 1515a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root */ 1615a4d2ffd04dc6c70f2cd17dae12ac6bc14c69abKenny Root 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.os; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.PrintWriter; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Formatter; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.SparseArray; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class providing access to battery usage statistics, including information on 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wakelocks, processes, packages, and services. All times are represented in microseconds 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * except where indicated otherwise. 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class BatteryStats implements Parcelable { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean LOCAL_LOGV = false; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a partial wake lock timer. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_PARTIAL = 0; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a full wake lock timer. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_FULL = 1; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a window wake lock timer. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_WINDOW = 2; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a sensor timer. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SENSOR = 3; 56105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 57105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 58617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * A constant indicating a a wifi turn on timer 59617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 60617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int WIFI_TURNED_ON = 4; 61617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 62617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 63105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * A constant indicating a full wifi lock timer 64105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 65617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int FULL_WIFI_LOCK = 5; 66105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 67105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 68105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * A constant indicating a scan wifi lock timer 69105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 70617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCAN_WIFI_LOCK = 6; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 725347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt /** 735347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt * A constant indicating a wifi multicast timer 745347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt */ 755347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public static final int WIFI_MULTICAST_ENABLED = 7; 765347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 78244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * A constant indicating an audio turn on timer 79244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani */ 80244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public static final int AUDIO_TURNED_ON = 7; 81244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani 82244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani /** 83244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * A constant indicating a video turn on timer 84244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani */ 85244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public static final int VIDEO_TURNED_ON = 8; 86244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani 87244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani /** 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include all of the data in the stats, including previously saved data. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 906b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATS_SINCE_CHARGED = 0; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the last run in the stats. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_LAST = 1; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the current run in the stats. 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int STATS_CURRENT = 2; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the run since the last time the device was unplugged in the stats. 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1056b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATS_SINCE_UNPLUGGED = 3; 106e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar 107e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // NOTE: Update this list if you add/change any stats above. 108e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // These characters are supposed to represent "total", "last", "current", 109e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // and "unplugged". They were shortened for effeciency sake. 110e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String[] STAT_NAMES = { "t", "l", "c", "u" }; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bump the version on this if the checkin format changes. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 115c64edde69d18498fb2954f71a546357b07ab996aEvan Millar private static final int BATTERY_STATS_CHECKIN_VERSION = 5; 11622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 11722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_KB = 1024; 11822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_MB = 1048576; // 1024^2 11922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_GB = 1073741824; //1024^3 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String APK_DATA = "apk"; 123e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String PROCESS_DATA = "pr"; 124e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SENSOR_DATA = "sr"; 125e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String WAKELOCK_DATA = "wl"; 126c64edde69d18498fb2954f71a546357b07ab996aEvan Millar private static final String KERNEL_WAKELOCK_DATA = "kwl"; 127e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String NETWORK_DATA = "nt"; 128e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String USER_ACTIVITY_DATA = "ua"; 129e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String BATTERY_DATA = "bt"; 130e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String BATTERY_LEVEL_DATA = "lv"; 131e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String WIFI_LOCK_DATA = "wfl"; 132e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String MISC_DATA = "m"; 133e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SCREEN_BRIGHTNESS_DATA = "br"; 134e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SIGNAL_STRENGTH_TIME_DATA = "sgt"; 135f37447bad3773b62176baa837908daf6edb44273Amith Yamasani private static final String SIGNAL_SCANNING_TIME_DATA = "sst"; 136e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SIGNAL_STRENGTH_COUNT_DATA = "sgc"; 137e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String DATA_CONNECTION_TIME_DATA = "dct"; 138e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String DATA_CONNECTION_COUNT_DATA = "dcc"; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1401d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final StringBuilder mFormatBuilder = new StringBuilder(32); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Formatter mFormatter = new Formatter(mFormatBuilder); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 144617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * State for keeping track of counting information. 145617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 146617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static abstract class Counter { 147617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 148617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 149617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the count associated with this Counter for the 150617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * selected type of statistics. 151617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 152617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 153617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 154c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract int getCountLocked(int which); 155617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 156617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 157617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Temporary for debugging. 158617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 159617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void logState(Printer pw, String prefix); 160617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 161617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 162617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * State for keeping track of timing information. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Timer { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the count associated with this Timer for the 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected type of statistics. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 173c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract int getCountLocked(int which); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time in microseconds associated with this Timer for the 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected type of statistics. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryRealtime system realtime on battery in microseconds 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a time in microseconds 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 183c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract long getTotalTimeLocked(long batteryRealtime, int which); 184244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Temporary for debugging. 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 188627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract void logState(Printer pw, String prefix); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular uid. 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Uid { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing wakelock statistics. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Wakelock objects. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Wakelock> getWakelockStats(); 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular wake lock. 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Wakelock { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Timer getWakeTime(int type); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing sensor statistics. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Integer sensor ids to Uid.Sensor objects. 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<Integer, ? extends Sensor> getSensorStats(); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing process statistics. 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Proc objects. 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Proc> getProcessStats(); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing package statistics. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Pkg objects. 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Pkg> getPackageStats(); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getUid(); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getTcpBytesReceived(int which); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getTcpBytesSent(int which); 245105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 246617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteWifiTurnedOnLocked(); 247617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteWifiTurnedOffLocked(); 248105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteFullWifiLockAcquiredLocked(); 249105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteFullWifiLockReleasedLocked(); 250105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteScanWifiLockAcquiredLocked(); 251105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract void noteScanWifiLockReleasedLocked(); 2525347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract void noteWifiMulticastEnabledLocked(); 2535347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract void noteWifiMulticastDisabledLocked(); 254244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract void noteAudioTurnedOnLocked(); 255244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract void noteAudioTurnedOffLocked(); 256244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract void noteVideoTurnedOnLocked(); 257244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract void noteVideoTurnedOffLocked(); 258617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract long getWifiTurnedOnTime(long batteryRealtime, int which); 259105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getFullWifiLockTime(long batteryRealtime, int which); 260105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getScanWifiLockTime(long batteryRealtime, int which); 2615347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public abstract long getWifiMulticastTime(long batteryRealtime, 2625347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt int which); 263244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract long getAudioTurnedOnTime(long batteryRealtime, int which); 264244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public abstract long getVideoTurnedOnTime(long batteryRealtime, int which); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 266617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 267617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Note that these must match the constants in android.os.LocalPowerManager. 268617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 269617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn static final String[] USER_ACTIVITY_TYPES = { 270617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn "other", "cheek", "touch", "long_touch", "touch_up", "button", "unknown" 271617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn }; 272617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 273617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int NUM_USER_ACTIVITY_TYPES = 7; 274617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 275617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteUserActivityLocked(int type); 276617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract boolean hasUserActivity(); 277617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getUserActivityCount(int type, int which); 278617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Sensor { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Magic sensor number for the GPS. 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS = -10000; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getHandle(); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Timer getSensorTime(); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular process. 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Proc { 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time (in 1/100 sec) spent executing in user code. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getUserTime(int which); 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time (in 1/100 sec) spent executing in system code. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getSystemTime(int which); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times the process has been started. 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStarts(int which); 313eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani 314eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani /** 315eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the cpu time spent in microseconds while the process was in the foreground. 316eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * @param which one of STATS_TOTAL, STATS_LAST, STATS_CURRENT or STATS_UNPLUGGED 317eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * @return foreground cpu time in microseconds 318eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani */ 319eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani public abstract long getForegroundTime(int which); 320e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani 321e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani /** 322e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * Returns the approximate cpu time spent in microseconds, at a certain CPU speed. 323e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * @param speedStep the index of the CPU speed. This is not the actual speed of the 324e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * CPU. 325e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * @param which one of STATS_TOTAL, STATS_LAST, STATS_CURRENT or STATS_UNPLUGGED 326e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * @see BatteryStats#getCpuSpeedSteps() 327e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani */ 328e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani public abstract long getTimeAtCpuSpeedStep(int speedStep, int which); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular package. 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Pkg { 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times this package has done something that could wake up the 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * device from sleep. 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getWakeups(int which); 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing service statistics. 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Serv> getServiceStats(); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular service. 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract class Serv { 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the amount of time spent started. 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryUptime elapsed uptime on battery in microseconds. 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getStartTime(long batteryUptime, int which); 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total number of times startService() has been called. 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStarts(int which); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total number times the service has been launched. 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getLaunches(int which); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3806b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final class HistoryItem implements Parcelable { 3816b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public HistoryItem next; 38232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 38332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public long time; 3846b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 3856b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final byte CMD_UPDATE = 0; 3866b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final byte CMD_START = 1; 3876b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 3886b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public byte cmd; 3896b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 39032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public byte batteryLevel; 3916b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public byte batteryStatus; 3926b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public byte batteryHealth; 3936b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public byte batteryPlugType; 39432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 3956b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public char batteryTemperature; 3966b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public char batteryVoltage; 3976b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 3986b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_BRIGHTNESS_MASK = 0x000000f; 3996b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_BRIGHTNESS_SHIFT = 0; 40032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_SIGNAL_STRENGTH_MASK = 0x00000f0; 40132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_SIGNAL_STRENGTH_SHIFT = 4; 40232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_PHONE_STATE_MASK = 0x0000f00; 40332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_PHONE_STATE_SHIFT = 8; 40432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_DATA_CONNECTION_MASK = 0x000f000; 40532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_DATA_CONNECTION_SHIFT = 12; 40632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 40732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_BATTERY_PLUGGED_FLAG = 1<<30; 40832907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_SCREEN_ON_FLAG = 1<<29; 40932907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_GPS_ON_FLAG = 1<<28; 41032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public static final int STATE_PHONE_ON_FLAG = 1<<27; 4116b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_PHONE_SCANNING_FLAG = 1<<26; 4126b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_WIFI_ON_FLAG = 1<<25; 4136b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_WIFI_RUNNING_FLAG = 1<<24; 4146b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_WIFI_FULL_LOCK_FLAG = 1<<23; 4156b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_WIFI_SCAN_LOCK_FLAG = 1<<22; 4166b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<21; 4176b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_BLUETOOTH_ON_FLAG = 1<<20; 4186b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_AUDIO_ON_FLAG = 1<<19; 4196b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_VIDEO_ON_FLAG = 1<<18; 42032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 42132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public int states; 42232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 4236b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public HistoryItem() { 42432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 42532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 4266b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public HistoryItem(long time, Parcel src) { 42732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn this.time = time; 4286b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int bat = src.readInt(); 4296b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn cmd = (byte)(bat&0xff); 4306b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryLevel = (byte)((bat>>8)&0xff); 4316b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryStatus = (byte)((bat>>16)&0xf); 4326b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryHealth = (byte)((bat>>20)&0xf); 4336b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryPlugType = (byte)((bat>>24)&0xf); 4346b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn bat = src.readInt(); 4356b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryTemperature = (char)(bat&0xffff); 4366b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryVoltage = (char)((bat>>16)&0xffff); 43732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn states = src.readInt(); 43832907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 43932907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 44032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public int describeContents() { 44132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn return 0; 44232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 44332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 44432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 44532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn dest.writeLong(time); 4466b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int bat = (((int)cmd)&0xff) 4476b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryLevel)<<8)&0xff00) 4486b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryStatus)<<16)&0xf0000) 4496b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryHealth)<<20)&0xf00000) 4506b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryPlugType)<<24)&0xf000000); 4516b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dest.writeInt(bat); 4526b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn bat = (((int)batteryTemperature)&0xffff) 4536b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryVoltage)<<16)&0xffff0000); 4546b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dest.writeInt(bat); 45532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn dest.writeInt(states); 45632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 4576b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 4586b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public void setTo(long time, byte cmd, HistoryItem o) { 4596b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.time = time; 4606b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.cmd = cmd; 4616b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryLevel = o.batteryLevel; 4626b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryStatus = o.batteryStatus; 4636b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryHealth = o.batteryHealth; 4646b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryPlugType = o.batteryPlugType; 4656b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryTemperature = o.batteryTemperature; 4666b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn batteryVoltage = o.batteryVoltage; 4676b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn states = o.states; 4686b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 4696b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 4706b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 4716b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final class BitDescription { 4726b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final int mask; 4736b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final int shift; 4746b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final String name; 4756b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final String[] values; 4766b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 4776b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public BitDescription(int mask, String name) { 4786b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.mask = mask; 4796b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.shift = -1; 4806b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.name = name; 4816b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.values = null; 4826b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 4836b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 4846b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public BitDescription(int mask, int shift, String name, String[] values) { 4856b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.mask = mask; 4866b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.shift = shift; 4876b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.name = name; 4886b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.values = values; 4896b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 49032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 49132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 49232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn /** 49332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn * Return the current history of battery state changes. 49432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn */ 4956b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public abstract HistoryItem getHistory(); 49632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times the device has been started. 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStartCount(); 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 503eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the screen has been on while the device was 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running on battery. 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getScreenOnTime(long batteryRealtime, int which); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 510617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_DARK = 0; 511617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_DIM = 1; 512617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_MEDIUM = 2; 513617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_LIGHT = 3; 514617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_BRIGHT = 4; 515617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 516617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn static final String[] SCREEN_BRIGHTNESS_NAMES = { 517617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn "dark", "dim", "medium", "light", "bright" 518617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn }; 519617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 520617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int NUM_SCREEN_BRIGHTNESS_BINS = 5; 521617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 522617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 523eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the screen has been on with 524617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * the given brightness 525617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 526617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 527617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 528617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract long getScreenBrightnessTime(int brightnessBin, 529617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long batteryRealtime, int which); 530617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 531617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getInputEventCount(int which); 532617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 534eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been on while the device was 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running on battery. 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getPhoneOnTime(long batteryRealtime, int which); 540d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 541627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0; 542627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_POOR = 1; 543627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_MODERATE = 2; 544627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_GOOD = 3; 545627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int SIGNAL_STRENGTH_GREAT = 4; 546627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 547627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn static final String[] SIGNAL_STRENGTH_NAMES = { 548627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn "none", "poor", "moderate", "good", "great" 549627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn }; 550627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 551627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int NUM_SIGNAL_STRENGTH_BINS = 5; 552627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 553627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn /** 554eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been running with 555627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * the given signal strength. 556627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * 557627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * {@hide} 558627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn */ 559627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract long getPhoneSignalStrengthTime(int strengthBin, 560627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn long batteryRealtime, int which); 561627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 562617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 563f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * Returns the time in microseconds that the phone has been trying to 564f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * acquire a signal. 565f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * 566f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * {@hide} 567f37447bad3773b62176baa837908daf6edb44273Amith Yamasani */ 568f37447bad3773b62176baa837908daf6edb44273Amith Yamasani public abstract long getPhoneSignalScanningTime( 569f37447bad3773b62176baa837908daf6edb44273Amith Yamasani long batteryRealtime, int which); 570f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 571f37447bad3773b62176baa837908daf6edb44273Amith Yamasani /** 572617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the number of times the phone has entered the given signal strength. 573617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 574617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 575617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 576617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getPhoneSignalStrengthCount(int strengthBin, int which); 577617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 578627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_NONE = 0; 579627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_GPRS = 1; 580627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_EDGE = 2; 581627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_UMTS = 3; 5826b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_CDMA = 4; 5836b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_EVDO_0 = 5; 5846b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_EVDO_A = 6; 5856b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_1xRTT = 7; 5866b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_HSDPA = 8; 5876b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_HSUPA = 9; 5886b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_HSPA = 10; 5896b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_IDEN = 11; 5906b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_EVDO_B = 12; 5916b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_OTHER = 13; 592627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 593627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn static final String[] DATA_CONNECTION_NAMES = { 5946b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn "none", "gprs", "edge", "umts", "cdma", "evdo_0", "evdo_A", 5956b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn "1xrtt", "hsdpa", "hsupa", "hspa", "iden", "evdo_b", "other" 596627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn }; 597627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 5986b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int NUM_DATA_CONNECTION_TYPES = DATA_CONNECTION_OTHER+1; 599627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 600627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn /** 601eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been running with 602627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * the given data connection. 603627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * 604627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * {@hide} 605627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn */ 606627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract long getPhoneDataConnectionTime(int dataType, 607627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn long batteryRealtime, int which); 608627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 610617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the number of times the phone has entered the given data 611617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * connection type. 612617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 613617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 614617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 615617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getPhoneDataConnectionCount(int dataType, int which); 6166b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 6176b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS 6186b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn = new BitDescription[] { 6196b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_BATTERY_PLUGGED_FLAG, "plugged"), 6206b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_SCREEN_ON_FLAG, "screen"), 6216b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_GPS_ON_FLAG, "gps"), 6226b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_PHONE_ON_FLAG, "phone"), 6236b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_PHONE_SCANNING_FLAG, "phone_scanning"), 6246b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_WIFI_ON_FLAG, "wifi"), 6256b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_WIFI_RUNNING_FLAG, "wifi_running"), 6266b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG, "wifi_full_lock"), 6276b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_WIFI_SCAN_LOCK_FLAG, "wifi_scan_lock"), 6286b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG, "wifi_multicast"), 6296b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_BLUETOOTH_ON_FLAG, "bluetooth"), 6306b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio"), 6316b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_VIDEO_ON_FLAG, "video"), 6326b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_BRIGHTNESS_MASK, 6336b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn HistoryItem.STATE_BRIGHTNESS_SHIFT, "brightness", 6346b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn SCREEN_BRIGHTNESS_NAMES), 6356b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_SIGNAL_STRENGTH_MASK, 6366b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn HistoryItem.STATE_SIGNAL_STRENGTH_SHIFT, "signal_strength", 6376b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn SIGNAL_STRENGTH_NAMES), 6386b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_PHONE_STATE_MASK, 6396b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn HistoryItem.STATE_PHONE_STATE_SHIFT, "phone_state", 6406b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new String[] {"in", "out", "emergency", "off"}), 6416b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn new BitDescription(HistoryItem.STATE_DATA_CONNECTION_MASK, 6426b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn HistoryItem.STATE_DATA_CONNECTION_SHIFT, "data_conn", 6436b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn DATA_CONNECTION_NAMES), 6446b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn }; 645617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 646617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 647eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that wifi has been on while the device was 648105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * running on battery. 649105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 650105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 651105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 652105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getWifiOnTime(long batteryRealtime, int which); 653d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 654d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood /** 655eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that wifi has been on and the driver has 656d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * been in the running state while the device was running on battery. 657d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * 658d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * {@hide} 659d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood */ 660d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood public abstract long getWifiRunningTime(long batteryRealtime, int which); 661d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 662105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 663eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that bluetooth has been on while the device was 664105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * running on battery. 665105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 666105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 667105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 668105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public abstract long getBluetoothOnTime(long batteryRealtime, int which); 669105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 670105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return whether we are currently running on battery. 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract boolean getIsOnBattery(); 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a SparseArray containing the statistics for each uid. 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract SparseArray<? extends Uid> getUidStats(); 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current battery uptime in microseconds. 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the amount of elapsed realtime in microseconds. 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getBatteryUptime(long curTime); 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6883f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani * @deprecated use getRadioDataUptime 6893f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani */ 6903f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani public long getRadioDataUptimeMs() { 6913f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani return getRadioDataUptime() / 1000; 6923f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani } 6933f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 6943f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani /** 6953f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani * Returns the time that the radio was on for data transfers. 6963f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani * @return the uptime in microseconds while unplugged 6973f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani */ 6983f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani public abstract long getRadioDataUptime(); 6993f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 7003f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani /** 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current battery realtime in microseconds. 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the amount of elapsed realtime in microseconds. 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getBatteryRealtime(long curTime); 706105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 707105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 708633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * Returns the battery percentage level at the last time the device was unplugged from power, or 709633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * the last time it booted on battery power. 710105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 711633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public abstract int getDischargeStartLevel(); 712105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 713105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 714633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * Returns the current battery percentage level if we are in a discharge cycle, otherwise 715633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * returns the level at the last plug event. 716105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 717633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public abstract int getDischargeCurrentLevel(); 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current battery uptime in microseconds. 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the elapsed realtime in microseconds. 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeBatteryUptime(long curTime, int which); 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current battery realtime in microseconds. 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeBatteryRealtime(long curTime, int which); 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current uptime in microseconds. 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeUptime(long curTime, int which); 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current realtime in microseconds. 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * * 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeRealtime(long curTime, int which); 750c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 751c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract Map<String, ? extends Timer> getKernelWakelockStats(); 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 753e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani /** Returns the number of different speeds that the CPU can run at */ 754e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani public abstract int getCpuSpeedSteps(); 755e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani 7561d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTimeRaw(StringBuilder out, long seconds) { 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long days = seconds / (60 * 60 * 24); 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (days != 0) { 7599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(days); 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("d "); 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long used = days * 60 * 60 * 24; 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long hours = (seconds - used) / (60 * 60); 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (hours != 0 || used != 0) { 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(hours); 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("h "); 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project used += hours * 60 * 60; 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long mins = (seconds-used) / 60; 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mins != 0 || used != 0) { 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(mins); 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("m "); 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project used += mins * 60; 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (seconds != 0 || used != 0) { 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(seconds-used); 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("s "); 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7841d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTime(StringBuilder sb, long time) { 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long sec = time / 100; 7861d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeRaw(sb, sec); 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append((time - (sec * 100)) * 10); 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("ms "); 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7911d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTimeMs(StringBuilder sb, long time) { 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long sec = time / 1000; 7931d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeRaw(sb, sec); 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(time - (sec * 1000)); 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("ms "); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final String formatRatioLocked(long num, long den) { 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (den == 0L) { 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "---%"; 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float perc = ((float)num) / ((float)den) * 100; 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFormatBuilder.setLength(0); 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFormatter.format("%.1f%%", perc); 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFormatBuilder.toString(); 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 80822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private final String formatBytesLocked(long bytes) { 80922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatBuilder.setLength(0); 81022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 81122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (bytes < BYTES_PER_KB) { 81222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return bytes + "B"; 81322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else if (bytes < BYTES_PER_MB) { 81422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fKB", bytes / (double) BYTES_PER_KB); 81522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 81622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else if (bytes < BYTES_PER_GB){ 81722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fMB", bytes / (double) BYTES_PER_MB); 81822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 81922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else { 82022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fGB", bytes / (double) BYTES_PER_GB); 82122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 82222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 82322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 82422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 8259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sb a StringBuilder object. 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timer a Timer object contining the wakelock times. 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryRealtime the current on-battery time in microseconds. 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name of the wakelock. 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linePrefix a String to be prepended to each line of output. 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line prefix 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String printWakeLock(StringBuilder sb, Timer timer, 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long batteryRealtime, String name, int which, String linePrefix) { 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 840c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTimeMicros = timer.getTotalTimeLocked(batteryRealtime, which); 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long totalTimeMillis = (totalTimeMicros + 500) / 1000; 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 843c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTimeMillis != 0) { 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(linePrefix); 8461d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalTimeMillis); 8471d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn if (name != null) sb.append(name); 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(' '); 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append('('); 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" times)"); 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ", "; 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return linePrefix; 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checkin version of wakelock printer. Prints simple comma-separated list. 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sb a StringBuilder object. 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timer a Timer object contining the wakelock times. 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param now the current time in microseconds. 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name of the wakelock. 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT. 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linePrefix a String to be prepended to each line of output. 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line prefix 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String printWakeLockCheckin(StringBuilder sb, Timer timer, long now, 870c64edde69d18498fb2954f71a546357b07ab996aEvan Millar String name, int which, String linePrefix) { 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long totalTimeMicros = 0; 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = 0; 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 874c64edde69d18498fb2954f71a546357b07ab996aEvan Millar totalTimeMicros = timer.getTotalTimeLocked(now, which); 875c64edde69d18498fb2954f71a546357b07ab996aEvan Millar count = timer.getCountLocked(which); 8769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(linePrefix); 8789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append((totalTimeMicros + 500) / 1000); // microseconds to milliseconds with rounding 8799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(','); 880c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(name != null ? name + "," : ""); 8819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 8829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ","; 8839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dump a comma-separated line of values for terse checkin mode. 8879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw the PageWriter to dump log to 8899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param category category of data (e.g. "total", "last", "unplugged", "current" ) 8909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type type of data (e.g. "wakelock", "sensor", "process", "apk" , "process", "network") 8919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param args type-dependent data arguments 8929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 8939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final void dumpLine(PrintWriter pw, int uid, String category, String type, 8949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object... args ) { 8959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(uid); pw.print(','); 8979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(category); pw.print(','); 8989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(type); 8999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Object arg : args) { 9019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(','); 9029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(arg); 9039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print('\n'); 9059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 9089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checkin server version of dump to produce more compact, computer-readable log. 9099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 9109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: all times are expressed in 'ms'. 9119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 91221f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn public final void dumpCheckinLocked(PrintWriter pw, int which, int reqUid) { 9139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawUptime = SystemClock.uptimeMillis() * 1000; 9149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawRealtime = SystemClock.elapsedRealtime() * 1000; 9159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryUptime = getBatteryUptime(rawUptime); 9169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryRealtime = getBatteryRealtime(rawRealtime); 9179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); 9189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); 9199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalRealtime = computeRealtime(rawRealtime, which); 9209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalUptime = computeUptime(rawUptime, which); 9219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long screenOnTime = getScreenOnTime(batteryRealtime, which); 9229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long phoneOnTime = getPhoneOnTime(batteryRealtime, which); 923105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long wifiOnTime = getWifiOnTime(batteryRealtime, which); 924d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long wifiRunningTime = getWifiRunningTime(batteryRealtime, which); 925105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which); 9269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(128); 9289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 92922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar SparseArray<? extends Uid> uidStats = getUidStats(); 93022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar final int NU = uidStats.size(); 93122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 9329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String category = STAT_NAMES[which]; 9339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump "battery" stat 9359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, 0 /* uid */, category, BATTERY_DATA, 9366b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn which == STATS_SINCE_CHARGED ? getStartCount() : "N/A", 937617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn whichBatteryRealtime / 1000, whichBatteryUptime / 1000, 938617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn totalRealtime / 1000, totalUptime / 1000); 9399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 94022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar // Calculate total network and wakelock times across all uids. 94122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long rxTotal = 0; 94222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long txTotal = 0; 94322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long fullWakeLockTimeTotal = 0; 94422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long partialWakeLockTimeTotal = 0; 94522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 94622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (int iu = 0; iu < NU; iu++) { 94722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid u = uidStats.valueAt(iu); 94822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar rxTotal += u.getTcpBytesReceived(which); 94922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar txTotal += u.getTcpBytesSent(which); 95022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 95122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 95222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (wakelocks.size() > 0) { 95322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 95422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar : wakelocks.entrySet()) { 95522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid.Wakelock wl = ent.getValue(); 95622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 95722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); 95822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (fullWakeTimer != null) { 959c64edde69d18498fb2954f71a546357b07ab996aEvan Millar fullWakeLockTimeTotal += fullWakeTimer.getTotalTimeLocked(batteryRealtime, which); 96022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 96122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 96222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); 96322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (partialWakeTimer != null) { 964c64edde69d18498fb2954f71a546357b07ab996aEvan Millar partialWakeLockTimeTotal += partialWakeTimer.getTotalTimeLocked( 96522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 96622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 96722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 96822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 96922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 97022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 9719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump misc stats 9729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, 0 /* uid */, category, MISC_DATA, 973d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood screenOnTime / 1000, phoneOnTime / 1000, wifiOnTime / 1000, 97422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar wifiRunningTime / 1000, bluetoothOnTime / 1000, rxTotal, txTotal, 975617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn fullWakeLockTimeTotal, partialWakeLockTimeTotal, 976617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn getInputEventCount(which)); 977617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 978617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn // Dump screen brightness stats 979617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn Object[] args = new Object[NUM_SCREEN_BRIGHTNESS_BINS]; 980617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 981617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getScreenBrightnessTime(i, batteryRealtime, which) / 1000; 982617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 983617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SCREEN_BRIGHTNESS_DATA, args); 984105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 985627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn // Dump signal strength stats 986617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args = new Object[NUM_SIGNAL_STRENGTH_BINS]; 987627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 988627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args[i] = getPhoneSignalStrengthTime(i, batteryRealtime, which) / 1000; 989627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 990617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_TIME_DATA, args); 991f37447bad3773b62176baa837908daf6edb44273Amith Yamasani dumpLine(pw, 0 /* uid */, category, SIGNAL_SCANNING_TIME_DATA, 992f37447bad3773b62176baa837908daf6edb44273Amith Yamasani getPhoneSignalScanningTime(batteryRealtime, which) / 1000); 993617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 994617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getPhoneSignalStrengthCount(i, which); 995617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 996617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_COUNT_DATA, args); 997627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 998627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn // Dump network type stats 999627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args = new Object[NUM_DATA_CONNECTION_TYPES]; 1000627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 1001627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args[i] = getPhoneDataConnectionTime(i, batteryRealtime, which) / 1000; 1002627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1003617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_TIME_DATA, args); 1004617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 1005617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getPhoneDataConnectionCount(i, which); 1006617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1007617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_COUNT_DATA, args); 1008627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 10096b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (which == STATS_SINCE_UNPLUGGED) { 1010e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar dumpLine(pw, 0 /* uid */, category, BATTERY_LEVEL_DATA, getDischargeStartLevel(), 1011633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar getDischargeCurrentLevel()); 1012105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 10139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 101421f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (reqUid < 0) { 101521f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats(); 101621f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (kernelWakelocks.size() > 0) { 101721f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) { 101821f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.setLength(0); 101921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn printWakeLockCheckin(sb, ent.getValue(), batteryRealtime, null, which, ""); 102021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn 102121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn dumpLine(pw, 0 /* uid */, category, KERNEL_WAKELOCK_DATA, ent.getKey(), 102221f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.toString()); 102321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 1024c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1025c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1026c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 10279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int iu = 0; iu < NU; iu++) { 10289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int uid = uidStats.keyAt(iu); 102921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (reqUid >= 0 && uid != reqUid) { 103021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn continue; 103121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 10329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid u = uidStats.valueAt(iu); 10339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump Network stats per uid, if any 10349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long rx = u.getTcpBytesReceived(which); 10359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tx = u.getTcpBytesSent(which); 1036105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); 1037105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); 1038617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long wifiTurnedOnTime = u.getWifiTurnedOnTime(batteryRealtime, which); 1039105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 10409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (rx > 0 || tx > 0) dumpLine(pw, uid, category, NETWORK_DATA, rx, tx); 1041105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1042617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 1043617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn || wifiTurnedOnTime != 0) { 1044105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project dumpLine(pw, uid, category, WIFI_LOCK_DATA, 1045617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn fullWifiLockOnTime, scanWifiLockOnTime, wifiTurnedOnTime); 1046105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 10479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1048617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (u.hasUserActivity()) { 1049617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args = new Object[Uid.NUM_USER_ACTIVITY_TYPES]; 1050617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean hasData = false; 1051617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<Uid.NUM_USER_ACTIVITY_TYPES; i++) { 1052617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn int val = u.getUserActivityCount(i, which); 1053617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = val; 1054617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (val != 0) hasData = true; 1055617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1056617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (hasData) { 1057617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, USER_ACTIVITY_DATA, args); 1058617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1059617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1060617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 10619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 10629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakelocks.size() > 0) { 10639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 10649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : wakelocks.entrySet()) { 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Wakelock wl = ent.getValue(); 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String linePrefix = ""; 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 1068c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), 1069c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "f", which, linePrefix); 1070c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), 1071c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "p", which, linePrefix); 1072c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), 1073c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, "w", which, linePrefix); 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Only log if we had at lease one wakelock... 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sb.length() > 0) { 10779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, WAKELOCK_DATA, ent.getKey(), sb.toString()); 10789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<Integer, ? extends BatteryStats.Uid.Sensor> sensors = u.getSensorStats(); 10839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sensors.size() > 0) { 10849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> ent 10859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : sensors.entrySet()) { 10869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Sensor se = ent.getValue(); 10879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int sensorNumber = ent.getKey(); 10889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Timer timer = se.getSensorTime(); 10899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 10909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 1091c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTime = (timer.getTotalTimeLocked(batteryRealtime, which) + 500) / 1000; 1092c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 10939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTime != 0) { 10949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, SENSOR_DATA, sensorNumber, totalTime, count); 10959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats(); 11019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (processStats.size() > 0) { 11029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent 11039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : processStats.entrySet()) { 11049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Proc ps = ent.getValue(); 11059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long userTime = ps.getUserTime(which); 11079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long systemTime = ps.getSystemTime(which); 11089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ps.getStarts(which); 11099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (userTime != 0 || systemTime != 0 || starts != 0) { 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, PROCESS_DATA, 11129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ent.getKey(), // proc 11139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project userTime * 10, // cpu time in ms 11149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project systemTime * 10, // user time in ms 11159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts); // process starts 11169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Pkg> packageStats = u.getPackageStats(); 11219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (packageStats.size() > 0) { 11229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent 11239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : packageStats.entrySet()) { 11249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Pkg ps = ent.getValue(); 11269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int wakeups = ps.getWakeups(which); 11279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats(); 11289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent 11299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : serviceStats.entrySet()) { 11309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStats.Uid.Pkg.Serv ss = sent.getValue(); 11319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = ss.getStartTime(batteryUptime, which); 11329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ss.getStarts(which); 11339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int launches = ss.getLaunches(which); 11349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startTime != 0 || starts != 0 || launches != 0) { 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, APK_DATA, 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wakeups, // wakeup alarms 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ent.getKey(), // Apk 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sent.getKey(), // service 11399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startTime / 1000, // time spent started, in ms 11409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts, 11419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project launches); 11429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 11489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 115021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn public final void dumpLocked(PrintWriter pw, String prefix, int which, int reqUid) { 11519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawUptime = SystemClock.uptimeMillis() * 1000; 11529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawRealtime = SystemClock.elapsedRealtime() * 1000; 11539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryUptime = getBatteryUptime(rawUptime); 1154d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long batteryRealtime = getBatteryRealtime(rawRealtime); 11559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); 11579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); 11589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalRealtime = computeRealtime(rawRealtime, which); 11599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalUptime = computeUptime(rawUptime, which); 11609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(128); 116222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 116322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar SparseArray<? extends Uid> uidStats = getUidStats(); 116422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar final int NU = uidStats.size(); 11659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11661d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 11671d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 11681d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Time on battery: "); 11691d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("("); 11701d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime)); 11711d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(") realtime, "); 11721d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, whichBatteryUptime / 1000); 11731d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime)); 11741d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(") uptime"); 11751d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 11761d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 11771d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 11781d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Total run time: "); 11791d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalRealtime / 1000); 11801d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("realtime, "); 11811d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalUptime / 1000); 11821d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("uptime, "); 11831d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 11849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1185105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long screenOnTime = getScreenOnTime(batteryRealtime, which); 1186105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long phoneOnTime = getPhoneOnTime(batteryRealtime, which); 1187d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood final long wifiRunningTime = getWifiRunningTime(batteryRealtime, which); 1188105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long wifiOnTime = getWifiOnTime(batteryRealtime, which); 1189105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which); 1190617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.setLength(0); 11911d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 11921d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Screen on: "); formatTimeMs(sb, screenOnTime / 1000); 11931d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(screenOnTime, whichBatteryRealtime)); 11941d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Input events: "); sb.append(getInputEventCount(which)); 11951d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000); 11961d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime)); 11971d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(")"); 11981d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 11991d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 12001d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 1201617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Screen brightnesses: "); 1202617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean didOne = false; 1203617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 1204617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn final long time = getScreenBrightnessTime(i, batteryRealtime, which); 1205617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (time == 0) { 1206617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn continue; 1207617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1208617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (didOne) sb.append(", "); 1209617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn didOne = true; 1210617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(SCREEN_BRIGHTNESS_NAMES[i]); 1211617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" "); 12121d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 1213617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("("); 1214617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(formatRatioLocked(time, screenOnTime)); 1215617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(")"); 1216617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1217617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (!didOne) sb.append("No activity"); 1218617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(sb.toString()); 1219105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 122022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar // Calculate total network and wakelock times across all uids. 122122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long rxTotal = 0; 122222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long txTotal = 0; 122322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long fullWakeLockTimeTotalMicros = 0; 122422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long partialWakeLockTimeTotalMicros = 0; 122522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 122621f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (reqUid < 0) { 122721f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats(); 122821f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (kernelWakelocks.size() > 0) { 122921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) { 123021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn 123121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn String linePrefix = ": "; 123221f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.setLength(0); 123321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.append(prefix); 123421f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.append(" Kernel Wake lock "); 123521f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.append(ent.getKey()); 123621f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn linePrefix = printWakeLock(sb, ent.getValue(), batteryRealtime, null, which, 123721f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn linePrefix); 123821f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (!linePrefix.equals(": ")) { 123921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.append(" realtime"); 124021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } else { 124121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.append(": (nothing executed)"); 124221f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 124321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn pw.println(sb.toString()); 1244c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1245c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1246c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 1247c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 124822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (int iu = 0; iu < NU; iu++) { 124922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid u = uidStats.valueAt(iu); 125022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar rxTotal += u.getTcpBytesReceived(which); 125122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar txTotal += u.getTcpBytesSent(which); 125222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 125322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 125422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (wakelocks.size() > 0) { 125522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 125622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar : wakelocks.entrySet()) { 125722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid.Wakelock wl = ent.getValue(); 125822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 125922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); 126022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (fullWakeTimer != null) { 1261c64edde69d18498fb2954f71a546357b07ab996aEvan Millar fullWakeLockTimeTotalMicros += fullWakeTimer.getTotalTimeLocked( 126222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 126322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 126422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 126522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); 126622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (partialWakeTimer != null) { 1267c64edde69d18498fb2954f71a546357b07ab996aEvan Millar partialWakeLockTimeTotalMicros += partialWakeTimer.getTotalTimeLocked( 126822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar batteryRealtime, which); 126922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 127022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 127122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 127222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 127322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 12741d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); 12751d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(" Total received: "); pw.print(formatBytesLocked(rxTotal)); 12761d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(", Total sent: "); pw.println(formatBytesLocked(txTotal)); 12771d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 12781d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 12791d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Total full wakelock time: "); formatTimeMs(sb, 12801d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn (fullWakeLockTimeTotalMicros + 500) / 1000); 12811d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", Total partial waklock time: "); formatTimeMs(sb, 12821d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn (partialWakeLockTimeTotalMicros + 500) / 1000); 12831d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 128422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 1285627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.setLength(0); 12861d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 1287617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Signal levels: "); 1288617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn didOne = false; 1289627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_SIGNAL_STRENGTH_BINS; i++) { 1290627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn final long time = getPhoneSignalStrengthTime(i, batteryRealtime, which); 1291627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (time == 0) { 1292627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn continue; 1293627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1294627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (didOne) sb.append(", "); 1295627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = true; 1296627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(SIGNAL_STRENGTH_NAMES[i]); 1297627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(" "); 12981d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 1299627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append("("); 1300627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 1301617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(") "); 1302617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(getPhoneSignalStrengthCount(i, which)); 1303617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("x"); 1304627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1305627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (!didOne) sb.append("No activity"); 1306627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn pw.println(sb.toString()); 1307f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 1308f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.setLength(0); 1309f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.append(prefix); 1310f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.append(" Signal scanning time: "); 1311f37447bad3773b62176baa837908daf6edb44273Amith Yamasani formatTimeMs(sb, getPhoneSignalScanningTime(batteryRealtime, which) / 1000); 1312f37447bad3773b62176baa837908daf6edb44273Amith Yamasani pw.println(sb.toString()); 1313f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 1314627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.setLength(0); 13151d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 1316617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" Radio types: "); 1317627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = false; 1318627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 1319627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn final long time = getPhoneDataConnectionTime(i, batteryRealtime, which); 1320627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (time == 0) { 1321627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn continue; 1322627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1323627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (didOne) sb.append(", "); 1324627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = true; 1325627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(DATA_CONNECTION_NAMES[i]); 1326627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(" "); 13271d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 1328627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append("("); 1329627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 1330617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(") "); 1331617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(getPhoneDataConnectionCount(i, which)); 1332617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("x"); 1333627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1334627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (!didOne) sb.append("No activity"); 1335627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn pw.println(sb.toString()); 13363f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 13373f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.setLength(0); 13383f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(prefix); 13393f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(" Radio data uptime when unplugged: "); 13403f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(getRadioDataUptime() / 1000); 13413f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(" ms"); 13423f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani pw.println(sb.toString()); 13433f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 13441d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 13451d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 13461d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000); 13471d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiOnTime, whichBatteryRealtime)); 13481d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Wifi running: "); formatTimeMs(sb, wifiRunningTime / 1000); 13491d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiRunningTime, whichBatteryRealtime)); 13501d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Bluetooth on: "); formatTimeMs(sb, bluetoothOnTime / 1000); 13511d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(bluetoothOnTime, whichBatteryRealtime)); 13521d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(")"); 13531d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 1354617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1355105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project pw.println(" "); 1356105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 13576b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (which == STATS_SINCE_UNPLUGGED) { 1358105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (getIsOnBattery()) { 13591d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" Device is currently unplugged"); 13601d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Discharge cycle start level: "); 13611d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeStartLevel()); 13621d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Discharge cycle current level: "); 13631d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeCurrentLevel()); 1364105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } else { 13651d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" Device is currently plugged into power"); 13661d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Last discharge cycle start level: "); 13671d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeStartLevel()); 13681d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Last discharge cycle end level: "); 13691d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeCurrentLevel()); 1370105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 1371617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(" "); 1372105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 13739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 137422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 13759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int iu=0; iu<NU; iu++) { 13769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int uid = uidStats.keyAt(iu); 137721f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (reqUid >= 0 && uid != reqUid) { 137821f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn continue; 137921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 138021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn 13819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid u = uidStats.valueAt(iu); 138221f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn 13839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(prefix + " #" + uid + ":"); 13849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean uidActivity = false; 13859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 13869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tcpReceived = u.getTcpBytesReceived(which); 13879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long tcpSent = u.getTcpBytesSent(which); 1388105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which); 1389105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project long scanWifiLockOnTime = u.getScanWifiLockTime(batteryRealtime, which); 1390617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn long wifiTurnedOnTime = u.getWifiTurnedOnTime(batteryRealtime, which); 1391105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 13929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (tcpReceived != 0 || tcpSent != 0) { 13931d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Network: "); 13941d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(formatBytesLocked(tcpReceived)); pw.print(" received, "); 13951d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(formatBytesLocked(tcpSent)); pw.println(" sent"); 13969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1397617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1398617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (u.hasUserActivity()) { 1399617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean hasData = false; 1400617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 1401617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn int val = u.getUserActivityCount(i, which); 1402617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (val != 0) { 1403617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (!hasData) { 1404617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.setLength(0); 1405617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" User activity: "); 1406617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn hasData = true; 1407617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } else { 1408617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(", "); 1409617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1410617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(val); 1411617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" "); 1412617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(Uid.USER_ACTIVITY_TYPES[i]); 1413617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1414617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1415617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (hasData) { 1416617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(sb.toString()); 1417617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1418617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1419617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1420617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (fullWifiLockOnTime != 0 || scanWifiLockOnTime != 0 1421617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn || wifiTurnedOnTime != 0) { 14221d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 14231d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Turned Wifi On: "); 14241d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, wifiTurnedOnTime / 1000); 14251d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiTurnedOnTime, 14261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")\n"); 14271d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Full Wifi Lock: "); 14281d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, fullWifiLockOnTime / 1000); 14291d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime, 14301d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")\n"); 14311d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Scan Wifi Lock: "); 14321d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, scanWifiLockOnTime / 1000); 14331d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(scanWifiLockOnTime, 14341d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn whichBatteryRealtime)); sb.append(")"); 14351d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 1436105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 14379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 14399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakelocks.size() > 0) { 14409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 14419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : wakelocks.entrySet()) { 14429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Wakelock wl = ent.getValue(); 14439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String linePrefix = ": "; 14449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 14459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(prefix); 14469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" Wake lock "); 14479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(ent.getKey()); 14489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), batteryRealtime, 14499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "full", which, linePrefix); 14509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), batteryRealtime, 14519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "partial", which, linePrefix); 14529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), batteryRealtime, 14539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "window", which, linePrefix); 14549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!linePrefix.equals(": ")) { 14559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" realtime"); 14569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(": (nothing executed)"); 14589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(sb.toString()); 14609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 14619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<Integer, ? extends BatteryStats.Uid.Sensor> sensors = u.getSensorStats(); 14659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sensors.size() > 0) { 14669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> ent 14679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : sensors.entrySet()) { 14689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Sensor se = ent.getValue(); 14699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int sensorNumber = ent.getKey(); 14709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 14719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(prefix); 14729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" Sensor "); 14739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int handle = se.getHandle(); 14749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (handle == Uid.Sensor.GPS) { 14759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("GPS"); 14769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(handle); 14789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(": "); 14809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 14819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Timer timer = se.getSensorTime(); 14829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 14839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Convert from microseconds to milliseconds with rounding 1484c64edde69d18498fb2954f71a546357b07ab996aEvan Millar long totalTime = (timer.getTotalTimeLocked( 1485c64edde69d18498fb2954f71a546357b07ab996aEvan Millar batteryRealtime, which) + 500) / 1000; 1486c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 14879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //timer.logState(); 14889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTime != 0) { 14891d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalTime); 14909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("realtime ("); 14919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 14929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" times)"); 14939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("(not used)"); 14959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 14979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("(not used)"); 14989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(sb.toString()); 15019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 15029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats(); 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (processStats.size() > 0) { 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : processStats.entrySet()) { 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Proc ps = ent.getValue(); 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long userTime; 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long systemTime; 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts; 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project userTime = ps.getUserTime(which); 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project systemTime = ps.getSystemTime(which); 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts = ps.getStarts(which); 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (userTime != 0 || systemTime != 0 || starts != 0) { 15191d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 15201d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Proc "); 15211d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(ent.getKey()); sb.append(":\n"); 15221d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" CPU: "); 15231d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTime(sb, userTime); sb.append("usr + "); 15241d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTime(sb, systemTime); sb.append("krn\n"); 15251d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" "); sb.append(starts); 15261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" proc starts"); 15271d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 15289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 15299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Pkg> packageStats = u.getPackageStats(); 15349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (packageStats.size() > 0) { 15359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent 15369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : packageStats.entrySet()) { 15371d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Apk "); pw.print(ent.getKey()); pw.println(":"); 15389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean apkActivity = false; 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Pkg ps = ent.getValue(); 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int wakeups = ps.getWakeups(which); 15419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakeups != 0) { 15421d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" "); 15431d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(wakeups); pw.println(" wakeup alarms"); 15449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project apkActivity = true; 15459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats(); 15479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (serviceStats.size() > 0) { 15489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent 15499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : serviceStats.entrySet()) { 15509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStats.Uid.Pkg.Serv ss = sent.getValue(); 15519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = ss.getStartTime(batteryUptime, which); 15529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ss.getStarts(which); 15539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int launches = ss.getLaunches(which); 15549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startTime != 0 || starts != 0 || launches != 0) { 15551d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 15561d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Service "); 15571d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(sent.getKey()); sb.append(":\n"); 15581d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Created for: "); 15591d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, startTime / 1000); 15601d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" uptime\n"); 15611d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Starts: "); 15621d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(starts); 15631d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", launches: "); sb.append(launches); 15641d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 15659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project apkActivity = true; 15669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!apkActivity) { 15701d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" (nothing executed)"); 15719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 15739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!uidActivity) { 15761d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" (nothing executed)"); 15779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15816b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn void printBitDescriptions(PrintWriter pw, int oldval, int newval, BitDescription[] descriptions) { 15826b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int diff = oldval ^ newval; 15836b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (diff == 0) return; 15846b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn for (int i=0; i<descriptions.length; i++) { 15856b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn BitDescription bd = descriptions[i]; 15866b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if ((diff&bd.mask) != 0) { 15876b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (bd.shift < 0) { 15886b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print((newval&bd.mask) != 0 ? " +" : " -"); 15896b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(bd.name); 15906b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } else { 15916b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(" "); 15926b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(bd.name); 15936b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("="); 15946b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int val = (newval&bd.mask)>>bd.shift; 15956b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (bd.values != null && val >= 0 && val < bd.values.length) { 15966b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(bd.values[val]); 15976b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } else { 15986b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(val); 15996b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16006b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16016b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16026b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16036b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16046b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 16059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dumps a human-readable summary of the battery statistics to the given PrintWriter. 16079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw a Printer to receive the dump output. 16099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 16111d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn public void dumpLocked(PrintWriter pw) { 16126b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn HistoryItem rec = getHistory(); 161332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn if (rec != null) { 161432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn pw.println("Battery History:"); 16156b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int oldState = 0; 16166b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int oldStatus = -1; 16176b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int oldHealth = -1; 16186b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int oldPlug = -1; 16196b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int oldTemp = -1; 16206b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int oldVolt = -1; 162132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn while (rec != null) { 162232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn pw.print(" "); 162332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn pw.print(rec.time); 162432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn pw.print(" "); 16256b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (rec.cmd == HistoryItem.CMD_START) { 16266b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.println(" START"); 16276b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } else { 16286b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (rec.batteryLevel < 10) pw.print("00"); 16296b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn else if (rec.batteryLevel < 100) pw.print("0"); 16306b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(rec.batteryLevel); 16316b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(" "); 16326b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (rec.states < 0x10) pw.print("0000000"); 16336b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn else if (rec.states < 0x100) pw.print("000000"); 16346b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn else if (rec.states < 0x1000) pw.print("00000"); 16356b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn else if (rec.states < 0x10000) pw.print("0000"); 16366b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn else if (rec.states < 0x100000) pw.print("000"); 16376b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn else if (rec.states < 0x1000000) pw.print("00"); 16386b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn else if (rec.states < 0x10000000) pw.print("0"); 16396b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(Integer.toHexString(rec.states)); 16406b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (oldStatus != rec.batteryStatus) { 16416b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn oldStatus = rec.batteryStatus; 16426b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(" status="); 16436b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn switch (oldStatus) { 16446b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_STATUS_UNKNOWN: 16456b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("unknown"); 16466b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16476b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_STATUS_CHARGING: 16486b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("charging"); 16496b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16506b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_STATUS_DISCHARGING: 16516b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("discharging"); 16526b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16536b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_STATUS_NOT_CHARGING: 16546b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("not-charging"); 16556b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16566b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_STATUS_FULL: 16576b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("full"); 16586b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16596b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn default: 16606b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(oldStatus); 16616b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16626b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16636b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16646b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (oldHealth != rec.batteryHealth) { 16656b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn oldHealth = rec.batteryHealth; 16666b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(" health="); 16676b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn switch (oldHealth) { 16686b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_HEALTH_UNKNOWN: 16696b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("unknown"); 16706b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16716b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_HEALTH_GOOD: 16726b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("good"); 16736b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16746b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_HEALTH_OVERHEAT: 16756b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("overheat"); 16766b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16776b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_HEALTH_DEAD: 16786b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("dead"); 16796b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16806b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: 16816b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("over-voltage"); 16826b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16836b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: 16846b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("failure"); 16856b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16866b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn default: 16876b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(oldHealth); 16886b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16896b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16906b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 16916b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (oldPlug != rec.batteryPlugType) { 16926b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn oldPlug = rec.batteryPlugType; 16936b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(" plug="); 16946b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn switch (oldPlug) { 16956b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case 0: 16966b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("none"); 16976b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 16986b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_PLUGGED_AC: 16996b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("ac"); 17006b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 17016b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn case BatteryManager.BATTERY_PLUGGED_USB: 17026b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("usb"); 17036b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 17046b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn default: 17056b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(oldPlug); 17066b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn break; 17076b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 17086b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 17096b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (oldTemp != rec.batteryTemperature) { 17106b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn oldTemp = rec.batteryTemperature; 17116b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(" temp="); 17126b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(oldTemp); 17136b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 17146b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (oldVolt != rec.batteryVoltage) { 17156b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn oldVolt = rec.batteryVoltage; 17166b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(" volt="); 17176b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(oldVolt); 17186b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 17196b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn printBitDescriptions(pw, oldState, rec.states, 17206b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn HISTORY_STATE_DESCRIPTIONS); 17216b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.println(); 17226b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 17236b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn oldState = rec.states; 172432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn rec = rec.next; 172532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 172632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 172732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 17286b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.println("Statistics since last charge:"); 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(" System starts: " + getStartCount() 17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + ", currently on battery: " + getIsOnBattery()); 17316b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dumpLocked(pw, "", STATS_SINCE_CHARGED, -1); 17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.println(""); 17336b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.println("Statistics since last unplugged:"); 17346b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dumpLocked(pw, "", STATS_SINCE_UNPLUGGED, -1); 17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 17389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void dumpCheckinLocked(PrintWriter pw, String[] args) { 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isUnpluggedOnly = false; 17409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (String arg : args) { 17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ("-u".equals(arg)) { 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (LOCAL_LOGV) Log.v("BatteryStats", "Dumping unplugged data"); 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isUnpluggedOnly = true; 17459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isUnpluggedOnly) { 17496b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dumpCheckinLocked(pw, STATS_SINCE_UNPLUGGED, -1); 17509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else { 17526b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dumpCheckinLocked(pw, STATS_SINCE_CHARGED, -1); 17536b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dumpCheckinLocked(pw, STATS_SINCE_UNPLUGGED, -1); 17549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1757