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; 20e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackbornimport java.util.ArrayList; 218103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackbornimport java.util.Collections; 228103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackbornimport java.util.Comparator; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Formatter; 2437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackbornimport java.util.HashMap; 25e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackbornimport java.util.List; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 28a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackbornimport android.content.Context; 29e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackbornimport android.content.pm.ApplicationInfo; 305284090631e638b916d9a453212e9dc802656a67Wink Savilleimport android.telephony.SignalStrength; 315f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackbornimport android.text.format.DateFormat; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Printer; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.SparseArray; 3437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackbornimport android.util.SparseIntArray; 351ebccf531d1049853b3b0630035434619682c016Dianne Hackbornimport android.util.TimeUtils; 360068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackbornimport android.view.Display; 37a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackbornimport com.android.internal.os.BatterySipper; 38a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackbornimport com.android.internal.os.BatteryStatsHelper; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A class providing access to battery usage statistics, including information on 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * wakelocks, processes, packages, and services. All times are represented in microseconds 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * except where indicated otherwise. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class BatteryStats implements Parcelable { 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final boolean LOCAL_LOGV = false; 4991268cf21eace600792d04db1ac62e9268f48002Dianne Hackborn 5091268cf21eace600792d04db1ac62e9268f48002Dianne Hackborn /** @hide */ 5191268cf21eace600792d04db1ac62e9268f48002Dianne Hackborn public static final String SERVICE_NAME = "batterystats"; 5291268cf21eace600792d04db1ac62e9268f48002Dianne Hackborn 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a partial wake lock timer. 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_PARTIAL = 0; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a full wake lock timer. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_FULL = 1; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a window wake lock timer. 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int WAKE_TYPE_WINDOW = 2; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A constant indicating a sensor timer. 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SENSOR = 3; 72105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 73105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 7458e0eefeb5e2e270e2b04369bbf29fc22abda8d5Dianne Hackborn * A constant indicating a a wifi running timer 75617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 7658e0eefeb5e2e270e2b04369bbf29fc22abda8d5Dianne Hackborn public static final int WIFI_RUNNING = 4; 77617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 78617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 79105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * A constant indicating a full wifi lock timer 80105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 81617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int FULL_WIFI_LOCK = 5; 82105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 83105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 846ccaa540a18a69e5343e3e4d507f341880fcde5aNick Pelly * A constant indicating a wifi scan 85105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 866ccaa540a18a69e5343e3e4d507f341880fcde5aNick Pelly public static final int WIFI_SCAN = 6; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 885347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt /** 895347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt * A constant indicating a wifi multicast timer 905347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt */ 915347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public static final int WIFI_MULTICAST_ENABLED = 7; 925347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 94244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani * A constant indicating a video turn on timer 95244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani */ 96244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani public static final int VIDEO_TURNED_ON = 8; 97244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani 98244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani /** 99a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn * A constant indicating a vibrator on timer 100a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn */ 101a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public static final int VIBRATOR_ON = 9; 102a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 103a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn /** 1043e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey * A constant indicating a foreground activity timer 1053e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey */ 1063e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey public static final int FOREGROUND_ACTIVITY = 10; 1073e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey 1083e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey /** 109a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt * A constant indicating a wifi batched scan is active 110a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt */ 111a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt public static final int WIFI_BATCHED_SCAN = 11; 112a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt 113a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt /** 11461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn * A constant indicating a process state timer 11561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn */ 11661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn public static final int PROCESS_STATE = 12; 11761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 11861659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn /** 119fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn * A constant indicating a sync timer 120fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn */ 121fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int SYNC = 13; 122fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn 123fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn /** 124fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn * A constant indicating a job timer 125fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn */ 126fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int JOB = 14; 127fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn 128fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn /** 129d537987b173f6b48f5196a2ae7d445af1a49e2bbKweku Adams * A constant indicating an audio turn on timer 130d537987b173f6b48f5196a2ae7d445af1a49e2bbKweku Adams */ 131d537987b173f6b48f5196a2ae7d445af1a49e2bbKweku Adams public static final int AUDIO_TURNED_ON = 15; 132d537987b173f6b48f5196a2ae7d445af1a49e2bbKweku Adams 133d537987b173f6b48f5196a2ae7d445af1a49e2bbKweku Adams /** 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include all of the data in the stats, including previously saved data. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1366b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATS_SINCE_CHARGED = 0; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the current run in the stats. 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1414590e52f3d0558e01322fe4dd55bb612afdfb079Dianne Hackborn public static final int STATS_CURRENT = 1; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Include only the run since the last time the device was unplugged in the stats. 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1464590e52f3d0558e01322fe4dd55bb612afdfb079Dianne Hackborn public static final int STATS_SINCE_UNPLUGGED = 2; 147e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar 148e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // NOTE: Update this list if you add/change any stats above. 149e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar // These characters are supposed to represent "total", "last", "current", 1503bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn // and "unplugged". They were shortened for efficiency sake. 1512ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn private static final String[] STAT_NAMES = { "l", "c", "u" }; 1522ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Bump the version on this if the checkin format changes. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 156213bb2fd4da092826e45aae1a50403ab9c634d70Ashish Sharma private static final int BATTERY_STATS_CHECKIN_VERSION = 9; 15722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 15822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_KB = 1024; 15922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_MB = 1048576; // 1024^2 16022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar private static final long BYTES_PER_GB = 1073741824; //1024^3 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 162cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn private static final String VERSION_DATA = "vers"; 163e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn private static final String UID_DATA = "uid"; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String APK_DATA = "apk"; 165e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String PROCESS_DATA = "pr"; 166e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SENSOR_DATA = "sr"; 167a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn private static final String VIBRATOR_DATA = "vib"; 1683e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey private static final String FOREGROUND_DATA = "fg"; 16961659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn private static final String STATE_TIME_DATA = "st"; 170e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String WAKELOCK_DATA = "wl"; 171fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn private static final String SYNC_DATA = "sy"; 172fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn private static final String JOB_DATA = "jb"; 173c64edde69d18498fb2954f71a546357b07ab996aEvan Millar private static final String KERNEL_WAKELOCK_DATA = "kwl"; 174a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn private static final String WAKEUP_REASON_DATA = "wr"; 175e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String NETWORK_DATA = "nt"; 176e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String USER_ACTIVITY_DATA = "ua"; 177e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String BATTERY_DATA = "bt"; 178c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn private static final String BATTERY_DISCHARGE_DATA = "dc"; 179e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String BATTERY_LEVEL_DATA = "lv"; 1806ccaa540a18a69e5343e3e4d507f341880fcde5aNick Pelly private static final String WIFI_DATA = "wfl"; 181e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String MISC_DATA = "m"; 18257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn private static final String GLOBAL_NETWORK_DATA = "gn"; 183099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn private static final String HISTORY_STRING_POOL = "hsp"; 1848a0de58ece89c467c8e7415097d193e5f8db9db8Dianne Hackborn private static final String HISTORY_DATA = "h"; 185e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SCREEN_BRIGHTNESS_DATA = "br"; 186e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SIGNAL_STRENGTH_TIME_DATA = "sgt"; 187f37447bad3773b62176baa837908daf6edb44273Amith Yamasani private static final String SIGNAL_SCANNING_TIME_DATA = "sst"; 188e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String SIGNAL_STRENGTH_COUNT_DATA = "sgc"; 189e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String DATA_CONNECTION_TIME_DATA = "dct"; 190e84de8d702bd26fb1e5b55f3cfdd953d8a31ec22Evan Millar private static final String DATA_CONNECTION_COUNT_DATA = "dcc"; 191ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn private static final String WIFI_STATE_TIME_DATA = "wst"; 192ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn private static final String WIFI_STATE_COUNT_DATA = "wsc"; 1933251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn private static final String WIFI_SUPPL_STATE_TIME_DATA = "wsst"; 1943251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn private static final String WIFI_SUPPL_STATE_COUNT_DATA = "wssc"; 1953251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn private static final String WIFI_SIGNAL_STRENGTH_TIME_DATA = "wsgt"; 1963251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn private static final String WIFI_SIGNAL_STRENGTH_COUNT_DATA = "wsgc"; 197ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn private static final String BLUETOOTH_STATE_TIME_DATA = "bst"; 198ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn private static final String BLUETOOTH_STATE_COUNT_DATA = "bsc"; 199a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn private static final String POWER_USE_SUMMARY_DATA = "pws"; 200a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn private static final String POWER_USE_ITEM_DATA = "pwi"; 201ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn private static final String DISCHARGE_STEP_DATA = "dsd"; 202ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn private static final String CHARGE_STEP_DATA = "csd"; 203d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn private static final String DISCHARGE_TIME_REMAIN_DATA = "dtr"; 204d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn private static final String CHARGE_TIME_REMAIN_DATA = "ctr"; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2061d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final StringBuilder mFormatBuilder = new StringBuilder(32); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final Formatter mFormatter = new Formatter(mFormatBuilder); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 210617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * State for keeping track of counting information. 211617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 212617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static abstract class Counter { 213617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 214617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 215617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the count associated with this Counter for the 216617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * selected type of statistics. 217617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 2182ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT 219617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 220c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract int getCountLocked(int which); 221617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 222617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 223617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Temporary for debugging. 224617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 225617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void logState(Printer pw, String prefix); 226617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 227617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 228617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 229a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * State for keeping track of long counting information. 230a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn */ 231a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public static abstract class LongCounter { 232a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 233a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn /** 234a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * Returns the count associated with this Counter for the 235a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * selected type of statistics. 236a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * 2372ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT 238a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn */ 239a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public abstract long getCountLocked(int which); 240a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 241a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn /** 242a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * Temporary for debugging. 243a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn */ 244a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public abstract void logState(Printer pw, String prefix); 245a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 246a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 247a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn /** 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * State for keeping track of timing information. 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Timer { 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the count associated with this Timer for the 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected type of statistics. 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2562ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 258c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract int getCountLocked(int which); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time in microseconds associated with this Timer for the 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * selected type of statistics. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 26497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * @param elapsedRealtimeUs current elapsed realtime of system in microseconds 2652ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a time in microseconds 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 26897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getTotalTimeLocked(long elapsedRealtimeUs, int which); 269244fa5c05b2cc8c4c0754aeed4ee42c588ea89d1Amith Yamasani 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Temporary for debugging. 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 273627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract void logState(Printer pw, String prefix); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular uid. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Uid { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing wakelock statistics. 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Wakelock objects. 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Wakelock> getWakelockStats(); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 289fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn * Returns a mapping containing sync statistics. 290fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn * 291fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn * @return a Map from Strings to Timer objects. 292fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn */ 293fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public abstract Map<String, ? extends Timer> getSyncStats(); 294fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn 295fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn /** 296fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn * Returns a mapping containing scheduled job statistics. 297fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn * 298fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn * @return a Map from Strings to Timer objects. 299fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn */ 300fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public abstract Map<String, ? extends Timer> getJobStats(); 301fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn 302fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn /** 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular wake lock. 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Wakelock { 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Timer getWakeTime(int type); 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing sensor statistics. 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Integer sensor ids to Uid.Sensor objects. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 31461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn public abstract SparseArray<? extends Sensor> getSensorStats(); 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 317b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn * Returns a mapping containing active process data. 318b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn */ 319b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn public abstract SparseArray<? extends Pid> getPidStats(); 320b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn 321b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn /** 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing process statistics. 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Proc objects. 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Proc> getProcessStats(); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing package statistics. 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a Map from Strings to Uid.Pkg objects. 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Pkg> getPackageStats(); 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getUid(); 3397a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 340ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteWifiRunningLocked(long elapsedRealtime); 341ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteWifiStoppedLocked(long elapsedRealtime); 342ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteFullWifiLockAcquiredLocked(long elapsedRealtime); 343ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteFullWifiLockReleasedLocked(long elapsedRealtime); 344ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteWifiScanStartedLocked(long elapsedRealtime); 345ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteWifiScanStoppedLocked(long elapsedRealtime); 346ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteWifiBatchedScanStartedLocked(int csph, long elapsedRealtime); 347ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteWifiBatchedScanStoppedLocked(long elapsedRealtime); 348ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteWifiMulticastEnabledLocked(long elapsedRealtime); 349ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteWifiMulticastDisabledLocked(long elapsedRealtime); 350ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteActivityResumedLocked(long elapsedRealtime); 351ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract void noteActivityPausedLocked(long elapsedRealtime); 35297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getWifiRunningTime(long elapsedRealtimeUs, int which); 35397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getFullWifiLockTime(long elapsedRealtimeUs, int which); 35497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getWifiScanTime(long elapsedRealtimeUs, int which); 35597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getWifiBatchedScanTime(int csphBin, long elapsedRealtimeUs, int which); 35697ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getWifiMulticastTime(long elapsedRealtimeUs, int which); 35797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getAudioTurnedOnTime(long elapsedRealtimeUs, int which); 35897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getVideoTurnedOnTime(long elapsedRealtimeUs, int which); 3593e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey public abstract Timer getForegroundActivityTimer(); 36061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 36161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn // Time this uid has any processes in foreground state. 36261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn public static final int PROCESS_STATE_FOREGROUND = 0; 36361659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn // Time this uid has any process in active state (not cached). 36461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn public static final int PROCESS_STATE_ACTIVE = 1; 36561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn // Time this uid has any processes running at all. 36661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn public static final int PROCESS_STATE_RUNNING = 2; 36761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn // Total number of process states we track. 36861659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn public static final int NUM_PROCESS_STATE = 3; 36961659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 37061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn static final String[] PROCESS_STATE_NAMES = { 37161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn "Foreground", "Active", "Running" 37261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn }; 37361659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 37461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn public abstract long getProcessStateTime(int state, long elapsedRealtimeUs, int which); 37561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 376a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn public abstract Timer getVibratorOnTimer(); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 378a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt public static final int NUM_WIFI_BATCHED_SCAN_BINS = 5; 379a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt 380617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 381df693de4fe12f081555b449e2726e205fbd86572Jeff Brown * Note that these must match the constants in android.os.PowerManager. 382df693de4fe12f081555b449e2726e205fbd86572Jeff Brown * Also, if the user activity types change, the BatteryStatsImpl.VERSION must 383df693de4fe12f081555b449e2726e205fbd86572Jeff Brown * also be bumped. 384617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 385617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn static final String[] USER_ACTIVITY_TYPES = { 386df693de4fe12f081555b449e2726e205fbd86572Jeff Brown "other", "button", "touch" 387617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn }; 388617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 389df693de4fe12f081555b449e2726e205fbd86572Jeff Brown public static final int NUM_USER_ACTIVITY_TYPES = 3; 3907a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 391617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract void noteUserActivityLocked(int type); 392617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract boolean hasUserActivity(); 393617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getUserActivityCount(int type, int which); 3947a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 3957a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey public abstract boolean hasNetworkActivity(); 39657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public abstract long getNetworkActivityBytes(int type, int which); 39757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public abstract long getNetworkActivityPackets(int type, int which); 398d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn public abstract long getMobileRadioActiveTime(int which); 399d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn public abstract int getMobileRadioActiveCount(int which); 4007a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Sensor { 4027f84c065fa1615ee9afb5c229ec9b9319ab88920Mathias Agopian /* 4037f84c065fa1615ee9afb5c229ec9b9319ab88920Mathias Agopian * FIXME: it's not correct to use this magic value because it 4047f84c065fa1615ee9afb5c229ec9b9319ab88920Mathias Agopian * could clash with a sensor handle (which are defined by 4057f84c065fa1615ee9afb5c229ec9b9319ab88920Mathias Agopian * the sensor HAL, and therefore out of our control 4067f84c065fa1615ee9afb5c229ec9b9319ab88920Mathias Agopian */ 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Magic sensor number for the GPS. 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int GPS = -10000; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getHandle(); 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Timer getSensorTime(); 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 415b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn public class Pid { 416e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn public int mWakeNesting; 417e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn public long mWakeSumMs; 418e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn public long mWakeStartMs; 419b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn } 420b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular process. 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Proc { 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 426287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn public static class ExcessivePower { 427287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn public static final int TYPE_WAKE = 1; 428287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn public static final int TYPE_CPU = 2; 429287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn 430287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn public int type; 4319adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn public long overTime; 4329adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn public long usedTime; 4339adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn } 4349adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 436099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn * Returns true if this process is still active in the battery stats. 437099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn */ 438099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn public abstract boolean isActive(); 439099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn 440099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn /** 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time (in 1/100 sec) spent executing in user code. 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4432ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getUserTime(int which); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total time (in 1/100 sec) spent executing in system code. 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4502ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getSystemTime(int which); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times the process has been started. 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4572ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStarts(int which); 460eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani 461eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani /** 4621e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * Returns the number of times the process has crashed. 4631e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * 4641e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 4651e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn */ 4661e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn public abstract int getNumCrashes(int which); 4671e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn 4681e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn /** 4691e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * Returns the number of times the process has ANRed. 4701e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * 4711e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 4721e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn */ 4731e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn public abstract int getNumAnrs(int which); 4741e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn 4751e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn /** 476eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the cpu time spent in microseconds while the process was in the foreground. 4772ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 478eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * @return foreground cpu time in microseconds 479eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani */ 480eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani public abstract long getForegroundTime(int which); 481e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani 482e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani /** 483e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * Returns the approximate cpu time spent in microseconds, at a certain CPU speed. 484e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * @param speedStep the index of the CPU speed. This is not the actual speed of the 485e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * CPU. 4862ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 487e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani * @see BatteryStats#getCpuSpeedSteps() 488e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani */ 489e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani public abstract long getTimeAtCpuSpeedStep(int speedStep, int which); 4909adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn 491287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn public abstract int countExcessivePowers(); 4929adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn 493287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn public abstract ExcessivePower getExcessivePower(int i); 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular package. 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static abstract class Pkg { 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times this package has done something that could wake up the 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * device from sleep. 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5052ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getWakeups(int which); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a mapping containing service statistics. 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract Map<String, ? extends Serv> getServiceStats(); 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The statistics associated with a particular service. 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract class Serv { 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the amount of time spent started. 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param batteryUptime elapsed uptime on battery in microseconds. 5232ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getStartTime(long batteryUptime, int which); 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total number of times startService() has been called. 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5312ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStarts(int which); 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total number times the service has been launched. 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5382ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getLaunches(int which); 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 54571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public final static class HistoryTag { 54671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public String string; 54771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public int uid; 54871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 54971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public int poolIdx; 55071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 55171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public void setTo(HistoryTag o) { 55271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn string = o.string; 55371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn uid = o.uid; 55471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn poolIdx = o.poolIdx; 55571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 55671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 55771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public void setTo(String _string, int _uid) { 55871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn string = _string; 55971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn uid = _uid; 56071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn poolIdx = -1; 56171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 56271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 56371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 56471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn dest.writeString(string); 56571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn dest.writeInt(uid); 56671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 56771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 56871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public void readFromParcel(Parcel src) { 56971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn string = src.readString(); 57071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn uid = src.readInt(); 57171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn poolIdx = -1; 57271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 57371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 57471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn @Override 57571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public boolean equals(Object o) { 57671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (this == o) return true; 57771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (o == null || getClass() != o.getClass()) return false; 57871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 57971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn HistoryTag that = (HistoryTag) o; 58071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 58171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (uid != that.uid) return false; 58271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (!string.equals(that.string)) return false; 58371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 58471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn return true; 58571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 58671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 58771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn @Override 58871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public int hashCode() { 58971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn int result = string.hashCode(); 59071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn result = 31 * result + uid; 59171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn return result; 59271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 59371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 59471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 595ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn public final static class HistoryItem implements Parcelable { 5966b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public HistoryItem next; 5979a7554300637902bbb25991ffba41a9b8f682effDianne Hackborn 5989a7554300637902bbb25991ffba41a9b8f682effDianne Hackborn // The time of this event in milliseconds, as per SystemClock.elapsedRealtime(). 59932907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public long time; 60057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 6013d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn public static final byte CMD_UPDATE = 0; // These can be written as deltas 60257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final byte CMD_NULL = -1; 60357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final byte CMD_START = 4; 604e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn public static final byte CMD_CURRENT_TIME = 5; 605e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn public static final byte CMD_OVERFLOW = 6; 60637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn public static final byte CMD_RESET = 7; 60729cd7f19625a2a2a8528469e55f3aa495107b9e7Dianne Hackborn public static final byte CMD_SHUTDOWN = 8; 60857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 6091fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn public byte cmd = CMD_NULL; 6106b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 61157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn /** 61257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn * Return whether the command code is a delta data update. 61357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn */ 61457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public boolean isDeltaData() { 6153d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn return cmd == CMD_UPDATE; 61657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 61757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 61832907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public byte batteryLevel; 6196b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public byte batteryStatus; 6206b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public byte batteryHealth; 6216b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public byte batteryPlugType; 62232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 623c7e9e8b4f3e264375b416eff830739ecf0dc206cSungmin Choi public short batteryTemperature; 6246b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public char batteryVoltage; 6256b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 6263bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn // Constants from SCREEN_BRIGHTNESS_* 6276b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int STATE_BRIGHTNESS_SHIFT = 0; 62857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int STATE_BRIGHTNESS_MASK = 0x7; 6293bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn // Constants from SIGNAL_STRENGTH_* 6303251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE_PHONE_SIGNAL_STRENGTH_SHIFT = 3; 6313251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE_PHONE_SIGNAL_STRENGTH_MASK = 0x7 << STATE_PHONE_SIGNAL_STRENGTH_SHIFT; 6323bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn // Constants from ServiceState.STATE_* 63357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int STATE_PHONE_STATE_SHIFT = 6; 63457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int STATE_PHONE_STATE_MASK = 0x7 << STATE_PHONE_STATE_SHIFT; 6353bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn // Constants from DATA_CONNECTION_* 63657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int STATE_DATA_CONNECTION_SHIFT = 9; 63771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public static final int STATE_DATA_CONNECTION_MASK = 0x1f << STATE_DATA_CONNECTION_SHIFT; 63857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 6391fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn // These states always appear directly in the first int token 6401fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn // of a delta change; they should be ones that change relatively 6411fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn // frequently. 642a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public static final int STATE_CPU_RUNNING_FLAG = 1<<31; 643a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public static final int STATE_WAKE_LOCK_FLAG = 1<<30; 6443d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn public static final int STATE_GPS_ON_FLAG = 1<<29; 6453d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn public static final int STATE_WIFI_FULL_LOCK_FLAG = 1<<28; 646e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn public static final int STATE_WIFI_SCAN_FLAG = 1<<27; 6473d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<26; 648e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn public static final int STATE_MOBILE_RADIO_ACTIVE_FLAG = 1<<25; 6491fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn // These are on the lower bits used for the command; if they change 6501fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn // we need to write another int of data. 651a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public static final int STATE_SENSOR_ON_FLAG = 1<<23; 6521fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn public static final int STATE_AUDIO_ON_FLAG = 1<<22; 653a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public static final int STATE_PHONE_SCANNING_FLAG = 1<<21; 6541fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn public static final int STATE_SCREEN_ON_FLAG = 1<<20; 6551fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn public static final int STATE_BATTERY_PLUGGED_FLAG = 1<<19; 6561fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn public static final int STATE_PHONE_IN_CALL_FLAG = 1<<18; 6571fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn public static final int STATE_BLUETOOTH_ON_FLAG = 1<<16; 65840c8725804f46c9d53f2815e0ee69e6cfb0152ccDianne Hackborn 659f47d8f272c13f0fd264d5a71bcff1c18da10d854Dianne Hackborn public static final int MOST_INTERESTING_STATES = 660f47d8f272c13f0fd264d5a71bcff1c18da10d854Dianne Hackborn STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG 6613251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn | STATE_PHONE_IN_CALL_FLAG | STATE_BLUETOOTH_ON_FLAG; 662f47d8f272c13f0fd264d5a71bcff1c18da10d854Dianne Hackborn 66332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public int states; 66432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 6653251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn // Constants from WIFI_SUPPL_STATE_* 6663251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE2_WIFI_SUPPL_STATE_SHIFT = 0; 6673251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE2_WIFI_SUPPL_STATE_MASK = 0xf; 6683251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn // Values for NUM_WIFI_SIGNAL_STRENGTH_BINS 6693251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE2_WIFI_SIGNAL_STRENGTH_SHIFT = 4; 6703251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE2_WIFI_SIGNAL_STRENGTH_MASK = 6713251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 0x7 << STATE2_WIFI_SIGNAL_STRENGTH_SHIFT; 6723251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 6733251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE2_LOW_POWER_FLAG = 1<<31; 6743251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE2_VIDEO_ON_FLAG = 1<<30; 6753251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE2_WIFI_RUNNING_FLAG = 1<<29; 6763251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int STATE2_WIFI_ON_FLAG = 1<<28; 677abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn public static final int STATE2_FLASHLIGHT_FLAG = 1<<27; 6783251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 6793251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int MOST_INTERESTING_STATES2 = 6803251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn STATE2_LOW_POWER_FLAG | STATE2_WIFI_ON_FLAG; 6813251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 68240c8725804f46c9d53f2815e0ee69e6cfb0152ccDianne Hackborn public int states2; 68340c8725804f46c9d53f2815e0ee69e6cfb0152ccDianne Hackborn 68471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn // The wake lock that was acquired at this point. 68571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public HistoryTag wakelockTag; 68671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 687c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn // Kernel wakeup reason at this point. 688c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public HistoryTag wakeReasonTag; 689c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn 690eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_FLAG_START = 0x8000; 691eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_FLAG_FINISH = 0x4000; 692eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn 693eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn // No event in this item. 694eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_NONE = 0x0000; 695eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn // Event is about a process that is running. 696eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_PROC = 0x0001; 697eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn // Event is about an application package that is in the foreground. 698eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_FOREGROUND = 0x0002; 699eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn // Event is about an application package that is at the top of the screen. 700eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_TOP = 0x0003; 701fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn // Event is about active sync operations. 702a1f1a3c573acd91024fda0ceb3b921c73b186963Dianne Hackborn public static final int EVENT_SYNC = 0x0004; 703cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn // Events for all additional wake locks aquired/release within a wake block. 704cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn // These are not generated by default. 705cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn public static final int EVENT_WAKE_LOCK = 0x0005; 706fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn // Event is about an application executing a scheduled job. 707fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_JOB = 0x0006; 708fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn // Events for users running. 709fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_USER_RUNNING = 0x0007; 710fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn // Events for foreground user. 711fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_USER_FOREGROUND = 0x0008; 7121e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn // Events for connectivity changed. 7131e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn public static final int EVENT_CONNECTIVITY_CHANGED = 0x0009; 714eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn // Number of event types. 7151e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn public static final int EVENT_COUNT = 0x000a; 71637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn // Mask to extract out only the type part of the event. 71737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn public static final int EVENT_TYPE_MASK = ~(EVENT_FLAG_START|EVENT_FLAG_FINISH); 718eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn 719eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_PROC_START = EVENT_PROC | EVENT_FLAG_START; 720eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_PROC_FINISH = EVENT_PROC | EVENT_FLAG_FINISH; 721eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_FOREGROUND_START = EVENT_FOREGROUND | EVENT_FLAG_START; 722eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_FOREGROUND_FINISH = EVENT_FOREGROUND | EVENT_FLAG_FINISH; 723eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_TOP_START = EVENT_TOP | EVENT_FLAG_START; 724eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final int EVENT_TOP_FINISH = EVENT_TOP | EVENT_FLAG_FINISH; 725a1f1a3c573acd91024fda0ceb3b921c73b186963Dianne Hackborn public static final int EVENT_SYNC_START = EVENT_SYNC | EVENT_FLAG_START; 726a1f1a3c573acd91024fda0ceb3b921c73b186963Dianne Hackborn public static final int EVENT_SYNC_FINISH = EVENT_SYNC | EVENT_FLAG_FINISH; 727cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn public static final int EVENT_WAKE_LOCK_START = EVENT_WAKE_LOCK | EVENT_FLAG_START; 728cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn public static final int EVENT_WAKE_LOCK_FINISH = EVENT_WAKE_LOCK | EVENT_FLAG_FINISH; 729fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_JOB_START = EVENT_JOB | EVENT_FLAG_START; 730fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_JOB_FINISH = EVENT_JOB | EVENT_FLAG_FINISH; 731fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_USER_RUNNING_START = EVENT_USER_RUNNING | EVENT_FLAG_START; 732fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_USER_RUNNING_FINISH = EVENT_USER_RUNNING | EVENT_FLAG_FINISH; 733fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_USER_FOREGROUND_START = 734fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn EVENT_USER_FOREGROUND | EVENT_FLAG_START; 735fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn public static final int EVENT_USER_FOREGROUND_FINISH = 736fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn EVENT_USER_FOREGROUND | EVENT_FLAG_FINISH; 73757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 73857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn // For CMD_EVENT. 73957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public int eventCode; 74071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public HistoryTag eventTag; 74171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 7429a7554300637902bbb25991ffba41a9b8f682effDianne Hackborn // Only set for CMD_CURRENT_TIME or CMD_RESET, as per System.currentTimeMillis(). 743e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn public long currentTime; 744e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn 74571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn // Meta-data when reading. 74671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public int numReadInts; 74771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 74871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn // Pre-allocated objects. 74971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public final HistoryTag localWakelockTag = new HistoryTag(); 750c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public final HistoryTag localWakeReasonTag = new HistoryTag(); 75171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public final HistoryTag localEventTag = new HistoryTag(); 75257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 7536b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public HistoryItem() { 75432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 75532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 7566b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public HistoryItem(long time, Parcel src) { 75732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn this.time = time; 75871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn numReadInts = 2; 7590ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn readFromParcel(src); 76032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 76132907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 76232907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public int describeContents() { 76332907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn return 0; 76432907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 76532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn 76632907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn public void writeToParcel(Parcel dest, int flags) { 76732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn dest.writeLong(time); 7686b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int bat = (((int)cmd)&0xff) 7696b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryLevel)<<8)&0xff00) 7706b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryStatus)<<16)&0xf0000) 7716b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryHealth)<<20)&0xf00000) 772e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn | ((((int)batteryPlugType)<<24)&0xf000000) 773e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn | (wakelockTag != null ? 0x10000000 : 0) 774e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn | (wakeReasonTag != null ? 0x20000000 : 0) 775e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn | (eventCode != EVENT_NONE ? 0x40000000 : 0); 7766b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dest.writeInt(bat); 7776b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn bat = (((int)batteryTemperature)&0xffff) 7786b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn | ((((int)batteryVoltage)<<16)&0xffff0000); 7796b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn dest.writeInt(bat); 78032907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn dest.writeInt(states); 781a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn dest.writeInt(states2); 78271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (wakelockTag != null) { 78371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn wakelockTag.writeToParcel(dest, flags); 78471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 785c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (wakeReasonTag != null) { 786c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn wakeReasonTag.writeToParcel(dest, flags); 787c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 7883d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn if (eventCode != EVENT_NONE) { 78957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn dest.writeInt(eventCode); 79071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn eventTag.writeToParcel(dest, flags); 79157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 79237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (cmd == CMD_CURRENT_TIME || cmd == CMD_RESET) { 793e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn dest.writeLong(currentTime); 794e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn } 79532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 7960ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 79757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public void readFromParcel(Parcel src) { 79871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn int start = src.dataPosition(); 7990ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn int bat = src.readInt(); 8000ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn cmd = (byte)(bat&0xff); 8010ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn batteryLevel = (byte)((bat>>8)&0xff); 8020ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn batteryStatus = (byte)((bat>>16)&0xf); 8030ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn batteryHealth = (byte)((bat>>20)&0xf); 8040ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn batteryPlugType = (byte)((bat>>24)&0xf); 805e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn int bat2 = src.readInt(); 806e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn batteryTemperature = (short)(bat2&0xffff); 807e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn batteryVoltage = (char)((bat2>>16)&0xffff); 8080ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn states = src.readInt(); 809a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn states2 = src.readInt(); 810e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn if ((bat&0x10000000) != 0) { 81171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn wakelockTag = localWakelockTag; 81271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn wakelockTag.readFromParcel(src); 81371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } else { 81471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn wakelockTag = null; 81571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 816e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn if ((bat&0x20000000) != 0) { 817c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn wakeReasonTag = localWakeReasonTag; 818c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn wakeReasonTag.readFromParcel(src); 819c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } else { 820c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn wakeReasonTag = null; 821c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 822e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn if ((bat&0x40000000) != 0) { 823e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn eventCode = src.readInt(); 82471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn eventTag = localEventTag; 82571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn eventTag.readFromParcel(src); 826e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn } else { 827e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn eventCode = EVENT_NONE; 828e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn eventTag = null; 829e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn } 83037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (cmd == CMD_CURRENT_TIME || cmd == CMD_RESET) { 831e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn currentTime = src.readLong(); 832e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn } else { 833e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn currentTime = 0; 8341fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn } 83571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn numReadInts += (src.dataPosition()-start)/4; 8360ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 8370ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 8381fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn public void clear() { 8391fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn time = 0; 8401fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn cmd = CMD_NULL; 8411fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn batteryLevel = 0; 8421fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn batteryStatus = 0; 8431fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn batteryHealth = 0; 8441fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn batteryPlugType = 0; 8451fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn batteryTemperature = 0; 8461fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn batteryVoltage = 0; 8471fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn states = 0; 848a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn states2 = 0; 84971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn wakelockTag = null; 850c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn wakeReasonTag = null; 85157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn eventCode = EVENT_NONE; 85271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn eventTag = null; 8531fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn } 8541fadab5c36445bb9f0997904dbce44f8e234f847Dianne Hackborn 855ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn public void setTo(HistoryItem o) { 856ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn time = o.time; 857ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn cmd = o.cmd; 8583d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn setToCommon(o); 8593d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn } 8603d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn 8613d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn public void setTo(long time, byte cmd, HistoryItem o) { 8623d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn this.time = time; 8633d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn this.cmd = cmd; 8643d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn setToCommon(o); 8653d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn } 8663d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn 8673d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn private void setToCommon(HistoryItem o) { 868ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn batteryLevel = o.batteryLevel; 869ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn batteryStatus = o.batteryStatus; 870ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn batteryHealth = o.batteryHealth; 871ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn batteryPlugType = o.batteryPlugType; 872ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn batteryTemperature = o.batteryTemperature; 873ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn batteryVoltage = o.batteryVoltage; 874ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn states = o.states; 875a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn states2 = o.states2; 87671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (o.wakelockTag != null) { 87771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn wakelockTag = localWakelockTag; 87871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn wakelockTag.setTo(o.wakelockTag); 87971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } else { 88071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn wakelockTag = null; 88171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 882c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (o.wakeReasonTag != null) { 883c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn wakeReasonTag = localWakeReasonTag; 884c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn wakeReasonTag.setTo(o.wakeReasonTag); 885c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } else { 886c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn wakeReasonTag = null; 887c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 88857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn eventCode = o.eventCode; 88971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (o.eventTag != null) { 89071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn eventTag = localEventTag; 89171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn eventTag.setTo(o.eventTag); 89271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } else { 89371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn eventTag = null; 89471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 895e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn currentTime = o.currentTime; 896ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn } 897ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn 89857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public boolean sameNonEvent(HistoryItem o) { 8999adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn return batteryLevel == o.batteryLevel 9009adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn && batteryStatus == o.batteryStatus 9019adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn && batteryHealth == o.batteryHealth 9029adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn && batteryPlugType == o.batteryPlugType 9039adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn && batteryTemperature == o.batteryTemperature 9049adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn && batteryVoltage == o.batteryVoltage 905e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn && states == o.states 906a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn && states2 == o.states2 907e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn && currentTime == o.currentTime; 9089adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn } 90957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 91057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public boolean same(HistoryItem o) { 91171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (!sameNonEvent(o) || eventCode != o.eventCode) { 91257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn return false; 91357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 91471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (wakelockTag != o.wakelockTag) { 91571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (wakelockTag == null || o.wakelockTag == null) { 91671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn return false; 91771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 91871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (!wakelockTag.equals(o.wakelockTag)) { 91971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn return false; 92071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 92171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 922c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (wakeReasonTag != o.wakeReasonTag) { 923c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (wakeReasonTag == null || o.wakeReasonTag == null) { 924c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn return false; 925c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 926c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (!wakeReasonTag.equals(o.wakeReasonTag)) { 927c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn return false; 928c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 929c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 93071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (eventTag != o.eventTag) { 93171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (eventTag == null || o.eventTag == null) { 93271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn return false; 93371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 93471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (!eventTag.equals(o.eventTag)) { 93571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn return false; 93671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 93757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 93871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn return true; 93957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 9406b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 94137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn 94237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn public final static class HistoryEventTracker { 94337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn private final HashMap<String, SparseIntArray>[] mActiveEvents 94437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn = (HashMap<String, SparseIntArray>[]) new HashMap[HistoryItem.EVENT_COUNT]; 94537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn 94637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn public boolean updateState(int code, String name, int uid, int poolIdx) { 94737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if ((code&HistoryItem.EVENT_FLAG_START) != 0) { 94837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn int idx = code&HistoryItem.EVENT_TYPE_MASK; 94937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn HashMap<String, SparseIntArray> active = mActiveEvents[idx]; 95037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (active == null) { 95137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn active = new HashMap<String, SparseIntArray>(); 95237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn mActiveEvents[idx] = active; 95337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 95437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn SparseIntArray uids = active.get(name); 95537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (uids == null) { 95637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn uids = new SparseIntArray(); 95737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn active.put(name, uids); 95837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 95937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (uids.indexOfKey(uid) >= 0) { 96037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn // Already set, nothing to do! 96137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn return false; 96237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 96337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn uids.put(uid, poolIdx); 96437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } else if ((code&HistoryItem.EVENT_FLAG_FINISH) != 0) { 96537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn int idx = code&HistoryItem.EVENT_TYPE_MASK; 96637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn HashMap<String, SparseIntArray> active = mActiveEvents[idx]; 96737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (active == null) { 96837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn // not currently active, nothing to do. 96937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn return false; 97037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 97137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn SparseIntArray uids = active.get(name); 97237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (uids == null) { 97337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn // not currently active, nothing to do. 97437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn return false; 97537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 97637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn idx = uids.indexOfKey(uid); 97737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (idx < 0) { 97837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn // not currently active, nothing to do. 97937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn return false; 98037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 98137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn uids.removeAt(idx); 98237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (uids.size() <= 0) { 98337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn active.remove(name); 98437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 98537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 98637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn return true; 98737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 98837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn 989cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn public void removeEvents(int code) { 990cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn int idx = code&HistoryItem.EVENT_TYPE_MASK; 991cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn mActiveEvents[idx] = null; 992cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn } 993cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn 99437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn public HashMap<String, SparseIntArray> getStateForEvent(int code) { 99537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn return mActiveEvents[code]; 99637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 99737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 99837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn 9996b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final class BitDescription { 10006b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final int mask; 10016b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final int shift; 10026b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final String name; 100357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public final String shortName; 10046b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public final String[] values; 100557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public final String[] shortValues; 10066b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 100757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public BitDescription(int mask, String name, String shortName) { 10086b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.mask = mask; 10096b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.shift = -1; 10106b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.name = name; 101157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn this.shortName = shortName; 10126b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.values = null; 101357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn this.shortValues = null; 10146b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 10156b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 101657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public BitDescription(int mask, int shift, String name, String shortName, 101757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn String[] values, String[] shortValues) { 10186b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.mask = mask; 10196b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.shift = shift; 10206b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.name = name; 102157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn this.shortName = shortName; 10226b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn this.values = values; 102357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn this.shortValues = shortValues; 10246b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 102532907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 102637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn 1027fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn /** 1028fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn * Don't allow any more batching in to the current history event. This 1029fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn * is called when printing partial histories, so to ensure that the next 1030fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn * history event will go in to a new batch after what was printed in the 1031fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn * last partial history. 1032fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn */ 1033fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn public abstract void commitCurrentHistoryBatchLocked(); 1034fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn 103571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public abstract int getHistoryTotalSize(); 103671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 103771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public abstract int getHistoryUsedSize(); 103871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 1039ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn public abstract boolean startIteratingHistoryLocked(); 1040ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn 1041099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn public abstract int getHistoryStringPoolSize(); 1042099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn 104371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public abstract int getHistoryStringPoolBytes(); 104471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 104571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public abstract String getHistoryTagPoolString(int index); 104671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 104771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn public abstract int getHistoryTagPoolUid(int index); 1048099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn 1049ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn public abstract boolean getNextHistoryLocked(HistoryItem out); 1050ce2ef766cad1bb186ea522f76c4ac6a8bb3dfa87Dianne Hackborn 10510ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn public abstract void finishIteratingHistoryLocked(); 10520ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 10530ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn public abstract boolean startIteratingOldHistoryLocked(); 10540ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 10550ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn public abstract boolean getNextOldHistoryLocked(HistoryItem out); 10560ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 10570ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn public abstract void finishIteratingOldHistoryLocked(); 10580ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 10599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1060b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn * Return the base time offset for the battery history. 1061b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn */ 1062b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn public abstract long getHistoryBaseTime(); 1063b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn 1064b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn /** 10659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the number of times the device has been started. 10669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 10679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract int getStartCount(); 10689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1070eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the screen has been on while the device was 10719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running on battery. 10729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 10739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 10749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 107597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getScreenOnTime(long elapsedRealtimeUs, int which); 10769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 107777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn /** 107877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn * Returns the number of times the screen was turned on. 107977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn * 108077b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn * {@hide} 108177b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn */ 108277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn public abstract int getScreenOnCount(int which); 108377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn 1084e95c3cd89591ba586aa8a0f7a17660c6fb8770bcJeff Brown public abstract long getInteractiveTime(long elapsedRealtimeUs, int which); 1085e95c3cd89591ba586aa8a0f7a17660c6fb8770bcJeff Brown 1086617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_DARK = 0; 1087617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_DIM = 1; 1088617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_MEDIUM = 2; 1089617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_LIGHT = 3; 1090617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int SCREEN_BRIGHTNESS_BRIGHT = 4; 1091617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1092617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn static final String[] SCREEN_BRIGHTNESS_NAMES = { 1093617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn "dark", "dim", "medium", "light", "bright" 1094617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn }; 1095617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 109657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn static final String[] SCREEN_BRIGHTNESS_SHORT_NAMES = { 109757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn "0", "1", "2", "3", "4" 109857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn }; 109957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 1100617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public static final int NUM_SCREEN_BRIGHTNESS_BINS = 5; 11013251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 1102617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 1103eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the screen has been on with 1104617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * the given brightness 1105617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 1106617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 1107617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 1108617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract long getScreenBrightnessTime(int brightnessBin, 110997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long elapsedRealtimeUs, int which); 1110617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 11119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1112cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn * Returns the time in microseconds that low power mode has been enabled while the device was 1113cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn * running on battery. 1114cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn * 1115cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn * {@hide} 1116cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn */ 1117cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn public abstract long getLowPowerModeEnabledTime(long elapsedRealtimeUs, int which); 1118cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn 1119cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn /** 1120cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn * Returns the number of times that low power mode was enabled. 1121cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn * 1122cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn * {@hide} 1123cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn */ 1124cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn public abstract int getLowPowerModeEnabledCount(int which); 1125cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn 1126cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn /** 11271e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * Returns the number of times that connectivity state changed. 11281e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * 11291e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn * {@hide} 11301e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn */ 11311e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn public abstract int getNumConnectivityChange(int which); 11321e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn 11331e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn /** 1134eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been on while the device was 11359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * running on battery. 11369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 11379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 11389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 113997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getPhoneOnTime(long elapsedRealtimeUs, int which); 1140627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 1141627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn /** 114277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn * Returns the number of times a phone call was activated. 114377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn * 114477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn * {@hide} 114577b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn */ 114677b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn public abstract int getPhoneOnCount(int which); 114777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn 114877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn /** 1149eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been running with 1150627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * the given signal strength. 1151627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * 1152627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * {@hide} 1153627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn */ 1154627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract long getPhoneSignalStrengthTime(int strengthBin, 115597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long elapsedRealtimeUs, int which); 1156627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 1157617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 1158f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * Returns the time in microseconds that the phone has been trying to 1159f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * acquire a signal. 1160f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * 1161f37447bad3773b62176baa837908daf6edb44273Amith Yamasani * {@hide} 1162f37447bad3773b62176baa837908daf6edb44273Amith Yamasani */ 1163f37447bad3773b62176baa837908daf6edb44273Amith Yamasani public abstract long getPhoneSignalScanningTime( 116497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long elapsedRealtimeUs, int which); 1165f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 1166f37447bad3773b62176baa837908daf6edb44273Amith Yamasani /** 1167617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the number of times the phone has entered the given signal strength. 1168617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 1169617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 1170617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 1171617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getPhoneSignalStrengthCount(int strengthBin, int which); 1172617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1173e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn /** 1174e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * Returns the time in microseconds that the mobile network has been active 1175e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * (in a high power state). 1176e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * 1177e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * {@hide} 1178e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn */ 117997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getMobileRadioActiveTime(long elapsedRealtimeUs, int which); 1180e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn 1181d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn /** 1182d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * Returns the number of times that the mobile network has transitioned to the 1183d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * active state. 1184d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * 1185d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * {@hide} 1186d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn */ 1187d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn public abstract int getMobileRadioActiveCount(int which); 1188d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 1189d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn /** 1190a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * Returns the time in microseconds that is the difference between the mobile radio 1191a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * time we saw based on the elapsed timestamp when going down vs. the given time stamp 1192a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * from the radio. 1193a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * 1194a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn * {@hide} 1195a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn */ 1196a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public abstract long getMobileRadioActiveAdjustedTime(int which); 1197a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 1198a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn /** 1199d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * Returns the time in microseconds that the mobile network has been active 1200d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * (in a high power state) but not being able to blame on an app. 1201d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * 1202d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * {@hide} 1203d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn */ 1204d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn public abstract long getMobileRadioActiveUnknownTime(int which); 1205d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 1206d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn /** 120777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn * Return count of number of times radio was up that could not be blamed on apps. 1208d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * 1209d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn * {@hide} 1210d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn */ 1211d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn public abstract int getMobileRadioActiveUnknownCount(int which); 1212e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn 1213627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_NONE = 0; 1214627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_GPRS = 1; 1215627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_EDGE = 2; 1216627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public static final int DATA_CONNECTION_UMTS = 3; 12176b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_CDMA = 4; 12186b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_EVDO_0 = 5; 12196b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_EVDO_A = 6; 12206b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_1xRTT = 7; 12216b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_HSDPA = 8; 12226b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_HSUPA = 9; 12236b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_HSPA = 10; 12246b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_IDEN = 11; 12256b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int DATA_CONNECTION_EVDO_B = 12; 1226962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt public static final int DATA_CONNECTION_LTE = 13; 1227962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt public static final int DATA_CONNECTION_EHRPD = 14; 1228b71703cfdfbac35a6e5afaa437d073cf835c25dbPatrick Tjin public static final int DATA_CONNECTION_HSPAP = 15; 1229b71703cfdfbac35a6e5afaa437d073cf835c25dbPatrick Tjin public static final int DATA_CONNECTION_OTHER = 16; 1230962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt 1231627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn static final String[] DATA_CONNECTION_NAMES = { 12326b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn "none", "gprs", "edge", "umts", "cdma", "evdo_0", "evdo_A", 1233962a990a45a2a9f9c3002064e71f9c2fed86acf1Robert Greenwalt "1xrtt", "hsdpa", "hsupa", "hspa", "iden", "evdo_b", "lte", 1234b71703cfdfbac35a6e5afaa437d073cf835c25dbPatrick Tjin "ehrpd", "hspap", "other" 1235627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn }; 1236627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 12376b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final int NUM_DATA_CONNECTION_TYPES = DATA_CONNECTION_OTHER+1; 1238627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 1239627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn /** 1240eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that the phone has been running with 1241627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * the given data connection. 1242627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * 1243627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn * {@hide} 1244627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn */ 1245627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public abstract long getPhoneDataConnectionTime(int dataType, 124697ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long elapsedRealtimeUs, int which); 1247627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 12489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1249617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * Returns the number of times the phone has entered the given data 1250617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * connection type. 1251617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * 1252617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn * {@hide} 1253617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn */ 1254617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public abstract int getPhoneDataConnectionCount(int dataType, int which); 1255a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 12563251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_INVALID = 0; 12573251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_DISCONNECTED = 1; 12583251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_INTERFACE_DISABLED = 2; 12593251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_INACTIVE = 3; 12603251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_SCANNING = 4; 12613251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_AUTHENTICATING = 5; 12623251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_ASSOCIATING = 6; 12633251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_ASSOCIATED = 7; 12643251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_FOUR_WAY_HANDSHAKE = 8; 12653251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_GROUP_HANDSHAKE = 9; 12663251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_COMPLETED = 10; 12673251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_DORMANT = 11; 12683251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int WIFI_SUPPL_STATE_UNINITIALIZED = 12; 12693251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 12703251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int NUM_WIFI_SUPPL_STATES = WIFI_SUPPL_STATE_UNINITIALIZED+1; 12713251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 12723251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn static final String[] WIFI_SUPPL_STATE_NAMES = { 12733251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn "invalid", "disconn", "disabled", "inactive", "scanning", 12743251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn "authenticating", "associating", "associated", "4-way-handshake", 12753251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn "group-handshake", "completed", "dormant", "uninit" 12763251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn }; 12773251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 12783251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn static final String[] WIFI_SUPPL_STATE_SHORT_NAMES = { 12793251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn "inv", "dsc", "dis", "inact", "scan", 12803251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn "auth", "ascing", "asced", "4-way", 12813251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn "group", "compl", "dorm", "uninit" 12823251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn }; 12833251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 12846b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS 12856b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn = new BitDescription[] { 1286a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn new BitDescription(HistoryItem.STATE_CPU_RUNNING_FLAG, "running", "r"), 12873d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock", "w"), 12883d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_SENSOR_ON_FLAG, "sensor", "s"), 128957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn new BitDescription(HistoryItem.STATE_GPS_ON_FLAG, "gps", "g"), 129057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn new BitDescription(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG, "wifi_full_lock", "Wl"), 129157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn new BitDescription(HistoryItem.STATE_WIFI_SCAN_FLAG, "wifi_scan", "Ws"), 129257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn new BitDescription(HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG, "wifi_multicast", "Wm"), 1293e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn new BitDescription(HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG, "mobile_radio", "Pr"), 12943d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_PHONE_SCANNING_FLAG, "phone_scanning", "Psc"), 129557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio", "a"), 12963d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_SCREEN_ON_FLAG, "screen", "S"), 12973d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_BATTERY_PLUGGED_FLAG, "plugged", "BP"), 12983d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_PHONE_IN_CALL_FLAG, "phone_in_call", "Pcl"), 12993d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_BLUETOOTH_ON_FLAG, "bluetooth", "b"), 13003d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_DATA_CONNECTION_MASK, 13013d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn HistoryItem.STATE_DATA_CONNECTION_SHIFT, "data_conn", "Pcn", 13023d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn DATA_CONNECTION_NAMES, DATA_CONNECTION_NAMES), 13033d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_PHONE_STATE_MASK, 13043d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn HistoryItem.STATE_PHONE_STATE_SHIFT, "phone_state", "Pst", 13053d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new String[] {"in", "out", "emergency", "off"}, 13063d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new String[] {"in", "out", "em", "off"}), 13073251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new BitDescription(HistoryItem.STATE_PHONE_SIGNAL_STRENGTH_MASK, 13083251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn HistoryItem.STATE_PHONE_SIGNAL_STRENGTH_SHIFT, "phone_signal_strength", "Pss", 13093251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn SignalStrength.SIGNAL_STRENGTH_NAMES, 13103251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new String[] { "0", "1", "2", "3", "4" }), 13113d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn new BitDescription(HistoryItem.STATE_BRIGHTNESS_MASK, 13123d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn HistoryItem.STATE_BRIGHTNESS_SHIFT, "brightness", "Sb", 13133d658bf20e2d56e36941e7407deebeec1276fbcfDianne Hackborn SCREEN_BRIGHTNESS_NAMES, SCREEN_BRIGHTNESS_SHORT_NAMES), 13146b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn }; 1315617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1316a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public static final BitDescription[] HISTORY_STATE2_DESCRIPTIONS 1317a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn = new BitDescription[] { 1318cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn new BitDescription(HistoryItem.STATE2_LOW_POWER_FLAG, "low_power", "lp"), 13193251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new BitDescription(HistoryItem.STATE2_VIDEO_ON_FLAG, "video", "v"), 13203251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new BitDescription(HistoryItem.STATE2_WIFI_RUNNING_FLAG, "wifi_running", "Wr"), 13213251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new BitDescription(HistoryItem.STATE2_WIFI_ON_FLAG, "wifi", "W"), 1322abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn new BitDescription(HistoryItem.STATE2_FLASHLIGHT_FLAG, "flashlight", "fl"), 13233251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new BitDescription(HistoryItem.STATE2_WIFI_SIGNAL_STRENGTH_MASK, 13243251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn HistoryItem.STATE2_WIFI_SIGNAL_STRENGTH_SHIFT, "wifi_signal_strength", "Wss", 13253251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new String[] { "0", "1", "2", "3", "4" }, 13263251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new String[] { "0", "1", "2", "3", "4" }), 13273251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn new BitDescription(HistoryItem.STATE2_WIFI_SUPPL_STATE_MASK, 13283251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn HistoryItem.STATE2_WIFI_SUPPL_STATE_SHIFT, "wifi_suppl", "Wsp", 13293251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn WIFI_SUPPL_STATE_NAMES, WIFI_SUPPL_STATE_SHORT_NAMES), 1330a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn }; 1331a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 1332eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final String[] HISTORY_EVENT_NAMES = new String[] { 13331e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn "null", "proc", "fg", "top", "sync", "wake_lock_in", "job", "user", "userfg", "conn" 1334eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn }; 1335eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn 1336eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn public static final String[] HISTORY_EVENT_CHECKIN_NAMES = new String[] { 13371e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn "Enl", "Epr", "Efg", "Etp", "Esy", "Ewl", "Ejb", "Eur", "Euf", "Ecn" 1338eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn }; 1339eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn 1340617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn /** 1341eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that wifi has been on while the device was 1342105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * running on battery. 1343105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 1344105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 1345105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 134697ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getWifiOnTime(long elapsedRealtimeUs, int which); 1347d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 1348d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood /** 1349eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that wifi has been on and the driver has 1350d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * been in the running state while the device was running on battery. 1351d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * 1352d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood * {@hide} 1353d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood */ 135497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getGlobalWifiRunningTime(long elapsedRealtimeUs, int which); 1355d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 1356ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int WIFI_STATE_OFF = 0; 1357ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int WIFI_STATE_OFF_SCANNING = 1; 1358ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int WIFI_STATE_ON_NO_NETWORKS = 2; 1359ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int WIFI_STATE_ON_DISCONNECTED = 3; 1360ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int WIFI_STATE_ON_CONNECTED_STA = 4; 1361ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int WIFI_STATE_ON_CONNECTED_P2P = 5; 1362ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int WIFI_STATE_ON_CONNECTED_STA_P2P = 6; 1363ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int WIFI_STATE_SOFT_AP = 7; 1364ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 1365ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn static final String[] WIFI_STATE_NAMES = { 1366ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn "off", "scanning", "no_net", "disconn", 1367ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn "sta", "p2p", "sta_p2p", "soft_ap" 1368ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn }; 1369ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 1370ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int NUM_WIFI_STATES = WIFI_STATE_SOFT_AP+1; 1371ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 1372ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn /** 1373ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn * Returns the time in microseconds that WiFi has been running in the given state. 1374ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn * 1375ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn * {@hide} 1376ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn */ 1377ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract long getWifiStateTime(int wifiState, 137897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long elapsedRealtimeUs, int which); 1379ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 1380ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn /** 1381ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn * Returns the number of times that WiFi has entered the given state. 1382ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn * 1383ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn * {@hide} 1384ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn */ 1385ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract int getWifiStateCount(int wifiState, int which); 1386ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 1387105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 13883251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * Returns the time in microseconds that the wifi supplicant has been 13893251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * in a given state. 13903251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * 13913251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * {@hide} 13923251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn */ 13933251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public abstract long getWifiSupplStateTime(int state, long elapsedRealtimeUs, int which); 13943251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 13953251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn /** 13963251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * Returns the number of times that the wifi supplicant has transitioned 13973251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * to a given state. 13983251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * 13993251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * {@hide} 14003251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn */ 14013251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public abstract int getWifiSupplStateCount(int state, int which); 14023251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 14033251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public static final int NUM_WIFI_SIGNAL_STRENGTH_BINS = 5; 14043251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 14053251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn /** 14063251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * Returns the time in microseconds that WIFI has been running with 14073251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * the given signal strength. 14083251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * 14093251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * {@hide} 14103251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn */ 14113251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public abstract long getWifiSignalStrengthTime(int strengthBin, 14123251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn long elapsedRealtimeUs, int which); 14133251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 14143251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn /** 14153251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * Returns the number of times WIFI has entered the given signal strength. 14163251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * 14173251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn * {@hide} 14183251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn */ 14193251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn public abstract int getWifiSignalStrengthCount(int strengthBin, int which); 14203251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 14213251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn /** 1422eaeb663bcd7a82b654954b42663232cbd7bef7e7Amith Yamasani * Returns the time in microseconds that bluetooth has been on while the device was 1423105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * running on battery. 1424105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * 1425105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project * {@hide} 1426105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 142797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long getBluetoothOnTime(long elapsedRealtimeUs, int which); 1428105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1429a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public abstract int getBluetoothPingCount(); 1430a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 1431ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int BLUETOOTH_STATE_INACTIVE = 0; 1432ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int BLUETOOTH_STATE_LOW = 1; 1433ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int BLUETOOTH_STATE_MEDIUM = 2; 1434ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int BLUETOOTH_STATE_HIGH = 3; 1435e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn 1436ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn static final String[] BLUETOOTH_STATE_NAMES = { 1437ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn "inactive", "low", "med", "high" 1438e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn }; 1439e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn 1440ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public static final int NUM_BLUETOOTH_STATES = BLUETOOTH_STATE_HIGH +1; 1441e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn 1442e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn /** 1443e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * Returns the time in microseconds that Bluetooth has been running in the 1444e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * given active state. 1445e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * 1446e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * {@hide} 1447e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn */ 1448ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract long getBluetoothStateTime(int bluetoothState, 144997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long elapsedRealtimeUs, int which); 1450e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn 1451e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn /** 1452ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn * Returns the number of times that Bluetooth has entered the given active state. 1453e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * 1454e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn * {@hide} 1455e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn */ 1456ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn public abstract int getBluetoothStateCount(int bluetoothState, int which); 1457e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn 1458abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn /** 1459abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn * Returns the time in microseconds that the flashlight has been on while the device was 1460abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn * running on battery. 1461abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn * 1462abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn * {@hide} 1463abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn */ 1464abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn public abstract long getFlashlightOnTime(long elapsedRealtimeUs, int which); 1465abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn 1466abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn /** 1467abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn * Returns the number of times that the flashlight has been turned on while the device was 1468abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn * running on battery. 1469abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn * 1470abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn * {@hide} 1471abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn */ 1472abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn public abstract long getFlashlightOnCount(int which); 1473abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn 147457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int NETWORK_MOBILE_RX_DATA = 0; 147557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int NETWORK_MOBILE_TX_DATA = 1; 147657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int NETWORK_WIFI_RX_DATA = 2; 147757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int NETWORK_WIFI_TX_DATA = 3; 14787a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 147957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public static final int NUM_NETWORK_ACTIVITY_TYPES = NETWORK_WIFI_TX_DATA + 1; 14807a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 148157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public abstract long getNetworkActivityBytes(int type, int which); 148257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn public abstract long getNetworkActivityPackets(int type, int which); 14837a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 1484105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 14855f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn * Return the wall clock time when battery stats data collection started. 14865f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn */ 14875f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn public abstract long getStartClockTime(); 14885f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn 14895f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn /** 1490cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn * Return platform version tag that we were running in when the battery stats started. 1491cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn */ 1492cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn public abstract String getStartPlatformVersion(); 1493cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn 1494cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn /** 1495cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn * Return platform version tag that we were running in when the battery stats ended. 1496cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn */ 1497cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn public abstract String getEndPlatformVersion(); 1498cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn 1499cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn /** 1500cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn * Return the internal version code of the parcelled format. 1501cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn */ 1502cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn public abstract int getParcelVersion(); 1503cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn 1504cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn /** 15059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return whether we are currently running on battery. 15069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract boolean getIsOnBattery(); 15089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns a SparseArray containing the statistics for each uid. 15119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract SparseArray<? extends Uid> getUidStats(); 15139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current battery uptime in microseconds. 15169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the amount of elapsed realtime in microseconds. 15189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getBatteryUptime(long curTime); 15209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current battery realtime in microseconds. 15239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the amount of elapsed realtime in microseconds. 15259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long getBatteryRealtime(long curTime); 1527105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1528105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 1529633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * Returns the battery percentage level at the last time the device was unplugged from power, or 1530633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * the last time it booted on battery power. 1531105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1532633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public abstract int getDischargeStartLevel(); 1533105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1534105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project /** 1535633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * Returns the current battery percentage level if we are in a discharge cycle, otherwise 1536633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar * returns the level at the last plug event. 1537105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project */ 1538633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public abstract int getDischargeCurrentLevel(); 15399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15413bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn * Get the amount the battery has discharged since the stats were 15423bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn * last reset after charging, as a lower-end approximation. 15433bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn */ 15443bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn public abstract int getLowDischargeAmountSinceCharge(); 15453bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn 15463bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn /** 15473bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn * Get the amount the battery has discharged since the stats were 15483bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn * last reset after charging, as an upper-end approximation. 15493bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn */ 15503bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn public abstract int getHighDischargeAmountSinceCharge(); 15513bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn 15523bee5af8162c177f8c8f4199489a401058ab26a9Dianne Hackborn /** 155340c8725804f46c9d53f2815e0ee69e6cfb0152ccDianne Hackborn * Retrieve the discharge amount over the selected discharge period <var>which</var>. 155440c8725804f46c9d53f2815e0ee69e6cfb0152ccDianne Hackborn */ 155540c8725804f46c9d53f2815e0ee69e6cfb0152ccDianne Hackborn public abstract int getDischargeAmount(int which); 155640c8725804f46c9d53f2815e0ee69e6cfb0152ccDianne Hackborn 155740c8725804f46c9d53f2815e0ee69e6cfb0152ccDianne Hackborn /** 1558c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn * Get the amount the battery has discharged while the screen was on, 1559c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn * since the last time power was unplugged. 1560c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn */ 1561c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn public abstract int getDischargeAmountScreenOn(); 1562c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn 1563c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn /** 1564c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn * Get the amount the battery has discharged while the screen was on, 1565c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn * since the last time the device was charged. 1566c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn */ 1567c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn public abstract int getDischargeAmountScreenOnSinceCharge(); 1568c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn 1569c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn /** 1570c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn * Get the amount the battery has discharged while the screen was off, 1571c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn * since the last time power was unplugged. 1572c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn */ 1573c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn public abstract int getDischargeAmountScreenOff(); 1574c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn 1575c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn /** 1576c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn * Get the amount the battery has discharged while the screen was off, 1577c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn * since the last time the device was charged. 1578c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn */ 1579c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn public abstract int getDischargeAmountScreenOffSinceCharge(); 1580c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn 1581c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn /** 15829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current battery uptime in microseconds. 15839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the elapsed realtime in microseconds. 15852ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 15869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeBatteryUptime(long curTime, int which); 15889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current battery realtime in microseconds. 15919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 15929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 15932ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 15949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 15959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeBatteryRealtime(long curTime, int which); 15969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 15979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 159897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * Returns the total, last, or current battery screen off uptime in microseconds. 159997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * 160097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * @param curTime the elapsed realtime in microseconds. 16012ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 160297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn */ 160397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long computeBatteryScreenOffUptime(long curTime, int which); 160497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn 160597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn /** 160697ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * Returns the total, last, or current battery screen off realtime in microseconds. 160797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * 160897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * @param curTime the current elapsed realtime in microseconds. 16092ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 161097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn */ 161197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public abstract long computeBatteryScreenOffRealtime(long curTime, int which); 161297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn 161397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn /** 16149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current uptime in microseconds. 16159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 16169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 16172ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 16189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeUptime(long curTime, int which); 16209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 16229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the total, last, or current realtime in microseconds. 16232ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * 16249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param curTime the current elapsed realtime in microseconds. 16252ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 16269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 16279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract long computeRealtime(long curTime, int which); 16282ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn 16292ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn /** 16302ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * Compute an approximation for how much run time (in microseconds) is remaining on 16312ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * the battery. Returns -1 if no time can be computed: either there is not 16322ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * enough current data to make a decision, or the battery is currently 16332ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * charging. 16342ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * 16352ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param curTime The current elepsed realtime in microseconds. 16362ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn */ 16372ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn public abstract long computeBatteryTimeRemaining(long curTime); 16382ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn 16390068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn // The part of a step duration that is the actual time. 16400068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final long STEP_LEVEL_TIME_MASK = 0x000000ffffffffffL; 16410068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn 16420068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn // Bits in a step duration that are the new battery level we are at. 16430068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final long STEP_LEVEL_LEVEL_MASK = 0x0000ff0000000000L; 16440068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final long STEP_LEVEL_LEVEL_SHIFT = 40; 16450068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn 16460068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn // Bits in a step duration that are the initial mode we were in at that step. 16470068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final long STEP_LEVEL_INITIAL_MODE_MASK = 0x00ff000000000000L; 16480068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final long STEP_LEVEL_INITIAL_MODE_SHIFT = 48; 16490068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn 16500068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn // Bits in a step duration that indicate which modes changed during that step. 16510068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final long STEP_LEVEL_MODIFIED_MODE_MASK = 0xff00000000000000L; 16520068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final long STEP_LEVEL_MODIFIED_MODE_SHIFT = 56; 16530068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn 16540068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn // Step duration mode: the screen is on, off, dozed, etc; value is Display.STATE_* - 1. 16550068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final int STEP_LEVEL_MODE_SCREEN_STATE = 0x03; 16560068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn 16570068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn // Step duration mode: power save is on. 16580068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn public static final int STEP_LEVEL_MODE_POWER_SAVE = 0x04; 16590068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn 16602ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn /** 1661ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn * Return the historical number of discharge steps we currently have. 1662ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn */ 1663ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn public abstract int getNumDischargeStepDurations(); 1664ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn 1665ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn /** 1666ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn * Return the array of discharge step durations; the number of valid 1667ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn * items in it is returned by {@link #getNumDischargeStepDurations()}. 1668ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn * These values are in milliseconds. 1669ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn */ 1670ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn public abstract long[] getDischargeStepDurationsArray(); 1671ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn 1672ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn /** 16732ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * Compute an approximation for how much time (in microseconds) remains until the battery 16742ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * is fully charged. Returns -1 if no time can be computed: either there is not 16752ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * enough current data to make a decision, or the battery is currently 16762ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * discharging. 16772ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * 16782ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param curTime The current elepsed realtime in microseconds. 16792ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn */ 16802ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn public abstract long computeChargeTimeRemaining(long curTime); 16812ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn 1682ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn /** 1683ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn * Return the historical number of charge steps we currently have. 1684ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn */ 1685ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn public abstract int getNumChargeStepDurations(); 1686ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn 1687ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn /** 1688ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn * Return the array of charge step durations; the number of valid 1689ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn * items in it is returned by {@link #getNumChargeStepDurations()}. 1690ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn * These values are in milliseconds. 1691ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn */ 1692ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn public abstract long[] getChargeStepDurationsArray(); 1693ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn 1694c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn public abstract Map<String, ? extends Timer> getWakeupReasonStats(); 1695a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 1696c64edde69d18498fb2954f71a546357b07ab996aEvan Millar public abstract Map<String, ? extends Timer> getKernelWakelockStats(); 16979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1698e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani /** Returns the number of different speeds that the CPU can run at */ 1699e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani public abstract int getCpuSpeedSteps(); 1700e43530ab571e901f94361078c7c1f970a0bd27f2Amith Yamasani 1701a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public abstract void writeToParcelWithoutUids(Parcel out, int flags); 1702a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 17031d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn private final static void formatTimeRaw(StringBuilder out, long seconds) { 17049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long days = seconds / (60 * 60 * 24); 17059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (days != 0) { 17069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(days); 17079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("d "); 17089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long used = days * 60 * 60 * 24; 17109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long hours = (seconds - used) / (60 * 60); 17129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (hours != 0 || used != 0) { 17139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(hours); 17149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("h "); 17159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project used += hours * 60 * 60; 17179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long mins = (seconds-used) / 60; 17199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mins != 0 || used != 0) { 17209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(mins); 17219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("m "); 17229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project used += mins * 60; 17249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (seconds != 0 || used != 0) { 17269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append(seconds-used); 17279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.append("s "); 17289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 173197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public final static void formatTime(StringBuilder sb, long time) { 17329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long sec = time / 100; 17331d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeRaw(sb, sec); 17349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append((time - (sec * 100)) * 10); 17359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("ms "); 17369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 173897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public final static void formatTimeMs(StringBuilder sb, long time) { 17399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long sec = time / 1000; 17401d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeRaw(sb, sec); 17419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(time - (sec * 1000)); 17429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("ms "); 17439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 174597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public final static void formatTimeMsNoSpace(StringBuilder sb, long time) { 1746d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn long sec = time / 1000; 1747d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn formatTimeRaw(sb, sec); 1748d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(time - (sec * 1000)); 1749d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("ms"); 1750d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn } 1751d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 175297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn public final String formatRatioLocked(long num, long den) { 17539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (den == 0L) { 175457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn return "--%"; 17559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float perc = ((float)num) / ((float)den) * 100; 17579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFormatBuilder.setLength(0); 17589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFormatter.format("%.1f%%", perc); 17599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mFormatBuilder.toString(); 17609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 17619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 176297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final String formatBytesLocked(long bytes) { 176322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatBuilder.setLength(0); 176422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 176522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (bytes < BYTES_PER_KB) { 176622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return bytes + "B"; 176722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else if (bytes < BYTES_PER_MB) { 176822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fKB", bytes / (double) BYTES_PER_KB); 176922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 177022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else if (bytes < BYTES_PER_GB){ 177122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fMB", bytes / (double) BYTES_PER_MB); 177222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 177322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } else { 177422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar mFormatter.format("%.2fGB", bytes / (double) BYTES_PER_GB); 177522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar return mFormatBuilder.toString(); 177622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 177722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 177822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 177997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn private static long computeWakeLock(Timer timer, long elapsedRealtimeUs, int which) { 1780c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn if (timer != null) { 1781c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn // Convert from microseconds to milliseconds with rounding 178297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long totalTimeMicros = timer.getTotalTimeLocked(elapsedRealtimeUs, which); 1783c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn long totalTimeMillis = (totalTimeMicros + 500) / 1000; 1784c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn return totalTimeMillis; 1785c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 1786c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn return 0; 1787c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 1788c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn 17899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 17909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 17919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sb a StringBuilder object. 17929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timer a Timer object contining the wakelock times. 179397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * @param elapsedRealtimeUs the current on-battery time in microseconds. 17949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name of the wakelock. 17952ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 17969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linePrefix a String to be prepended to each line of output. 17979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line prefix 17989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 17999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String printWakeLock(StringBuilder sb, Timer timer, 180097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long elapsedRealtimeUs, String name, int which, String linePrefix) { 18019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 180397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long totalTimeMillis = computeWakeLock(timer, elapsedRealtimeUs, which); 18049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1805c64edde69d18498fb2954f71a546357b07ab996aEvan Millar int count = timer.getCountLocked(which); 18069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (totalTimeMillis != 0) { 18079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(linePrefix); 18081d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalTimeMillis); 18098103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn if (name != null) { 18108103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn sb.append(name); 18118103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn sb.append(' '); 18128103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn } 18139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append('('); 18149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 18159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" times)"); 18169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ", "; 18179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return linePrefix; 18209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checkin version of wakelock printer. Prints simple comma-separated list. 18249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param sb a StringBuilder object. 18269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param timer a Timer object contining the wakelock times. 182797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn * @param elapsedRealtimeUs the current time in microseconds. 18289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param name the name of the wakelock. 18292ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn * @param which which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT. 18309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param linePrefix a String to be prepended to each line of output. 18319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the line prefix 18329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 183397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn private static final String printWakeLockCheckin(StringBuilder sb, Timer timer, 183497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long elapsedRealtimeUs, String name, int which, String linePrefix) { 18359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long totalTimeMicros = 0; 18369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = 0; 18379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (timer != null) { 183897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn totalTimeMicros = timer.getTotalTimeLocked(elapsedRealtimeUs, which); 1839c64edde69d18498fb2954f71a546357b07ab996aEvan Millar count = timer.getCountLocked(which); 18409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(linePrefix); 18429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append((totalTimeMicros + 500) / 1000); // microseconds to milliseconds with rounding 18439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(','); 1844c64edde69d18498fb2954f71a546357b07ab996aEvan Millar sb.append(name != null ? name + "," : ""); 18459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(count); 18469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ","; 18479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dump a comma-separated line of values for terse checkin mode. 18519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw the PageWriter to dump log to 18539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param category category of data (e.g. "total", "last", "unplugged", "current" ) 18549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param type type of data (e.g. "wakelock", "sensor", "process", "apk" , "process", "network") 18559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param args type-dependent data arguments 18569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 18579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final void dumpLine(PrintWriter pw, int uid, String category, String type, 18589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Object... args ) { 18599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); 18609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(uid); pw.print(','); 18619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pw.print(category); pw.print(','); 186213ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn pw.print(type); 18639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Object arg : args) { 186513ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn pw.print(','); 186613ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn pw.print(arg); 18679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 186813ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn pw.println(); 18699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1870d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn 1871d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn /** 1872d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn * Temporary for settings. 1873d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn */ 1874d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn public final void dumpCheckinLocked(Context context, PrintWriter pw, int which, int reqUid) { 1875d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn dumpCheckinLocked(context, pw, which, reqUid, BatteryStatsHelper.checkWifiOnly(context)); 1876d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn } 1877d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn 18789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 18799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checkin server version of dump to produce more compact, computer-readable log. 18809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 18819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE: all times are expressed in 'ms'. 18829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1883d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn public final void dumpCheckinLocked(Context context, PrintWriter pw, int which, int reqUid, 1884d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn boolean wifiOnly) { 18859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawUptime = SystemClock.uptimeMillis() * 1000; 18869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawRealtime = SystemClock.elapsedRealtime() * 1000; 18879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryUptime = getBatteryUptime(rawUptime); 18889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); 18899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); 189097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long whichBatteryScreenOffUptime = computeBatteryScreenOffUptime(rawUptime, which); 189197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long whichBatteryScreenOffRealtime = computeBatteryScreenOffRealtime(rawRealtime, 189297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn which); 18939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalRealtime = computeRealtime(rawRealtime, which); 18949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalUptime = computeUptime(rawUptime, which); 189597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long screenOnTime = getScreenOnTime(rawRealtime, which); 1896e95c3cd89591ba586aa8a0f7a17660c6fb8770bcJeff Brown final long interactiveTime = getInteractiveTime(rawRealtime, which); 1897cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn final long lowPowerModeEnabledTime = getLowPowerModeEnabledTime(rawRealtime, which); 18981e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn final int connChanges = getNumConnectivityChange(which); 189997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long phoneOnTime = getPhoneOnTime(rawRealtime, which); 190097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long wifiOnTime = getWifiOnTime(rawRealtime, which); 190197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long wifiRunningTime = getGlobalWifiRunningTime(rawRealtime, which); 190297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long bluetoothOnTime = getBluetoothOnTime(rawRealtime, which); 1903cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn 19049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(128); 19059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 190622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar SparseArray<? extends Uid> uidStats = getUidStats(); 190722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar final int NU = uidStats.size(); 190822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 19099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String category = STAT_NAMES[which]; 19103e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey 19119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump "battery" stat 19129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, 0 /* uid */, category, BATTERY_DATA, 19136b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn which == STATS_SINCE_CHARGED ? getStartCount() : "N/A", 1914617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn whichBatteryRealtime / 1000, whichBatteryUptime / 1000, 19155f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn totalRealtime / 1000, totalUptime / 1000, 191697ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn getStartClockTime(), 191797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000); 19189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 191957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn // Calculate wakelock times across all uids. 192022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long fullWakeLockTimeTotal = 0; 192122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long partialWakeLockTimeTotal = 0; 192222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 192322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (int iu = 0; iu < NU; iu++) { 192422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid u = uidStats.valueAt(iu); 19257a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 192622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 192722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (wakelocks.size() > 0) { 192822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 192922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar : wakelocks.entrySet()) { 193022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid.Wakelock wl = ent.getValue(); 193122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 193222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); 193322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (fullWakeTimer != null) { 193497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn fullWakeLockTimeTotal += fullWakeTimer.getTotalTimeLocked(rawRealtime, 193597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn which); 193622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 193722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 193822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); 193922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (partialWakeTimer != null) { 1940c64edde69d18498fb2954f71a546357b07ab996aEvan Millar partialWakeLockTimeTotal += partialWakeTimer.getTotalTimeLocked( 194197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, which); 194222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 194322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 194422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 194522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 194622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 194757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileRxTotalBytes = getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which); 194857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileTxTotalBytes = getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which); 194957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiRxTotalBytes = getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which); 195057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiTxTotalBytes = getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which); 195157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileRxTotalPackets = getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which); 195257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileTxTotalPackets = getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which); 195357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiRxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which); 195457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiTxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which); 195557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 195657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn // Dump network stats 195757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn dumpLine(pw, 0 /* uid */, category, GLOBAL_NETWORK_DATA, 195857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn mobileRxTotalBytes, mobileTxTotalBytes, wifiRxTotalBytes, wifiTxTotalBytes, 195957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn mobileRxTotalPackets, mobileTxTotalPackets, wifiRxTotalPackets, wifiTxTotalPackets); 196057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 19619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump misc stats 19629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, 0 /* uid */, category, MISC_DATA, 1963d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood screenOnTime / 1000, phoneOnTime / 1000, wifiOnTime / 1000, 19647a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey wifiRunningTime / 1000, bluetoothOnTime / 1000, 196557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn mobileRxTotalBytes, mobileTxTotalBytes, wifiRxTotalBytes, wifiTxTotalBytes, 1966213bb2fd4da092826e45aae1a50403ab9c634d70Ashish Sharma fullWakeLockTimeTotal / 1000, partialWakeLockTimeTotal / 1000, 1967213bb2fd4da092826e45aae1a50403ab9c634d70Ashish Sharma 0 /*legacy input event count*/, getMobileRadioActiveTime(rawRealtime, which) / 1000, 1968213bb2fd4da092826e45aae1a50403ab9c634d70Ashish Sharma getMobileRadioActiveAdjustedTime(which) / 1000, interactiveTime / 1000, 19691e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn lowPowerModeEnabledTime / 1000, connChanges); 1970617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1971617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn // Dump screen brightness stats 1972617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn Object[] args = new Object[NUM_SCREEN_BRIGHTNESS_BINS]; 1973617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 197497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn args[i] = getScreenBrightnessTime(i, rawRealtime, which) / 1000; 1975617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1976617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SCREEN_BRIGHTNESS_DATA, args); 1977105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 1978627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn // Dump signal strength stats 19795284090631e638b916d9a453212e9dc802656a67Wink Saville args = new Object[SignalStrength.NUM_SIGNAL_STRENGTH_BINS]; 19805284090631e638b916d9a453212e9dc802656a67Wink Saville for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { 198197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn args[i] = getPhoneSignalStrengthTime(i, rawRealtime, which) / 1000; 1982627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1983617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_TIME_DATA, args); 1984f37447bad3773b62176baa837908daf6edb44273Amith Yamasani dumpLine(pw, 0 /* uid */, category, SIGNAL_SCANNING_TIME_DATA, 198597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn getPhoneSignalScanningTime(rawRealtime, which) / 1000); 19865284090631e638b916d9a453212e9dc802656a67Wink Saville for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { 1987617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getPhoneSignalStrengthCount(i, which); 1988617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 1989617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_COUNT_DATA, args); 1990e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn 1991627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn // Dump network type stats 1992627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn args = new Object[NUM_DATA_CONNECTION_TYPES]; 1993627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 199497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn args[i] = getPhoneDataConnectionTime(i, rawRealtime, which) / 1000; 1995627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 1996617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_TIME_DATA, args); 1997617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 1998617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = getPhoneDataConnectionCount(i, which); 1999617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 2000617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_COUNT_DATA, args); 2001ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 2002ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn // Dump wifi state stats 2003ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn args = new Object[NUM_WIFI_STATES]; 2004ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn for (int i=0; i<NUM_WIFI_STATES; i++) { 200597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn args[i] = getWifiStateTime(i, rawRealtime, which) / 1000; 2006ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn } 2007ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn dumpLine(pw, 0 /* uid */, category, WIFI_STATE_TIME_DATA, args); 2008ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn for (int i=0; i<NUM_WIFI_STATES; i++) { 2009ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn args[i] = getWifiStateCount(i, which); 2010ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn } 2011ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn dumpLine(pw, 0 /* uid */, category, WIFI_STATE_COUNT_DATA, args); 2012ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 20133251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn // Dump wifi suppl state stats 20143251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn args = new Object[NUM_WIFI_SUPPL_STATES]; 20153251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn for (int i=0; i<NUM_WIFI_SUPPL_STATES; i++) { 20163251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn args[i] = getWifiSupplStateTime(i, rawRealtime, which) / 1000; 20173251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 20183251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn dumpLine(pw, 0 /* uid */, category, WIFI_SUPPL_STATE_TIME_DATA, args); 20193251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn for (int i=0; i<NUM_WIFI_SUPPL_STATES; i++) { 20203251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn args[i] = getWifiSupplStateCount(i, which); 20213251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 20223251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn dumpLine(pw, 0 /* uid */, category, WIFI_SUPPL_STATE_COUNT_DATA, args); 20233251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 20243251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn // Dump wifi signal strength stats 20253251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn args = new Object[NUM_WIFI_SIGNAL_STRENGTH_BINS]; 20263251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn for (int i=0; i<NUM_WIFI_SIGNAL_STRENGTH_BINS; i++) { 20273251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn args[i] = getWifiSignalStrengthTime(i, rawRealtime, which) / 1000; 20283251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 20293251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn dumpLine(pw, 0 /* uid */, category, WIFI_SIGNAL_STRENGTH_TIME_DATA, args); 20303251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn for (int i=0; i<NUM_WIFI_SIGNAL_STRENGTH_BINS; i++) { 20313251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn args[i] = getWifiSignalStrengthCount(i, which); 20323251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 20333251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn dumpLine(pw, 0 /* uid */, category, WIFI_SIGNAL_STRENGTH_COUNT_DATA, args); 20343251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 2035ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn // Dump bluetooth state stats 2036ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn args = new Object[NUM_BLUETOOTH_STATES]; 2037ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn for (int i=0; i<NUM_BLUETOOTH_STATES; i++) { 203897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn args[i] = getBluetoothStateTime(i, rawRealtime, which) / 1000; 2039ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn } 2040ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn dumpLine(pw, 0 /* uid */, category, BLUETOOTH_STATE_TIME_DATA, args); 2041ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn for (int i=0; i<NUM_BLUETOOTH_STATES; i++) { 2042ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn args[i] = getBluetoothStateCount(i, which); 2043ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn } 2044ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn dumpLine(pw, 0 /* uid */, category, BLUETOOTH_STATE_COUNT_DATA, args); 2045ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 20466b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (which == STATS_SINCE_UNPLUGGED) { 2047e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn dumpLine(pw, 0 /* uid */, category, BATTERY_LEVEL_DATA, getDischargeStartLevel(), 2048633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar getDischargeCurrentLevel()); 2049105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 20509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2051c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn if (which == STATS_SINCE_UNPLUGGED) { 2052c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn dumpLine(pw, 0 /* uid */, category, BATTERY_DISCHARGE_DATA, 2053c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn getDischargeStartLevel()-getDischargeCurrentLevel(), 2054c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn getDischargeStartLevel()-getDischargeCurrentLevel(), 2055c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn getDischargeAmountScreenOn(), getDischargeAmountScreenOff()); 2056c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn } else { 2057c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn dumpLine(pw, 0 /* uid */, category, BATTERY_DISCHARGE_DATA, 2058c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn getLowDischargeAmountSinceCharge(), getHighDischargeAmountSinceCharge(), 2059cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn getDischargeAmountScreenOnSinceCharge(), 2060cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn getDischargeAmountScreenOffSinceCharge()); 2061c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn } 2062c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn 206321f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (reqUid < 0) { 2064a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn Map<String, ? extends Timer> kernelWakelocks = getKernelWakelockStats(); 206521f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (kernelWakelocks.size() > 0) { 2066a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn for (Map.Entry<String, ? extends Timer> ent : kernelWakelocks.entrySet()) { 206721f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.setLength(0); 206897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn printWakeLockCheckin(sb, ent.getValue(), rawRealtime, null, which, ""); 2069a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn dumpLine(pw, 0 /* uid */, category, KERNEL_WAKELOCK_DATA, ent.getKey(), 207021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn sb.toString()); 207121f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 2072c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 2073c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn Map<String, ? extends Timer> wakeupReasons = getWakeupReasonStats(); 2074a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn if (wakeupReasons.size() > 0) { 2075c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn for (Map.Entry<String, ? extends Timer> ent : wakeupReasons.entrySet()) { 2076c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn // Not doing the regular wake lock formatting to remain compatible 2077c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn // with the old checkin format. 2078c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn long totalTimeMicros = ent.getValue().getTotalTimeLocked(rawRealtime, which); 2079c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn int count = ent.getValue().getCountLocked(which); 2080a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn dumpLine(pw, 0 /* uid */, category, WAKEUP_REASON_DATA, 2081c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn "\"" + ent.getKey() + "\"", (totalTimeMicros + 500) / 1000, count); 2082a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 2083a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 2084c64edde69d18498fb2954f71a546357b07ab996aEvan Millar } 2085c64edde69d18498fb2954f71a546357b07ab996aEvan Millar 2086d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn BatteryStatsHelper helper = new BatteryStatsHelper(context, false, wifiOnly); 2087a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn helper.create(this); 2088a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn helper.refreshStats(which, UserHandle.USER_ALL); 2089a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn List<BatterySipper> sippers = helper.getUsageList(); 2090a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn if (sippers != null && sippers.size() > 0) { 2091a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn dumpLine(pw, 0 /* uid */, category, POWER_USE_SUMMARY_DATA, 2092a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn BatteryStatsHelper.makemAh(helper.getPowerProfile().getBatteryCapacity()), 2093099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn BatteryStatsHelper.makemAh(helper.getComputedPower()), 2094a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn BatteryStatsHelper.makemAh(helper.getMinDrainedPower()), 2095a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn BatteryStatsHelper.makemAh(helper.getMaxDrainedPower())); 2096a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn for (int i=0; i<sippers.size(); i++) { 2097a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn BatterySipper bs = sippers.get(i); 2098a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn int uid = 0; 2099a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn String label; 2100a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn switch (bs.drainType) { 2101a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case IDLE: 2102a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label="idle"; 2103a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2104a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case CELL: 2105a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label="cell"; 2106a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2107a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case PHONE: 2108a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label="phone"; 2109a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2110a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case WIFI: 2111a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label="wifi"; 2112a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2113a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case BLUETOOTH: 2114a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label="blue"; 2115a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2116a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case SCREEN: 2117a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label="scrn"; 2118a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2119abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn case FLASHLIGHT: 2120abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn label="flashlight"; 2121abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn break; 2122a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case APP: 2123a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn uid = bs.uidObj.getUid(); 2124a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label = "uid"; 2125a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2126a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case USER: 2127a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn uid = UserHandle.getUid(bs.userId, 0); 2128a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label = "user"; 2129a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2130a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case UNACCOUNTED: 2131a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label = "unacc"; 2132a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2133a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case OVERCOUNTED: 2134a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label = "over"; 2135a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2136a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn default: 2137a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn label = "???"; 2138a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 2139a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn dumpLine(pw, uid, category, POWER_USE_ITEM_DATA, label, 2140a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn BatteryStatsHelper.makemAh(bs.value)); 2141a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 2142a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 2143a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 21449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int iu = 0; iu < NU; iu++) { 21459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int uid = uidStats.keyAt(iu); 214621f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn if (reqUid >= 0 && uid != reqUid) { 214721f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn continue; 214821f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 21499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid u = uidStats.valueAt(iu); 21509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Dump Network stats per uid, if any 215157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileBytesRx = u.getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which); 215257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileBytesTx = u.getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which); 215357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiBytesRx = u.getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which); 215457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiBytesTx = u.getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which); 215557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobilePacketsRx = u.getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which); 215657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobilePacketsTx = u.getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which); 2157d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn long mobileActiveTime = u.getMobileRadioActiveTime(which); 2158d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn int mobileActiveCount = u.getMobileRadioActiveCount(which); 215957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiPacketsRx = u.getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which); 216057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiPacketsTx = u.getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which); 216197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long fullWifiLockOnTime = u.getFullWifiLockTime(rawRealtime, which); 216297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long wifiScanTime = u.getWifiScanTime(rawRealtime, which); 216397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long uidWifiRunningTime = u.getWifiRunningTime(rawRealtime, which); 21647a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 216557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (mobileBytesRx > 0 || mobileBytesTx > 0 || wifiBytesRx > 0 || wifiBytesTx > 0 216657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn || mobilePacketsRx > 0 || mobilePacketsTx > 0 || wifiPacketsRx > 0 2167d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn || wifiPacketsTx > 0 || mobileActiveTime > 0 || mobileActiveCount > 0) { 216857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn dumpLine(pw, uid, category, NETWORK_DATA, mobileBytesRx, mobileBytesTx, 216957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn wifiBytesRx, wifiBytesTx, 217057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn mobilePacketsRx, mobilePacketsTx, 2171d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn wifiPacketsRx, wifiPacketsTx, 2172d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn mobileActiveTime, mobileActiveCount); 21737a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey } 21747a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 21756ccaa540a18a69e5343e3e4d507f341880fcde5aNick Pelly if (fullWifiLockOnTime != 0 || wifiScanTime != 0 217658e0eefeb5e2e270e2b04369bbf29fc22abda8d5Dianne Hackborn || uidWifiRunningTime != 0) { 21776ccaa540a18a69e5343e3e4d507f341880fcde5aNick Pelly dumpLine(pw, uid, category, WIFI_DATA, 21786ccaa540a18a69e5343e3e4d507f341880fcde5aNick Pelly fullWifiLockOnTime, wifiScanTime, uidWifiRunningTime); 2179105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 21809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2181617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (u.hasUserActivity()) { 2182617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args = new Object[Uid.NUM_USER_ACTIVITY_TYPES]; 2183617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean hasData = false; 2184617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<Uid.NUM_USER_ACTIVITY_TYPES; i++) { 2185617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn int val = u.getUserActivityCount(i, which); 2186617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn args[i] = val; 2187617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (val != 0) hasData = true; 2188617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 2189617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (hasData) { 2190cba121541223a5fcaa6afe9cdf472b63865ea173Ashish Sharma dumpLine(pw, uid /* uid */, category, USER_ACTIVITY_DATA, args); 2191617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 2192617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 2193617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 2194fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Map<String, ? extends Uid.Wakelock> wakelocks = u.getWakelockStats(); 21959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakelocks.size() > 0) { 2196fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn for (Map.Entry<String, ? extends Uid.Wakelock> ent : wakelocks.entrySet()) { 21979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Wakelock wl = ent.getValue(); 21989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String linePrefix = ""; 21999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 2200c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), 220197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, "f", which, linePrefix); 2202c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), 220397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, "p", which, linePrefix); 2204c64edde69d18498fb2954f71a546357b07ab996aEvan Millar linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), 220597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, "w", which, linePrefix); 22069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Only log if we had at lease one wakelock... 22089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sb.length() > 0) { 220913ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn String name = ent.getKey(); 221013ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn if (name.indexOf(',') >= 0) { 221113ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn name = name.replace(',', '_'); 221213ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn } 221313ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn dumpLine(pw, uid, category, WAKELOCK_DATA, name, sb.toString()); 22149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 221761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 2218fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Map<String, ? extends Timer> syncs = u.getSyncStats(); 2219fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn if (syncs.size() > 0) { 2220fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn for (Map.Entry<String, ? extends Timer> ent : syncs.entrySet()) { 2221fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Timer timer = ent.getValue(); 2222fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn // Convert from microseconds to milliseconds with rounding 2223fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn long totalTime = (timer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; 2224fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn int count = timer.getCountLocked(which); 2225fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn if (totalTime != 0) { 2226fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn dumpLine(pw, uid, category, SYNC_DATA, ent.getKey(), totalTime, count); 2227fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 2228fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 2229fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 2230fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn 2231fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Map<String, ? extends Timer> jobs = u.getJobStats(); 2232fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn if (jobs.size() > 0) { 2233fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn for (Map.Entry<String, ? extends Timer> ent : jobs.entrySet()) { 2234fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Timer timer = ent.getValue(); 2235fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn // Convert from microseconds to milliseconds with rounding 2236fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn long totalTime = (timer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; 2237fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn int count = timer.getCountLocked(which); 2238fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn if (totalTime != 0) { 2239fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn dumpLine(pw, uid, category, JOB_DATA, ent.getKey(), totalTime, count); 2240fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 2241fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 2242fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 2243fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn 224461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn SparseArray<? extends BatteryStats.Uid.Sensor> sensors = u.getSensorStats(); 224561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn int NSE = sensors.size(); 224661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn for (int ise=0; ise<NSE; ise++) { 224761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn Uid.Sensor se = sensors.valueAt(ise); 224861659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn int sensorNumber = sensors.keyAt(ise); 224961659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn Timer timer = se.getSensorTime(); 225061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn if (timer != null) { 225161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn // Convert from microseconds to milliseconds with rounding 225261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn long totalTime = (timer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; 225361659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn int count = timer.getCountLocked(which); 225461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn if (totalTime != 0) { 225561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn dumpLine(pw, uid, category, SENSOR_DATA, sensorNumber, totalTime, count); 225661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn } 22579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 22599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2260a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn Timer vibTimer = u.getVibratorOnTimer(); 2261a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn if (vibTimer != null) { 2262a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn // Convert from microseconds to milliseconds with rounding 226397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long totalTime = (vibTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; 2264a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn int count = vibTimer.getCountLocked(which); 2265a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn if (totalTime != 0) { 2266a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn dumpLine(pw, uid, category, VIBRATOR_DATA, totalTime, count); 2267a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 2268a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 2269a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 22703e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey Timer fgTimer = u.getForegroundActivityTimer(); 22713e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey if (fgTimer != null) { 22723e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey // Convert from microseconds to milliseconds with rounding 227397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long totalTime = (fgTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; 22743e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey int count = fgTimer.getCountLocked(which); 22753e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey if (totalTime != 0) { 22763e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey dumpLine(pw, uid, category, FOREGROUND_DATA, totalTime, count); 22773e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey } 22783e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey } 22793e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey 228061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn Object[] stateTimes = new Object[Uid.NUM_PROCESS_STATE]; 228161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn long totalStateTime = 0; 228261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn for (int ips=0; ips<Uid.NUM_PROCESS_STATE; ips++) { 228361659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn totalStateTime += u.getProcessStateTime(ips, rawRealtime, which); 228461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn stateTimes[ips] = (totalStateTime + 500) / 1000; 228561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn } 228661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn if (totalStateTime > 0) { 228761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn dumpLine(pw, uid, category, STATE_TIME_DATA, stateTimes); 228861659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn } 228961659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 22909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats(); 22919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (processStats.size() > 0) { 22929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent 22939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : processStats.entrySet()) { 22949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Proc ps = ent.getValue(); 22953e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey 22963e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey final long userMillis = ps.getUserTime(which) * 10; 22973e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey final long systemMillis = ps.getSystemTime(which) * 10; 22983e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey final long foregroundMillis = ps.getForegroundTime(which) * 10; 22991e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn final int starts = ps.getStarts(which); 23001e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn final int numCrashes = ps.getNumCrashes(which); 23011e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn final int numAnrs = ps.getNumAnrs(which); 23023e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey 23033e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey if (userMillis != 0 || systemMillis != 0 || foregroundMillis != 0 23041e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn || starts != 0 || numAnrs != 0 || numCrashes != 0) { 23053e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey dumpLine(pw, uid, category, PROCESS_DATA, ent.getKey(), userMillis, 23061e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn systemMillis, foregroundMillis, starts, numAnrs, numCrashes); 23079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Pkg> packageStats = u.getPackageStats(); 23129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (packageStats.size() > 0) { 23139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent 23149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : packageStats.entrySet()) { 23159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Pkg ps = ent.getValue(); 23179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int wakeups = ps.getWakeups(which); 23189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats(); 23199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent 23209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : serviceStats.entrySet()) { 23219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStats.Uid.Pkg.Serv ss = sent.getValue(); 23229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = ss.getStartTime(batteryUptime, which); 23239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ss.getStarts(which); 23249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int launches = ss.getLaunches(which); 23259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startTime != 0 || starts != 0 || launches != 0) { 23269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dumpLine(pw, uid, category, APK_DATA, 23279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project wakeups, // wakeup alarms 23289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ent.getKey(), // Apk 23299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sent.getKey(), // service 23309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startTime / 1000, // time spent started, in ms 23319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts, 23329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project launches); 23339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23408103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn static final class TimerEntry { 23418103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn final String mName; 23428103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn final int mId; 23438103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn final BatteryStats.Timer mTimer; 23448103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn final long mTime; 23458103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn TimerEntry(String name, int id, BatteryStats.Timer timer, long time) { 23468103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn mName = name; 23478103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn mId = id; 23488103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn mTimer = timer; 23498103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn mTime = time; 23508103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn } 23518103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn } 23528103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn 2353a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn private void printmAh(PrintWriter printer, double power) { 2354a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn printer.print(BatteryStatsHelper.makemAh(power)); 2355a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 2356a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 2357d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn /** 2358d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn * Temporary for settings. 2359d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn */ 2360d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn public final void dumpLocked(Context context, PrintWriter pw, String prefix, int which, 2361d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn int reqUid) { 2362d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn dumpLocked(context, pw, prefix, which, reqUid, BatteryStatsHelper.checkWifiOnly(context)); 2363d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn } 2364d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn 23659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 2366a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public final void dumpLocked(Context context, PrintWriter pw, String prefix, final int which, 2367d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn int reqUid, boolean wifiOnly) { 23689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawUptime = SystemClock.uptimeMillis() * 1000; 23699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long rawRealtime = SystemClock.elapsedRealtime() * 1000; 23709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long batteryUptime = getBatteryUptime(rawUptime); 23719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryUptime = computeBatteryUptime(rawUptime, which); 23739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which); 23749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalRealtime = computeRealtime(rawRealtime, which); 23759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final long totalUptime = computeUptime(rawUptime, which); 237697ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long whichBatteryScreenOffUptime = computeBatteryScreenOffUptime(rawUptime, which); 237797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long whichBatteryScreenOffRealtime = computeBatteryScreenOffRealtime(rawRealtime, 237897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn which); 23792ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn final long batteryTimeRemaining = computeBatteryTimeRemaining(rawRealtime); 23802ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn final long chargeTimeRemaining = computeChargeTimeRemaining(rawRealtime); 238197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn 23829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuilder sb = new StringBuilder(128); 238322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 238422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar SparseArray<? extends Uid> uidStats = getUidStats(); 238522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar final int NU = uidStats.size(); 23869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23871d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 23881d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 23891d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Time on battery: "); 23901d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, whichBatteryRealtime / 1000); sb.append("("); 23911d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(formatRatioLocked(whichBatteryRealtime, totalRealtime)); 23921d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(") realtime, "); 23931d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, whichBatteryUptime / 1000); 23941d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(whichBatteryUptime, totalRealtime)); 23951d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(") uptime"); 23961d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 23971d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 23981d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 239997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn sb.append(" Time on battery screen off: "); 240097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn formatTimeMs(sb, whichBatteryScreenOffRealtime / 1000); sb.append("("); 240197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, totalRealtime)); 240297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn sb.append(") realtime, "); 240397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn formatTimeMs(sb, whichBatteryScreenOffUptime / 1000); 240497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn sb.append("("); 240597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn sb.append(formatRatioLocked(whichBatteryScreenOffUptime, totalRealtime)); 240697ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn sb.append(") uptime"); 240797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn pw.println(sb.toString()); 240897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn sb.setLength(0); 240997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn sb.append(prefix); 24101d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Total run time: "); 24111d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalRealtime / 1000); 24121d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("realtime, "); 24131d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, totalUptime / 1000); 241477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append("uptime"); 2415e95c3cd89591ba586aa8a0f7a17660c6fb8770bcJeff Brown pw.println(sb.toString()); 24162ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn if (batteryTimeRemaining >= 0) { 24172ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn sb.setLength(0); 24182ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn sb.append(prefix); 24192ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn sb.append(" Battery time remaining: "); 24202ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn formatTimeMs(sb, batteryTimeRemaining / 1000); 24212ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn pw.println(sb.toString()); 24222ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn } 24232ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn if (chargeTimeRemaining >= 0) { 24242ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn sb.setLength(0); 24252ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn sb.append(prefix); 24262ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn sb.append(" Charge time remaining: "); 24272ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn formatTimeMs(sb, chargeTimeRemaining / 1000); 24282ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn pw.println(sb.toString()); 24292ffa11e4b71c545e34533ef827bdc1a07fbe8246Dianne Hackborn } 24305f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn pw.print(" Start clock time: "); 24315f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn pw.println(DateFormat.format("yyyy-MM-dd-HH-mm-ss", getStartClockTime()).toString()); 24325f4a5f9536eb171bf21a9293198d90c9891e7205Dianne Hackborn 243397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long screenOnTime = getScreenOnTime(rawRealtime, which); 2434e95c3cd89591ba586aa8a0f7a17660c6fb8770bcJeff Brown final long interactiveTime = getInteractiveTime(rawRealtime, which); 2435cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn final long lowPowerModeEnabledTime = getLowPowerModeEnabledTime(rawRealtime, which); 243697ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long phoneOnTime = getPhoneOnTime(rawRealtime, which); 243797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long wifiRunningTime = getGlobalWifiRunningTime(rawRealtime, which); 243897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long wifiOnTime = getWifiOnTime(rawRealtime, which); 243997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long bluetoothOnTime = getBluetoothOnTime(rawRealtime, which); 2440617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.setLength(0); 24411d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 24421d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Screen on: "); formatTimeMs(sb, screenOnTime / 1000); 24431d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(screenOnTime, whichBatteryRealtime)); 244477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(") "); sb.append(getScreenOnCount(which)); 2445cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append("x, Interactive: "); formatTimeMs(sb, interactiveTime / 1000); 2446cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(interactiveTime, whichBatteryRealtime)); 2447e95c3cd89591ba586aa8a0f7a17660c6fb8770bcJeff Brown sb.append(")"); 24481d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 24491d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 24501d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 245177b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(" Screen brightnesses:"); 2452617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean didOne = false; 2453617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { 245497ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long time = getScreenBrightnessTime(i, rawRealtime, which); 2455617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (time == 0) { 2456617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn continue; 2457617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 245877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append("\n "); 245977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(prefix); 2460617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn didOne = true; 2461617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(SCREEN_BRIGHTNESS_NAMES[i]); 2462617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" "); 24631d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 2464617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("("); 2465617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(formatRatioLocked(time, screenOnTime)); 2466617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(")"); 2467617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 246877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn if (!didOne) sb.append(" (no activity)"); 2469617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(sb.toString()); 2470cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn if (lowPowerModeEnabledTime != 0) { 2471cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.setLength(0); 2472cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append(prefix); 2473cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append(" Low power mode enabled: "); 2474cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn formatTimeMs(sb, lowPowerModeEnabledTime / 1000); 2475cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append("("); 2476cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append(formatRatioLocked(lowPowerModeEnabledTime, whichBatteryRealtime)); 2477cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append(")"); 2478cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn pw.println(sb.toString()); 2479cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn } 2480cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn if (phoneOnTime != 0) { 2481cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.setLength(0); 2482cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append(prefix); 2483cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append(" Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000); 2484cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime)); 2485cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn sb.append(") "); sb.append(getPhoneOnCount(which)); 2486cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn } 24871e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn int connChanges = getNumConnectivityChange(which); 24881e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn if (connChanges != 0) { 24891e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn pw.print(prefix); 24901e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn pw.print(" Connectivity changes: "); pw.println(connChanges); 24911e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn } 2492cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn 249357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn // Calculate wakelock times across all uids. 249422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long fullWakeLockTimeTotalMicros = 0; 249522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar long partialWakeLockTimeTotalMicros = 0; 24968103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn 24978103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn final ArrayList<TimerEntry> timers = new ArrayList<TimerEntry>(); 24988103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn 249922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (int iu = 0; iu < NU; iu++) { 250022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid u = uidStats.valueAt(iu); 25017a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 250222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 250322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (wakelocks.size() > 0) { 250422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> ent 250522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar : wakelocks.entrySet()) { 250622ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Uid.Wakelock wl = ent.getValue(); 250722ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 250822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL); 250922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (fullWakeTimer != null) { 2510c64edde69d18498fb2954f71a546357b07ab996aEvan Millar fullWakeLockTimeTotalMicros += fullWakeTimer.getTotalTimeLocked( 251197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, which); 251222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 251322ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 251422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL); 251522ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar if (partialWakeTimer != null) { 25168103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn long totalTimeMicros = partialWakeTimer.getTotalTimeLocked( 251797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, which); 25188103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn if (totalTimeMicros > 0) { 25198103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn if (reqUid < 0) { 25208103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn // Only show the ordered list of all wake 25218103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn // locks if the caller is not asking for data 25228103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn // about a specific uid. 25238103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn timers.add(new TimerEntry(ent.getKey(), u.getUid(), 25248103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn partialWakeTimer, totalTimeMicros)); 25258103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn } 25268103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn partialWakeLockTimeTotalMicros += totalTimeMicros; 25278103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn } 252822ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 252922ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 253022ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 253122ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar } 253222ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 253357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileRxTotalBytes = getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which); 253457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileTxTotalBytes = getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which); 253557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiRxTotalBytes = getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which); 253657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiTxTotalBytes = getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which); 253757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileRxTotalPackets = getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which); 253857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileTxTotalPackets = getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which); 253957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiRxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which); 254057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiTxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which); 254157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn 254277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn if (fullWakeLockTimeTotalMicros != 0) { 254377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.setLength(0); 254477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(prefix); 254577b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(" Total full wakelock time: "); formatTimeMsNoSpace(sb, 254677b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn (fullWakeLockTimeTotalMicros + 500) / 1000); 254777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn pw.println(sb.toString()); 254877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn } 254977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn 255077b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn if (partialWakeLockTimeTotalMicros != 0) { 255177b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.setLength(0); 255277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(prefix); 255377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(" Total partial wakelock time: "); formatTimeMsNoSpace(sb, 255477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn (partialWakeLockTimeTotalMicros + 500) / 1000); 255577b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn pw.println(sb.toString()); 255677b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn } 255777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn 25581d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); 255957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(" Mobile total received: "); pw.print(formatBytesLocked(mobileRxTotalBytes)); 256057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(", sent: "); pw.print(formatBytesLocked(mobileTxTotalBytes)); 256157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(" (packets received "); pw.print(mobileRxTotalPackets); 256257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(", sent "); pw.print(mobileTxTotalPackets); pw.println(")"); 2563627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.setLength(0); 25641d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 25653251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(" Phone signal levels:"); 2566617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn didOne = false; 25675284090631e638b916d9a453212e9dc802656a67Wink Saville for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { 256897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long time = getPhoneSignalStrengthTime(i, rawRealtime, which); 2569627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (time == 0) { 2570627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn continue; 2571627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 257271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn sb.append("\n "); 257377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(prefix); 2574627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = true; 25755284090631e638b916d9a453212e9dc802656a67Wink Saville sb.append(SignalStrength.SIGNAL_STRENGTH_NAMES[i]); 2576627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(" "); 25771d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 2578627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append("("); 2579627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 2580617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(") "); 2581617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(getPhoneSignalStrengthCount(i, which)); 2582617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("x"); 2583627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 258471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (!didOne) sb.append(" (no activity)"); 2585627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn pw.println(sb.toString()); 2586f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 2587f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.setLength(0); 2588f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.append(prefix); 2589f37447bad3773b62176baa837908daf6edb44273Amith Yamasani sb.append(" Signal scanning time: "); 259097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn formatTimeMsNoSpace(sb, getPhoneSignalScanningTime(rawRealtime, which) / 1000); 2591f37447bad3773b62176baa837908daf6edb44273Amith Yamasani pw.println(sb.toString()); 2592f37447bad3773b62176baa837908daf6edb44273Amith Yamasani 2593627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.setLength(0); 25941d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 259571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn sb.append(" Radio types:"); 2596627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = false; 2597627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { 259897ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long time = getPhoneDataConnectionTime(i, rawRealtime, which); 2599627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn if (time == 0) { 2600627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn continue; 2601627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 260271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn sb.append("\n "); 260377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(prefix); 2604627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn didOne = true; 2605627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(DATA_CONNECTION_NAMES[i]); 2606627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(" "); 26071d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, time/1000); 2608627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append("("); 2609627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 2610617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(") "); 2611617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(getPhoneDataConnectionCount(i, which)); 2612617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append("x"); 2613627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 261471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (!didOne) sb.append(" (no activity)"); 2615627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn pw.println(sb.toString()); 26163f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 26173f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.setLength(0); 26183f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani sb.append(prefix); 2619e13c4c0b664dabdc069ca8f9601d96a337eb02f9Dianne Hackborn sb.append(" Mobile radio active time: "); 262097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long mobileActiveTime = getMobileRadioActiveTime(rawRealtime, which); 2621d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn formatTimeMs(sb, mobileActiveTime / 1000); 2622d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(mobileActiveTime, whichBatteryRealtime)); 2623d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(") "); sb.append(getMobileRadioActiveCount(which)); 2624d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("x"); 26253f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani pw.println(sb.toString()); 26263f7e35c2c7d3d7f08f50c1d93cd16b1f49354cccAmith Yamasani 2627d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn final long mobileActiveUnknownTime = getMobileRadioActiveUnknownTime(which); 2628d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn if (mobileActiveUnknownTime != 0) { 2629d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.setLength(0); 2630d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(prefix); 2631d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(" Mobile radio active unknown time: "); 2632d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn formatTimeMs(sb, mobileActiveUnknownTime / 1000); 2633d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("("); 2634d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(formatRatioLocked(mobileActiveUnknownTime, whichBatteryRealtime)); 2635d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(") "); sb.append(getMobileRadioActiveUnknownCount(which)); 2636d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("x"); 2637d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn pw.println(sb.toString()); 2638d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn } 2639d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 2640a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn final long mobileActiveAdjustedTime = getMobileRadioActiveAdjustedTime(which); 2641a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn if (mobileActiveAdjustedTime != 0) { 2642a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.setLength(0); 2643a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(prefix); 2644a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(" Mobile radio active adjusted time: "); 2645a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn formatTimeMs(sb, mobileActiveAdjustedTime / 1000); 2646a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append("("); 2647a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(formatRatioLocked(mobileActiveAdjustedTime, whichBatteryRealtime)); 2648a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(")"); 2649a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.println(sb.toString()); 2650a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 2651a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 265277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn pw.print(prefix); 265377b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn pw.print(" Wi-Fi total received: "); pw.print(formatBytesLocked(wifiRxTotalBytes)); 265477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn pw.print(", sent: "); pw.print(formatBytesLocked(wifiTxTotalBytes)); 265577b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn pw.print(" (packets received "); pw.print(wifiRxTotalPackets); 265677b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn pw.print(", sent "); pw.print(wifiTxTotalPackets); pw.println(")"); 26571d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 26581d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); 26591d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(" Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000); 26601d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiOnTime, whichBatteryRealtime)); 26611d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("), Wifi running: "); formatTimeMs(sb, wifiRunningTime / 1000); 26621d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiRunningTime, whichBatteryRealtime)); 2663ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(")"); 2664ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn pw.println(sb.toString()); 2665ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 2666ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.setLength(0); 2667ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(prefix); 2668ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(" Wifi states:"); 2669ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn didOne = false; 2670ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn for (int i=0; i<NUM_WIFI_STATES; i++) { 267197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long time = getWifiStateTime(i, rawRealtime, which); 2672ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn if (time == 0) { 2673ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn continue; 2674ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn } 2675ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append("\n "); 2676ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn didOne = true; 2677ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(WIFI_STATE_NAMES[i]); 2678ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(" "); 2679ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn formatTimeMs(sb, time/1000); 2680ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append("("); 2681ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 2682ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(") "); 26833251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(getWifiStateCount(i, which)); 26843251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append("x"); 26853251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 26863251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn if (!didOne) sb.append(" (no activity)"); 26873251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn pw.println(sb.toString()); 26883251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 26893251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.setLength(0); 26903251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(prefix); 26913251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(" Wifi supplicant states:"); 26923251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn didOne = false; 26933251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn for (int i=0; i<NUM_WIFI_SUPPL_STATES; i++) { 26943251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn final long time = getWifiSupplStateTime(i, rawRealtime, which); 26953251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn if (time == 0) { 26963251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn continue; 26973251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 26983251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append("\n "); 26993251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn didOne = true; 27003251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(WIFI_SUPPL_STATE_NAMES[i]); 27013251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(" "); 27023251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn formatTimeMs(sb, time/1000); 27033251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append("("); 27043251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 27053251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(") "); 27063251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(getWifiSupplStateCount(i, which)); 27073251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append("x"); 27083251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 27093251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn if (!didOne) sb.append(" (no activity)"); 27103251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn pw.println(sb.toString()); 27113251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 27123251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.setLength(0); 27133251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(prefix); 27143251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(" Wifi signal levels:"); 27153251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn didOne = false; 27163251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn for (int i=0; i<NUM_WIFI_SIGNAL_STRENGTH_BINS; i++) { 27173251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn final long time = getWifiSignalStrengthTime(i, rawRealtime, which); 27183251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn if (time == 0) { 27193251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn continue; 27203251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 27213251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append("\n "); 27223251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(prefix); 27233251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn didOne = true; 27243251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append("level("); 27253251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(i); 27263251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(") "); 27273251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn formatTimeMs(sb, time/1000); 27283251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append("("); 27293251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 27303251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(") "); 27313251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn sb.append(getWifiSignalStrengthCount(i, which)); 2732ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append("x"); 2733ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn } 2734ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn if (!didOne) sb.append(" (no activity)"); 2735ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn pw.println(sb.toString()); 2736ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 2737ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.setLength(0); 2738ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(prefix); 2739ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(" Bluetooth on: "); formatTimeMs(sb, bluetoothOnTime / 1000); 27401d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(bluetoothOnTime, whichBatteryRealtime)); 27411d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(")"); 27421d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 2743ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 2744ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.setLength(0); 2745ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(prefix); 2746ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(" Bluetooth states:"); 2747ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn didOne = false; 2748ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn for (int i=0; i<NUM_BLUETOOTH_STATES; i++) { 274997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn final long time = getBluetoothStateTime(i, rawRealtime, which); 2750ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn if (time == 0) { 2751ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn continue; 2752ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn } 2753ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append("\n "); 2754ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn didOne = true; 2755ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(BLUETOOTH_STATE_NAMES[i]); 2756ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(" "); 2757ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn formatTimeMs(sb, time/1000); 2758ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append("("); 2759ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(formatRatioLocked(time, whichBatteryRealtime)); 2760ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(") "); 2761ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append(getPhoneDataConnectionCount(i, which)); 2762ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn sb.append("x"); 2763ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn } 2764ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn if (!didOne) sb.append(" (no activity)"); 2765ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn pw.println(sb.toString()); 2766ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn 2767ca1bf21c511dc7d513b631a1af8498b5b08d107aDianne Hackborn pw.println(); 2768105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 27696b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (which == STATS_SINCE_UNPLUGGED) { 2770105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project if (getIsOnBattery()) { 27711d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" Device is currently unplugged"); 27721d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Discharge cycle start level: "); 27731d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeStartLevel()); 27741d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Discharge cycle current level: "); 27751d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeCurrentLevel()); 277699d0452ddc0a0435030a462bda9f4d57b58bad9aDianne Hackborn } else { 27771d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" Device is currently plugged into power"); 27781d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Last discharge cycle start level: "); 27791d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeStartLevel()); 27801d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Last discharge cycle end level: "); 27811d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(getDischargeCurrentLevel()); 2782105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 2783c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn pw.print(prefix); pw.print(" Amount discharged while screen on: "); 2784c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn pw.println(getDischargeAmountScreenOn()); 2785c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn pw.print(prefix); pw.print(" Amount discharged while screen off: "); 2786c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn pw.println(getDischargeAmountScreenOff()); 2787617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(" "); 27889adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn } else { 27899adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn pw.print(prefix); pw.println(" Device battery use since last full charge"); 27909adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn pw.print(prefix); pw.print(" Amount discharged (lower bound): "); 27919adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn pw.println(getLowDischargeAmountSinceCharge()); 27929adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn pw.print(prefix); pw.print(" Amount discharged (upper bound): "); 27939adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn pw.println(getHighDischargeAmountSinceCharge()); 2794c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn pw.print(prefix); pw.print(" Amount discharged while screen on: "); 2795c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn pw.println(getDischargeAmountScreenOnSinceCharge()); 2796c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn pw.print(prefix); pw.print(" Amount discharged while screen off: "); 2797c1b40e361c6cd3bdc53499f17ac09f45e6873059Dianne Hackborn pw.println(getDischargeAmountScreenOffSinceCharge()); 27988103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn pw.println(); 27998103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn } 28008103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn 2801d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn BatteryStatsHelper helper = new BatteryStatsHelper(context, false, wifiOnly); 2802a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn helper.create(this); 2803a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn helper.refreshStats(which, UserHandle.USER_ALL); 2804a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn List<BatterySipper> sippers = helper.getUsageList(); 2805a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn if (sippers != null && sippers.size() > 0) { 2806a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.println(" Estimated power use (mAh):"); 2807a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Capacity: "); 2808a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn printmAh(pw, helper.getPowerProfile().getBatteryCapacity()); 2809099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn pw.print(", Computed drain: "); printmAh(pw, helper.getComputedPower()); 2810536456f2d4c0d93bb55950ce5edc24e9bb9547ebDianne Hackborn pw.print(", actual drain: "); printmAh(pw, helper.getMinDrainedPower()); 2811536456f2d4c0d93bb55950ce5edc24e9bb9547ebDianne Hackborn if (helper.getMinDrainedPower() != helper.getMaxDrainedPower()) { 2812536456f2d4c0d93bb55950ce5edc24e9bb9547ebDianne Hackborn pw.print("-"); printmAh(pw, helper.getMaxDrainedPower()); 2813536456f2d4c0d93bb55950ce5edc24e9bb9547ebDianne Hackborn } 2814a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2815a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn for (int i=0; i<sippers.size(); i++) { 2816a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn BatterySipper bs = sippers.get(i); 2817a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn switch (bs.drainType) { 2818a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case IDLE: 2819a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Idle: "); printmAh(pw, bs.value); 2820a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2821a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2822a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case CELL: 2823a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Cell standby: "); printmAh(pw, bs.value); 2824a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2825a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2826a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case PHONE: 2827a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Phone calls: "); printmAh(pw, bs.value); 2828a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2829a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2830a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case WIFI: 2831a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Wifi: "); printmAh(pw, bs.value); 2832a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2833a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2834a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case BLUETOOTH: 2835a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Bluetooth: "); printmAh(pw, bs.value); 2836a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2837a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2838a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case SCREEN: 2839a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Screen: "); printmAh(pw, bs.value); 2840a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2841a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2842abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn case FLASHLIGHT: 2843abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn pw.print(prefix); pw.print(" Flashlight: "); printmAh(pw, bs.value); 2844abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn pw.println(); 2845abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn break; 2846a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case APP: 2847d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn pw.print(prefix); pw.print(" Uid "); 2848d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn UserHandle.formatUid(pw, bs.uidObj.getUid()); 2849a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(": "); printmAh(pw, bs.value); pw.println(); 2850a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2851a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case USER: 2852a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" User "); pw.print(bs.userId); 2853a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(": "); printmAh(pw, bs.value); pw.println(); 2854a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2855a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case UNACCOUNTED: 2856a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Unaccounted: "); printmAh(pw, bs.value); 2857a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2858a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2859a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn case OVERCOUNTED: 2860a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.print(prefix); pw.print(" Over-counted: "); printmAh(pw, bs.value); 2861a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn pw.println(); 2862a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn break; 2863a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 2864a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 2865c46809e9979204aa9a131d8933da23d298411441Dianne Hackborn pw.println(); 2866a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 2867a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 2868d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sippers = helper.getMobilemsppList(); 2869d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn if (sippers != null && sippers.size() > 0) { 2870d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn pw.print(prefix); pw.println(" Per-app mobile ms per packet:"); 287177b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn long totalTime = 0; 2872d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn for (int i=0; i<sippers.size(); i++) { 2873d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn BatterySipper bs = sippers.get(i); 2874d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.setLength(0); 2875d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(prefix); sb.append(" Uid "); 2876d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn UserHandle.formatUid(sb, bs.uidObj.getUid()); 2877d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(": "); sb.append(BatteryStatsHelper.makemAh(bs.mobilemspp)); 2878d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(" ("); sb.append(bs.mobileRxPackets+bs.mobileTxPackets); 2879d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(" packets over "); formatTimeMsNoSpace(sb, bs.mobileActive); 288077b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(") "); sb.append(bs.mobileActiveCount); sb.append("x"); 2881d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn pw.println(sb.toString()); 288277b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn totalTime += bs.mobileActive; 2883d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn } 288477b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.setLength(0); 288577b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(prefix); 288677b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(" TOTAL TIME: "); 288777b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn formatTimeMs(sb, totalTime); 288877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append("("); sb.append(formatRatioLocked(totalTime, whichBatteryRealtime)); 288977b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn sb.append(")"); 289077b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn pw.println(sb.toString()); 2891d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn pw.println(); 2892d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn } 2893d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 2894c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn final Comparator<TimerEntry> timerComparator = new Comparator<TimerEntry>() { 2895c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn @Override 2896c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public int compare(TimerEntry lhs, TimerEntry rhs) { 2897c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn long lhsTime = lhs.mTime; 2898c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn long rhsTime = rhs.mTime; 2899c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (lhsTime < rhsTime) { 2900c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn return 1; 2901c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2902c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (lhsTime > rhsTime) { 2903c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn return -1; 2904c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2905c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn return 0; 2906c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2907c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn }; 2908c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn 2909c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (reqUid < 0) { 2910c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats(); 2911c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (kernelWakelocks.size() > 0) { 2912c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn final ArrayList<TimerEntry> ktimers = new ArrayList<TimerEntry>(); 2913c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) { 2914c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn BatteryStats.Timer timer = ent.getValue(); 2915c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn long totalTimeMillis = computeWakeLock(timer, rawRealtime, which); 2916c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (totalTimeMillis > 0) { 2917c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn ktimers.add(new TimerEntry(ent.getKey(), 0, timer, totalTimeMillis)); 2918c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2919c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2920c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (ktimers.size() > 0) { 2921c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn Collections.sort(ktimers, timerComparator); 2922c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(prefix); pw.println(" All kernel wake locks:"); 2923c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn for (int i=0; i<ktimers.size(); i++) { 2924c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn TimerEntry timer = ktimers.get(i); 2925c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn String linePrefix = ": "; 2926c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn sb.setLength(0); 2927c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn sb.append(prefix); 2928c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn sb.append(" Kernel Wake lock "); 2929c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn sb.append(timer.mName); 2930c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn linePrefix = printWakeLock(sb, timer.mTimer, rawRealtime, null, 2931c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn which, linePrefix); 2932c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (!linePrefix.equals(": ")) { 2933c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn sb.append(" realtime"); 2934c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn // Only print out wake locks that were held 2935c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println(sb.toString()); 2936c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2937c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2938c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println(); 2939c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2940c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 2941c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn 2942a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn if (timers.size() > 0) { 2943a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn Collections.sort(timers, timerComparator); 2944a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.print(prefix); pw.println(" All partial wake locks:"); 2945a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn for (int i=0; i<timers.size(); i++) { 2946a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn TimerEntry timer = timers.get(i); 2947a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.setLength(0); 2948a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(" Wake lock "); 2949a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn UserHandle.formatUid(sb, timer.mId); 2950a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(" "); 2951a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(timer.mName); 2952a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn printWakeLock(sb, timer.mTimer, rawRealtime, null, which, ": "); 2953a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(" realtime"); 2954a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.println(sb.toString()); 2955a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 2956a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn timers.clear(); 2957a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.println(); 2958a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 2959a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn 2960c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn Map<String, ? extends Timer> wakeupReasons = getWakeupReasonStats(); 2961a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn if (wakeupReasons.size() > 0) { 2962a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.print(prefix); pw.println(" All wakeup reasons:"); 2963a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn final ArrayList<TimerEntry> reasons = new ArrayList<TimerEntry>(); 2964c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn for (Map.Entry<String, ? extends Timer> ent : wakeupReasons.entrySet()) { 2965c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn Timer timer = ent.getValue(); 2966c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn reasons.add(new TimerEntry(ent.getKey(), 0, timer, 2967c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn timer.getCountLocked(which))); 2968a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 2969a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn Collections.sort(reasons, timerComparator); 2970a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn for (int i=0; i<reasons.size(); i++) { 2971a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn TimerEntry timer = reasons.get(i); 2972a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn String linePrefix = ": "; 2973a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.setLength(0); 2974a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(prefix); 2975a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(" Wakeup reason "); 2976a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn sb.append(timer.mName); 2977c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn printWakeLock(sb, timer.mTimer, rawRealtime, null, which, ": "); 2978c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn sb.append(" realtime"); 2979a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.println(sb.toString()); 2980a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 2981a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.println(); 29828103890a59de6ed4abaedaad80e66666ea59f9b5Dianne Hackborn } 2983105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 298422ac043ec139714644256cc5e2a9ff8d126ade00Evan Millar 29859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int iu=0; iu<NU; iu++) { 29869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int uid = uidStats.keyAt(iu); 2987e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn if (reqUid >= 0 && uid != reqUid && uid != Process.SYSTEM_UID) { 298821f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn continue; 298921f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn } 299021f1bd17b2dfe361acbb28453b3f3b1a110932faDianne Hackborn 29919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid u = uidStats.valueAt(iu); 2992a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn 2993a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn pw.print(prefix); 2994a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn pw.print(" "); 2995a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn UserHandle.formatUid(pw, uid); 2996a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn pw.println(":"); 29979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean uidActivity = false; 2998d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 299957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileRxBytes = u.getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which); 300057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileTxBytes = u.getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which); 300157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiRxBytes = u.getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which); 300257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiTxBytes = u.getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which); 300357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileRxPackets = u.getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which); 300457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long mobileTxPackets = u.getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which); 3005d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn long uidMobileActiveTime = u.getMobileRadioActiveTime(which); 3006d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn int uidMobileActiveCount = u.getMobileRadioActiveCount(which); 300757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiRxPackets = u.getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which); 300857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long wifiTxPackets = u.getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which); 300997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long fullWifiLockOnTime = u.getFullWifiLockTime(rawRealtime, which); 301097ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long wifiScanTime = u.getWifiScanTime(rawRealtime, which); 301197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long uidWifiRunningTime = u.getWifiRunningTime(rawRealtime, which); 30127a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 301357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (mobileRxBytes > 0 || mobileTxBytes > 0 301457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn || mobileRxPackets > 0 || mobileTxPackets > 0) { 30157a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey pw.print(prefix); pw.print(" Mobile network: "); 30167a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey pw.print(formatBytesLocked(mobileRxBytes)); pw.print(" received, "); 301757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(formatBytesLocked(mobileTxBytes)); 301857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(" sent (packets "); pw.print(mobileRxPackets); 301957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(" received, "); pw.print(mobileTxPackets); pw.println(" sent)"); 30209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3021d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn if (uidMobileActiveTime > 0 || uidMobileActiveCount > 0) { 3022d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.setLength(0); 3023d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(prefix); sb.append(" Mobile radio active: "); 3024d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn formatTimeMs(sb, uidMobileActiveTime / 1000); 3025d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("("); 3026d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(formatRatioLocked(uidMobileActiveTime, mobileActiveTime)); 3027d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(") "); sb.append(uidMobileActiveCount); sb.append("x"); 3028d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn long packets = mobileRxPackets + mobileTxPackets; 3029d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn if (packets == 0) { 3030d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn packets = 1; 3031d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn } 3032d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(" @ "); 3033d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(BatteryStatsHelper.makemAh(uidMobileActiveTime / 1000 / (double)packets)); 3034d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(" mspp"); 3035d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn pw.println(sb.toString()); 3036d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn } 3037d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 303857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (wifiRxBytes > 0 || wifiTxBytes > 0 || wifiRxPackets > 0 || wifiTxPackets > 0) { 30397a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey pw.print(prefix); pw.print(" Wi-Fi network: "); 30407a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey pw.print(formatBytesLocked(wifiRxBytes)); pw.print(" received, "); 304157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(formatBytesLocked(wifiTxBytes)); 304257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(" sent (packets "); pw.print(wifiRxPackets); 304357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(" received, "); pw.print(wifiTxPackets); pw.println(" sent)"); 30447a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey } 30457a1c3fce478122b9f03464117dc94d44f7c1995eJeff Sharkey 3046d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn if (fullWifiLockOnTime != 0 || wifiScanTime != 0 3047d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn || uidWifiRunningTime != 0) { 3048d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.setLength(0); 3049d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(prefix); sb.append(" Wifi Running: "); 3050d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn formatTimeMs(sb, uidWifiRunningTime / 1000); 3051d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(uidWifiRunningTime, 3052d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn whichBatteryRealtime)); sb.append(")\n"); 3053d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(prefix); sb.append(" Full Wifi Lock: "); 3054d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn formatTimeMs(sb, fullWifiLockOnTime / 1000); 3055d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime, 3056d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn whichBatteryRealtime)); sb.append(")\n"); 3057d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append(prefix); sb.append(" Wifi Scan: "); 3058d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn formatTimeMs(sb, wifiScanTime / 1000); 3059d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn sb.append("("); sb.append(formatRatioLocked(wifiScanTime, 3060d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn whichBatteryRealtime)); sb.append(")"); 3061d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn pw.println(sb.toString()); 3062d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn } 3063d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 3064617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (u.hasUserActivity()) { 3065617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn boolean hasData = false; 30664c7a4a776741ddaa49df1361aa3a8f3977e59196Raph Levien for (int i=0; i<Uid.NUM_USER_ACTIVITY_TYPES; i++) { 3067617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn int val = u.getUserActivityCount(i, which); 3068617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (val != 0) { 3069617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (!hasData) { 3070617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.setLength(0); 3071617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" User activity: "); 3072617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn hasData = true; 3073617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } else { 3074617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(", "); 3075617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 3076617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(val); 3077617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(" "); 3078617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn sb.append(Uid.USER_ACTIVITY_TYPES[i]); 3079617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 3080617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 3081617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn if (hasData) { 3082617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn pw.println(sb.toString()); 3083617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 3084617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 30859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 30869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats(); 30879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakelocks.size() > 0) { 3088c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn long totalFull = 0, totalPartial = 0, totalWindow = 0; 3089c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn int count = 0; 3090fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn for (Map.Entry<String, ? extends Uid.Wakelock> ent : wakelocks.entrySet()) { 30919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Wakelock wl = ent.getValue(); 30929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String linePrefix = ": "; 30939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.setLength(0); 30949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(prefix); 30959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" Wake lock "); 30969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(ent.getKey()); 309797ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), rawRealtime, 30989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "full", which, linePrefix); 309997ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), rawRealtime, 31009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "partial", which, linePrefix); 310197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), rawRealtime, 31029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "window", which, linePrefix); 3103acc4a120742eed5905de2c7ee690f251cc32a0aeDianne Hackborn if (true || !linePrefix.equals(": ")) { 31049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append(" realtime"); 310594b916da2ce7b5fb8d87e884fad7132ef3091720Jason Parks // Only print out wake locks that were held 310694b916da2ce7b5fb8d87e884fad7132ef3091720Jason Parks pw.println(sb.toString()); 310794b916da2ce7b5fb8d87e884fad7132ef3091720Jason Parks uidActivity = true; 3108c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn count++; 3109c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 3110c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn totalFull += computeWakeLock(wl.getWakeTime(WAKE_TYPE_FULL), 311197ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, which); 3112c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn totalPartial += computeWakeLock(wl.getWakeTime(WAKE_TYPE_PARTIAL), 311397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, which); 3114c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn totalWindow += computeWakeLock(wl.getWakeTime(WAKE_TYPE_WINDOW), 311597ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, which); 3116c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 3117c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn if (count > 1) { 3118c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn if (totalFull != 0 || totalPartial != 0 || totalWindow != 0) { 3119c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.setLength(0); 3120c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.append(prefix); 3121c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.append(" TOTAL wake: "); 3122c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn boolean needComma = false; 3123c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn if (totalFull != 0) { 3124c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn needComma = true; 3125c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn formatTimeMs(sb, totalFull); 3126c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.append("full"); 3127c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 3128c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn if (totalPartial != 0) { 3129c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn if (needComma) { 3130c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.append(", "); 3131c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 3132c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn needComma = true; 3133c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn formatTimeMs(sb, totalPartial); 3134c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.append("partial"); 3135c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 3136c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn if (totalWindow != 0) { 3137c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn if (needComma) { 3138c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.append(", "); 3139c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 3140c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn needComma = true; 3141c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn formatTimeMs(sb, totalWindow); 3142c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.append("window"); 3143c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn } 3144c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn sb.append(" realtime"); 3145c24ab866b0d46685f6ddd340b9c84375cf8d6831Dianne Hackborn pw.println(sb.toString()); 31469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 31499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3150fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Map<String, ? extends Timer> syncs = u.getSyncStats(); 3151fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn if (syncs.size() > 0) { 3152fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn for (Map.Entry<String, ? extends Timer> ent : syncs.entrySet()) { 3153fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Timer timer = ent.getValue(); 3154fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn // Convert from microseconds to milliseconds with rounding 3155fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn long totalTime = (timer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; 3156fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn int count = timer.getCountLocked(which); 3157fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.setLength(0); 3158fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(prefix); 3159fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(" Sync "); 3160fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(ent.getKey()); 3161fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(": "); 3162fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn if (totalTime != 0) { 3163fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn formatTimeMs(sb, totalTime); 3164fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append("realtime ("); 3165fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(count); 3166fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(" times)"); 3167fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } else { 3168fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append("(not used)"); 3169fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 3170fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn pw.println(sb.toString()); 3171fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn uidActivity = true; 3172fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 3173fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 3174fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn 3175fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Map<String, ? extends Timer> jobs = u.getJobStats(); 3176c3940bc1ba753bcbeb9849239ec4b2ec685c40e2Dianne Hackborn if (jobs.size() > 0) { 3177fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn for (Map.Entry<String, ? extends Timer> ent : jobs.entrySet()) { 3178fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn Timer timer = ent.getValue(); 3179fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn // Convert from microseconds to milliseconds with rounding 3180fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn long totalTime = (timer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; 3181fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn int count = timer.getCountLocked(which); 3182fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.setLength(0); 3183fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(prefix); 3184fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(" Job "); 3185fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(ent.getKey()); 3186fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(": "); 3187fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn if (totalTime != 0) { 3188fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn formatTimeMs(sb, totalTime); 3189fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append("realtime ("); 3190fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(count); 3191fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append(" times)"); 3192fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } else { 3193fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn sb.append("(not used)"); 3194fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 3195fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn pw.println(sb.toString()); 3196fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn uidActivity = true; 3197fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 3198fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn } 3199fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn 320061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn SparseArray<? extends BatteryStats.Uid.Sensor> sensors = u.getSensorStats(); 320161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn int NSE = sensors.size(); 320261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn for (int ise=0; ise<NSE; ise++) { 320361659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn Uid.Sensor se = sensors.valueAt(ise); 320461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn int sensorNumber = sensors.keyAt(ise); 320561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.setLength(0); 320661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(prefix); 320761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(" Sensor "); 320861659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn int handle = se.getHandle(); 320961659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn if (handle == Uid.Sensor.GPS) { 321061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append("GPS"); 321161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn } else { 321261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(handle); 321361659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn } 321461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(": "); 321561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 321661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn Timer timer = se.getSensorTime(); 321761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn if (timer != null) { 321861659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn // Convert from microseconds to milliseconds with rounding 321961659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn long totalTime = (timer.getTotalTimeLocked( 322061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn rawRealtime, which) + 500) / 1000; 322161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn int count = timer.getCountLocked(which); 322261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn //timer.logState(); 322361659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn if (totalTime != 0) { 322461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn formatTimeMs(sb, totalTime); 322561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append("realtime ("); 322661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(count); 322761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(" times)"); 32289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 32299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("(not used)"); 32309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 323161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn } else { 323261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append("(not used)"); 3233a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 323461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 323561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn pw.println(sb.toString()); 323661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn uidActivity = true; 3237a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn } 3238a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn 3239a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn Timer vibTimer = u.getVibratorOnTimer(); 3240a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn if (vibTimer != null) { 3241a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn // Convert from microseconds to milliseconds with rounding 3242a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn long totalTime = (vibTimer.getTotalTimeLocked( 324397ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn rawRealtime, which) + 500) / 1000; 3244a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn int count = vibTimer.getCountLocked(which); 3245a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn //timer.logState(); 3246a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn if (totalTime != 0) { 3247a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn sb.setLength(0); 3248a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn sb.append(prefix); 3249a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn sb.append(" Vibrator: "); 3250a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn formatTimeMs(sb, totalTime); 3251a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn sb.append("realtime ("); 3252a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn sb.append(count); 3253a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn sb.append(" times)"); 3254a06de0f29b58df9246779cc4bfd8f06f7205ddb6Dianne Hackborn pw.println(sb.toString()); 32559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 32569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 32589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 32593e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey Timer fgTimer = u.getForegroundActivityTimer(); 32603e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey if (fgTimer != null) { 32613e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey // Convert from microseconds to milliseconds with rounding 326297ae538554e5d894774ddd55c266434ce1d67492Dianne Hackborn long totalTime = (fgTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000; 32633e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey int count = fgTimer.getCountLocked(which); 32643e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey if (totalTime != 0) { 32653e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey sb.setLength(0); 32663e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey sb.append(prefix); 32673e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey sb.append(" Foreground activities: "); 32683e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey formatTimeMs(sb, totalTime); 32693e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey sb.append("realtime ("); 32703e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey sb.append(count); 32713e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey sb.append(" times)"); 32723e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey pw.println(sb.toString()); 32733e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey uidActivity = true; 32743e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey } 32753e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey } 32763e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey 327761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn long totalStateTime = 0; 327861659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn for (int ips=0; ips<Uid.NUM_PROCESS_STATE; ips++) { 327961659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn long time = u.getProcessStateTime(ips, rawRealtime, which); 328061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn if (time > 0) { 328161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn totalStateTime += time; 328261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.setLength(0); 328361659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(prefix); 328461659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(" "); 328561659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(Uid.PROCESS_STATE_NAMES[ips]); 328661659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn sb.append(" for: "); 328761659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn formatTimeMs(sb, (totalStateTime + 500) / 1000); 328861659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn pw.println(sb.toString()); 328961659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn uidActivity = true; 329061659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn } 329161659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn } 329261659e5daaea80104d4d0fd567e78b5f757b5df4Dianne Hackborn 32939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats(); 32949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (processStats.size() > 0) { 32959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent 32969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : processStats.entrySet()) { 32979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Proc ps = ent.getValue(); 32989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long userTime; 32999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long systemTime; 33003e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey long foregroundTime; 33019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts; 33029adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn int numExcessive; 33039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project userTime = ps.getUserTime(which); 33059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project systemTime = ps.getSystemTime(which); 33063e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey foregroundTime = ps.getForegroundTime(which); 33079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project starts = ps.getStarts(which); 33081e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn final int numCrashes = ps.getNumCrashes(which); 33091e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn final int numAnrs = ps.getNumAnrs(which); 33109adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn numExcessive = which == STATS_SINCE_CHARGED 3311287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn ? ps.countExcessivePowers() : 0; 33129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33133e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey if (userTime != 0 || systemTime != 0 || foregroundTime != 0 || starts != 0 33141e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn || numExcessive != 0 || numCrashes != 0 || numAnrs != 0) { 33151d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 33161d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Proc "); 33171d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(ent.getKey()); sb.append(":\n"); 33181d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" CPU: "); 33191d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTime(sb, userTime); sb.append("usr + "); 33203e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey formatTime(sb, systemTime); sb.append("krn ; "); 33213e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey formatTime(sb, foregroundTime); sb.append("fg"); 33221e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn if (starts != 0 || numCrashes != 0 || numAnrs != 0) { 3323b8071d790a32dc715c0fd6d4e7e1bbea6c8f7a02Dianne Hackborn sb.append("\n"); sb.append(prefix); sb.append(" "); 33241e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn boolean hasOne = false; 33251e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn if (starts != 0) { 33261e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn hasOne = true; 33271e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn sb.append(starts); sb.append(" starts"); 33281e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn } 33291e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn if (numCrashes != 0) { 33301e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn if (hasOne) { 33311e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn sb.append(", "); 33321e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn } 33331e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn hasOne = true; 33341e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn sb.append(numCrashes); sb.append(" crashes"); 33351e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn } 33361e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn if (numAnrs != 0) { 33371e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn if (hasOne) { 33381e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn sb.append(", "); 33391e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn } 33401e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn sb.append(numAnrs); sb.append(" anrs"); 33411e01d16982e6b22ec4c0e2d6dc1e261eb6f92c8eDianne Hackborn } 33420d903a84d04d241a648ec429e3a0e82c712677fdDianne Hackborn } 33431d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 33449adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn for (int e=0; e<numExcessive; e++) { 3345287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn Uid.Proc.ExcessivePower ew = ps.getExcessivePower(e); 33469adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn if (ew != null) { 3347287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn pw.print(prefix); pw.print(" * Killed for "); 3348287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn if (ew.type == Uid.Proc.ExcessivePower.TYPE_WAKE) { 3349287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn pw.print("wake lock"); 3350287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn } else if (ew.type == Uid.Proc.ExcessivePower.TYPE_CPU) { 3351287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn pw.print("cpu"); 3352287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn } else { 3353287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn pw.print("unknown"); 3354287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn } 3355287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn pw.print(" use: "); 33561ebccf531d1049853b3b0630035434619682c016Dianne Hackborn TimeUtils.formatDuration(ew.usedTime, pw); 33571ebccf531d1049853b3b0630035434619682c016Dianne Hackborn pw.print(" over "); 33581ebccf531d1049853b3b0630035434619682c016Dianne Hackborn TimeUtils.formatDuration(ew.overTime, pw); 3359a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt if (ew.overTime != 0) { 3360a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt pw.print(" ("); 3361a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt pw.print((ew.usedTime*100)/ew.overTime); 3362a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt pw.println("%)"); 3363a029ea131836725b050e1a7550aa171b68171522Robert Greenwalt } 33649adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn } 33659adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn } 33669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 33679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends BatteryStats.Uid.Pkg> packageStats = u.getPackageStats(); 33729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (packageStats.size() > 0) { 33739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg> ent 33749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : packageStats.entrySet()) { 33751d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" Apk "); pw.print(ent.getKey()); pw.println(":"); 33769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean apkActivity = false; 33779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uid.Pkg ps = ent.getValue(); 33789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int wakeups = ps.getWakeups(which); 33799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (wakeups != 0) { 33801d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.print(" "); 33811d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(wakeups); pw.println(" wakeup alarms"); 33829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project apkActivity = true; 33839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 33849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Map<String, ? extends Uid.Pkg.Serv> serviceStats = ps.getServiceStats(); 33859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (serviceStats.size() > 0) { 33869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Map.Entry<String, ? extends BatteryStats.Uid.Pkg.Serv> sent 33879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : serviceStats.entrySet()) { 33889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStats.Uid.Pkg.Serv ss = sent.getValue(); 33899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long startTime = ss.getStartTime(batteryUptime, which); 33909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int starts = ss.getStarts(which); 33919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int launches = ss.getLaunches(which); 33929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (startTime != 0 || starts != 0 || launches != 0) { 33931d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 33941d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Service "); 33951d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(sent.getKey()); sb.append(":\n"); 33961d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Created for: "); 33971d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn formatTimeMs(sb, startTime / 1000); 33983e013e85b0dfb9db58a4401b80d672a7eeb09d47Jeff Sharkey sb.append("uptime\n"); 33991d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(prefix); sb.append(" Starts: "); 34001d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(starts); 34011d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", launches: "); sb.append(launches); 34021d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.println(sb.toString()); 34039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project apkActivity = true; 34049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!apkActivity) { 34081d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" (nothing executed)"); 34099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uidActivity = true; 34119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!uidActivity) { 34141d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(prefix); pw.println(" (nothing executed)"); 34159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 34189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 341971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn static void printBitDescriptions(PrintWriter pw, int oldval, int newval, HistoryTag wakelockTag, 342057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn BitDescription[] descriptions, boolean longNames) { 34216b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int diff = oldval ^ newval; 34226b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (diff == 0) return; 342371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn boolean didWake = false; 34246b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn for (int i=0; i<descriptions.length; i++) { 34256b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn BitDescription bd = descriptions[i]; 342671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if ((diff&bd.mask) != 0) { 342757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(longNames ? " " : ","); 34286b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (bd.shift < 0) { 342971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print((newval&bd.mask) != 0 ? "+" : "-"); 343057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(longNames ? bd.name : bd.shortName); 343171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (bd.mask == HistoryItem.STATE_WAKE_LOCK_FLAG && wakelockTag != null) { 343271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn didWake = true; 343371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print("="); 343471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (longNames) { 343571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn UserHandle.formatUid(pw, wakelockTag.uid); 343671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(":\""); 343771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(wakelockTag.string); 343871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print("\""); 343971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } else { 344071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(wakelockTag.poolIdx); 344171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 344271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 34436b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } else { 344457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(longNames ? bd.name : bd.shortName); 34456b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print("="); 34466b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn int val = (newval&bd.mask)>>bd.shift; 34476b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn if (bd.values != null && val >= 0 && val < bd.values.length) { 344857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(longNames? bd.values[val] : bd.shortValues[val]); 34496b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } else { 34506b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn pw.print(val); 34516b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 34526b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 34536b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 34546b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 345571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (!didWake && wakelockTag != null) { 345681850c48fd4fe1cb59c752cdfb4c81307631a46bAshish Sharma pw.print(longNames ? " wake_lock=" : ",w="); 345771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (longNames) { 345871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn UserHandle.formatUid(pw, wakelockTag.uid); 345971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(":\""); 346071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(wakelockTag.string); 346171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print("\""); 346271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } else { 346371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(wakelockTag.poolIdx); 346471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 346571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 34666b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn } 34676b7b4845212b3a439c527f2e1eca205b6b45fcebDianne Hackborn 34680ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn public void prepareForDumpLocked() { 34690ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 34700ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 34710ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn public static class HistoryPrinter { 34720ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn int oldState = 0; 3473a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn int oldState2 = 0; 347457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn int oldLevel = -1; 34750ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn int oldStatus = -1; 34760ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn int oldHealth = -1; 34770ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn int oldPlug = -1; 34780ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn int oldTemp = -1; 34790ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn int oldVolt = -1; 348057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn long lastTime = -1; 34810ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 34823251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn void reset() { 34833251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn oldState = oldState2 = 0; 34843251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn oldLevel = -1; 34853251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn oldStatus = -1; 34863251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn oldHealth = -1; 34873251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn oldPlug = -1; 34883251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn oldTemp = -1; 34893251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn oldVolt = -1; 34903251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn } 34913251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn 349299009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn public void printNextItem(PrintWriter pw, HistoryItem rec, long baseTime, boolean checkin, 3493a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn boolean verbose) { 349457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (!checkin) { 349557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(" "); 349699009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn TimeUtils.formatDuration(rec.time - baseTime, pw, TimeUtils.HUNDRED_DAY_FIELD_LEN); 349771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(" ("); 349871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(rec.numReadInts); 349971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(") "); 350057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } else { 3501cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); 3502cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn pw.print(HISTORY_DATA); pw.print(','); 350357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (lastTime < 0) { 350499009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn pw.print(rec.time - baseTime); 350557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } else { 350699009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn pw.print(rec.time - lastTime); 350757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 350857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn lastTime = rec.time; 350957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 35100ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn if (rec.cmd == HistoryItem.CMD_START) { 351157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (checkin) { 351257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(":"); 351357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 351457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.println("START"); 35153251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn reset(); 351637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } else if (rec.cmd == HistoryItem.CMD_CURRENT_TIME 351737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn || rec.cmd == HistoryItem.CMD_RESET) { 3518e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn if (checkin) { 3519e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn pw.print(":"); 3520e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn } 352137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (rec.cmd == HistoryItem.CMD_RESET) { 352237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn pw.print("RESET:"); 35233251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn reset(); 352437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 3525e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn pw.print("TIME:"); 3526e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn if (checkin) { 3527e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn pw.println(rec.currentTime); 3528e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn } else { 3529e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn pw.print(" "); 3530e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn pw.println(DateFormat.format("yyyy-MM-dd-HH-mm-ss", 3531e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn rec.currentTime).toString()); 3532e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn } 353329cd7f19625a2a2a8528469e55f3aa495107b9e7Dianne Hackborn } else if (rec.cmd == HistoryItem.CMD_SHUTDOWN) { 353429cd7f19625a2a2a8528469e55f3aa495107b9e7Dianne Hackborn if (checkin) { 353529cd7f19625a2a2a8528469e55f3aa495107b9e7Dianne Hackborn pw.print(":"); 353629cd7f19625a2a2a8528469e55f3aa495107b9e7Dianne Hackborn } 353729cd7f19625a2a2a8528469e55f3aa495107b9e7Dianne Hackborn pw.println("SHUTDOWN"); 35380ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } else if (rec.cmd == HistoryItem.CMD_OVERFLOW) { 353957ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (checkin) { 354057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(":"); 354157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 354257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.println("*OVERFLOW*"); 35430ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } else { 354457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (!checkin) { 354557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (rec.batteryLevel < 10) pw.print("00"); 354657ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn else if (rec.batteryLevel < 100) pw.print("0"); 354757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(rec.batteryLevel); 3548a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn if (verbose) { 3549a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.print(" "); 3550a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn if (rec.states < 0) ; 3551a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn else if (rec.states < 0x10) pw.print("0000000"); 3552a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn else if (rec.states < 0x100) pw.print("000000"); 3553a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn else if (rec.states < 0x1000) pw.print("00000"); 3554a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn else if (rec.states < 0x10000) pw.print("0000"); 3555a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn else if (rec.states < 0x100000) pw.print("000"); 3556a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn else if (rec.states < 0x1000000) pw.print("00"); 3557a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn else if (rec.states < 0x10000000) pw.print("0"); 3558a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn pw.print(Integer.toHexString(rec.states)); 3559a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn } 356057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } else { 356157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn if (oldLevel != rec.batteryLevel) { 356257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn oldLevel = rec.batteryLevel; 356357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(",Bl="); pw.print(rec.batteryLevel); 356457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 356557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn } 35660ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn if (oldStatus != rec.batteryStatus) { 35670ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn oldStatus = rec.batteryStatus; 356857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? ",Bs=" : " status="); 35690ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn switch (oldStatus) { 35700ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_STATUS_UNKNOWN: 357157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "?" : "unknown"); 35720ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 35730ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_STATUS_CHARGING: 357457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "c" : "charging"); 35750ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 35760ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_STATUS_DISCHARGING: 357757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "d" : "discharging"); 35780ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 35790ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_STATUS_NOT_CHARGING: 358057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "n" : "not-charging"); 35810ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 35820ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_STATUS_FULL: 358357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "f" : "full"); 35840ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 35850ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn default: 35860ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn pw.print(oldStatus); 35870ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 35880ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 35890ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 35900ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn if (oldHealth != rec.batteryHealth) { 35910ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn oldHealth = rec.batteryHealth; 359257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? ",Bh=" : " health="); 35930ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn switch (oldHealth) { 35940ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_HEALTH_UNKNOWN: 359557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "?" : "unknown"); 35960ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 35970ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_HEALTH_GOOD: 359857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "g" : "good"); 35990ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 36000ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_HEALTH_OVERHEAT: 360157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "h" : "overheat"); 36020ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 36030ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_HEALTH_DEAD: 360457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "d" : "dead"); 36050ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 36060ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: 360757ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "v" : "over-voltage"); 36080ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 36090ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: 361057ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "f" : "failure"); 36110ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 3612eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn case BatteryManager.BATTERY_HEALTH_COLD: 3613eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn pw.print(checkin ? "c" : "cold"); 3614eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn break; 36150ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn default: 36160ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn pw.print(oldHealth); 36170ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 36180ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 36190ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 36200ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn if (oldPlug != rec.batteryPlugType) { 36210ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn oldPlug = rec.batteryPlugType; 362257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? ",Bp=" : " plug="); 36230ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn switch (oldPlug) { 36240ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case 0: 362557ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "n" : "none"); 36260ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 36270ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_PLUGGED_AC: 362857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "a" : "ac"); 36290ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 36300ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn case BatteryManager.BATTERY_PLUGGED_USB: 363157ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "u" : "usb"); 36320ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 363337a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu case BatteryManager.BATTERY_PLUGGED_WIRELESS: 363457ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? "w" : "wireless"); 363537a37f445cbcd64376af153dd79ea2a123d9405dBrian Muramatsu break; 36360ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn default: 36370ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn pw.print(oldPlug); 36380ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn break; 36390ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 36400ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 36410ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn if (oldTemp != rec.batteryTemperature) { 36420ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn oldTemp = rec.batteryTemperature; 364357ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? ",Bt=" : " temp="); 36440ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn pw.print(oldTemp); 36450ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 36460ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn if (oldVolt != rec.batteryVoltage) { 36470ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn oldVolt = rec.batteryVoltage; 364857ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn pw.print(checkin ? ",Bv=" : " volt="); 36490ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn pw.print(oldVolt); 36500ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 365171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn printBitDescriptions(pw, oldState, rec.states, rec.wakelockTag, 365257ed6a6440ff010494a03c6c68ce6dc0924b57d6Dianne Hackborn HISTORY_STATE_DESCRIPTIONS, !checkin); 3653a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn printBitDescriptions(pw, oldState2, rec.states2, null, 3654a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn HISTORY_STATE2_DESCRIPTIONS, !checkin); 3655c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (rec.wakeReasonTag != null) { 3656c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (checkin) { 3657d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn pw.print(",wr="); 3658c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(rec.wakeReasonTag.poolIdx); 3659c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } else { 3660c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(" wake_reason="); 3661c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(rec.wakeReasonTag.uid); 3662c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(":\""); 3663c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(rec.wakeReasonTag.string); 3664c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print("\""); 3665c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 3666c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 3667099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn if (rec.eventCode != HistoryItem.EVENT_NONE) { 3668eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn pw.print(checkin ? "," : " "); 3669eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn if ((rec.eventCode&HistoryItem.EVENT_FLAG_START) != 0) { 3670eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn pw.print("+"); 3671eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn } else if ((rec.eventCode&HistoryItem.EVENT_FLAG_FINISH) != 0) { 3672eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn pw.print("-"); 3673099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn } 3674eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn String[] eventNames = checkin ? HISTORY_EVENT_CHECKIN_NAMES 3675eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn : HISTORY_EVENT_NAMES; 3676eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn int idx = rec.eventCode & ~(HistoryItem.EVENT_FLAG_START 3677eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn | HistoryItem.EVENT_FLAG_FINISH); 3678eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn if (idx >= 0 && idx < eventNames.length) { 3679eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn pw.print(eventNames[idx]); 3680eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn } else { 3681eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn pw.print(checkin ? "Ev" : "event"); 3682eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn pw.print(idx); 3683eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn } 3684eaf2ac464b1cd741d7d0fe700771b1b7c00ddb29Dianne Hackborn pw.print("="); 3685099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn if (checkin) { 368671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(rec.eventTag.poolIdx); 3687099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn } else { 368871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn UserHandle.formatUid(pw, rec.eventTag.uid); 368971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(":\""); 369071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(rec.eventTag.string); 369171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print("\""); 3692099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn } 3693099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn } 36940ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn pw.println(); 3695e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn oldState = rec.states; 3696cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn oldState2 = rec.states2; 36970ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 36980ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 36990ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 37000ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 370171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn private void printSizeValue(PrintWriter pw, long size) { 370271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn float result = size; 370371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn String suffix = ""; 370471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (result >= 10*1024) { 370571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn suffix = "KB"; 370671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn result = result / 1024; 370771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 370871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (result >= 10*1024) { 370971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn suffix = "MB"; 371071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn result = result / 1024; 371171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 371271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (result >= 10*1024) { 371371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn suffix = "GB"; 371471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn result = result / 1024; 371571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 371671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (result >= 10*1024) { 371771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn suffix = "TB"; 371871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn result = result / 1024; 371971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 372071fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn if (result >= 10*1024) { 372171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn suffix = "PB"; 372271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn result = result / 1024; 372371fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 372471fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print((int)result); 372571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(suffix); 372671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 372771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn 3728ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn private static boolean dumpTimeEstimate(PrintWriter pw, String label, long[] steps, 3729ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn int count, long modesOfInterest, long modeValues) { 3730ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn if (count <= 0) { 3731ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn return false; 3732ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn } 3733ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn long total = 0; 3734ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn int numOfInterest = 0; 3735ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn for (int i=0; i<count; i++) { 3736ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn long initMode = (steps[i] & STEP_LEVEL_INITIAL_MODE_MASK) 3737ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn >> STEP_LEVEL_INITIAL_MODE_SHIFT; 3738ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn long modMode = (steps[i] & STEP_LEVEL_MODIFIED_MODE_MASK) 3739ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn >> STEP_LEVEL_MODIFIED_MODE_SHIFT; 3740ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn // If the modes of interest didn't change during this step period... 3741ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn if ((modMode&modesOfInterest) == 0) { 3742ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn // And the mode values during this period match those we are measuring... 3743ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn if ((initMode&modesOfInterest) == modeValues) { 3744ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn // Then this can be used to estimate the total time! 3745ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn numOfInterest++; 3746ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn total += steps[i] & STEP_LEVEL_TIME_MASK; 3747ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn } 3748ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn } 3749ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn } 3750ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn if (numOfInterest <= 0) { 3751ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn return false; 3752ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn } 3753ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn 3754ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn // The estimated time is the average time we spend in each level, multipled 3755ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn // by 100 -- the total number of battery levels 3756ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn long estimatedTime = (total / numOfInterest) * 100; 3757ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn 3758ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn pw.print(label); 3759ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn StringBuilder sb = new StringBuilder(64); 3760ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn formatTimeMs(sb, estimatedTime); 3761ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn pw.print(sb); 3762ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn pw.println(); 3763ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn 3764ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn return true; 3765ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn } 3766ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn 3767ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn private static boolean dumpDurationSteps(PrintWriter pw, String header, long[] steps, 3768ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn int count, boolean checkin) { 3769ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn if (count <= 0) { 3770ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn return false; 3771ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 3772ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn if (!checkin) { 3773ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.println(header); 3774ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 37750068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn String[] lineArgs = new String[4]; 3776ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn for (int i=0; i<count; i++) { 37770068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn long duration = steps[i] & STEP_LEVEL_TIME_MASK; 37780068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn int level = (int)((steps[i] & STEP_LEVEL_LEVEL_MASK) 37790068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn >> STEP_LEVEL_LEVEL_SHIFT); 37800068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn long initMode = (steps[i] & STEP_LEVEL_INITIAL_MODE_MASK) 37810068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn >> STEP_LEVEL_INITIAL_MODE_SHIFT; 37820068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn long modMode = (steps[i] & STEP_LEVEL_MODIFIED_MODE_MASK) 37830068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn >> STEP_LEVEL_MODIFIED_MODE_SHIFT; 3784ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn if (checkin) { 37850068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn lineArgs[0] = Long.toString(duration); 37860068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn lineArgs[1] = Integer.toString(level); 37870068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn if ((modMode&STEP_LEVEL_MODE_SCREEN_STATE) == 0) { 37880068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn switch ((int)(initMode&STEP_LEVEL_MODE_SCREEN_STATE) + 1) { 37890068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn case Display.STATE_OFF: lineArgs[2] = "s-"; break; 37900068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn case Display.STATE_ON: lineArgs[2] = "s+"; break; 37910068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn case Display.STATE_DOZE: lineArgs[2] = "sd"; break; 37920068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn case Display.STATE_DOZE_SUSPEND: lineArgs[2] = "sds"; break; 37930068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn default: lineArgs[1] = "?"; break; 37940068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } 37950068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } else { 37960068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn lineArgs[2] = ""; 37970068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } 37980068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn if ((modMode&STEP_LEVEL_MODE_POWER_SAVE) == 0) { 37990068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn lineArgs[3] = (initMode&STEP_LEVEL_MODE_POWER_SAVE) != 0 ? "p+" : "p-"; 38000068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } else { 38010068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn lineArgs[3] = ""; 38020068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } 3803ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn dumpLine(pw, 0 /* uid */, "i" /* category */, header, (Object[])lineArgs); 3804ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } else { 3805ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.print(" #"); pw.print(i); pw.print(": "); 38060068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn TimeUtils.formatDuration(duration, pw); 38070068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn pw.print(" to "); pw.print(level); 38080068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn boolean haveModes = false; 38090068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn if ((modMode&STEP_LEVEL_MODE_SCREEN_STATE) == 0) { 38100068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn pw.print(" ("); 38110068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn switch ((int)(initMode&STEP_LEVEL_MODE_SCREEN_STATE) + 1) { 38120068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn case Display.STATE_OFF: pw.print("screen-off"); break; 38130068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn case Display.STATE_ON: pw.print("screen-on"); break; 38140068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn case Display.STATE_DOZE: pw.print("screen-doze"); break; 38150068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn case Display.STATE_DOZE_SUSPEND: pw.print("screen-doze-suspend"); break; 38160068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn default: lineArgs[1] = "screen-?"; break; 38170068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } 38180068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn haveModes = true; 38190068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } 38200068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn if ((modMode&STEP_LEVEL_MODE_POWER_SAVE) == 0) { 38210068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn pw.print(haveModes ? ", " : " ("); 38220068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn pw.print((initMode&STEP_LEVEL_MODE_POWER_SAVE) != 0 38230068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn ? "power-save-on" : "power-save-off"); 38240068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn haveModes = true; 38250068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } 38260068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn if (haveModes) { 38270068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn pw.print(")"); 38280068d3dcf1f1a804554a1a09e3b173ac12651786Dianne Hackborn } 3829ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.println(); 3830ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 3831ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 3832ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn return true; 3833ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 3834ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn 3835c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public static final int DUMP_UNPLUGGED_ONLY = 1<<0; 3836c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public static final int DUMP_CHARGED_ONLY = 1<<1; 3837c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public static final int DUMP_HISTORY_ONLY = 1<<2; 3838c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public static final int DUMP_INCLUDE_HISTORY = 1<<3; 3839a1bd79268be693f04f4adee90673d6ed400cc9fdDianne Hackborn public static final int DUMP_VERBOSE = 1<<4; 3840d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn public static final int DUMP_DEVICE_WIFI_ONLY = 1<<5; 3841c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn 384237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn private void dumpHistoryLocked(PrintWriter pw, int flags, long histStart, boolean checkin) { 384337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn final HistoryPrinter hprinter = new HistoryPrinter(); 384437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn final HistoryItem rec = new HistoryItem(); 384537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn long lastTime = -1; 384637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn long baseTime = -1; 384737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn boolean printed = false; 384837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn HistoryEventTracker tracker = null; 384937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn while (getNextHistoryLocked(rec)) { 385037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn lastTime = rec.time; 385137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (baseTime < 0) { 385237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn baseTime = lastTime; 385337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 385437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (rec.time >= histStart) { 385537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (histStart >= 0 && !printed) { 385637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (rec.cmd == HistoryItem.CMD_CURRENT_TIME 38576020071df901be17bedb0b59ab634555a1d95ecbAshish Sharma || rec.cmd == HistoryItem.CMD_RESET 385829cd7f19625a2a2a8528469e55f3aa495107b9e7Dianne Hackborn || rec.cmd == HistoryItem.CMD_START 385929cd7f19625a2a2a8528469e55f3aa495107b9e7Dianne Hackborn || rec.cmd == HistoryItem.CMD_SHUTDOWN) { 386037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn printed = true; 3861cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn hprinter.printNextItem(pw, rec, baseTime, checkin, 3862cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn (flags&DUMP_VERBOSE) != 0); 3863cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn rec.cmd = HistoryItem.CMD_UPDATE; 386437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } else if (rec.currentTime != 0) { 386537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn printed = true; 386637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn byte cmd = rec.cmd; 386737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn rec.cmd = HistoryItem.CMD_CURRENT_TIME; 386837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn hprinter.printNextItem(pw, rec, baseTime, checkin, 386937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn (flags&DUMP_VERBOSE) != 0); 387037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn rec.cmd = cmd; 387137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 387237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (tracker != null) { 3873cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn if (rec.cmd != HistoryItem.CMD_UPDATE) { 3874cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn hprinter.printNextItem(pw, rec, baseTime, checkin, 3875cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn (flags&DUMP_VERBOSE) != 0); 3876cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn rec.cmd = HistoryItem.CMD_UPDATE; 3877cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn } 3878cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn int oldEventCode = rec.eventCode; 3879cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn HistoryTag oldEventTag = rec.eventTag; 388037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn rec.eventTag = new HistoryTag(); 388137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn for (int i=0; i<HistoryItem.EVENT_COUNT; i++) { 388237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn HashMap<String, SparseIntArray> active 388337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn = tracker.getStateForEvent(i); 388437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (active == null) { 388537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn continue; 388637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 388737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn for (HashMap.Entry<String, SparseIntArray> ent 388837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn : active.entrySet()) { 388937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn SparseIntArray uids = ent.getValue(); 389037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn for (int j=0; j<uids.size(); j++) { 389137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn rec.eventCode = i; 389237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn rec.eventTag.string = ent.getKey(); 389337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn rec.eventTag.uid = uids.keyAt(j); 389437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn rec.eventTag.poolIdx = uids.valueAt(j); 389537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn hprinter.printNextItem(pw, rec, baseTime, checkin, 389637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn (flags&DUMP_VERBOSE) != 0); 3897cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn rec.wakeReasonTag = null; 3898cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn rec.wakelockTag = null; 389937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 390037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 390137de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 3902cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn rec.eventCode = oldEventCode; 3903cbefd8dd2befcb768f911a63becc427ec4c13250Dianne Hackborn rec.eventTag = oldEventTag; 390437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn tracker = null; 390537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 390637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 390737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn hprinter.printNextItem(pw, rec, baseTime, checkin, 390837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn (flags&DUMP_VERBOSE) != 0); 3909536456f2d4c0d93bb55950ce5edc24e9bb9547ebDianne Hackborn } else if (false && rec.eventCode != HistoryItem.EVENT_NONE) { 3910536456f2d4c0d93bb55950ce5edc24e9bb9547ebDianne Hackborn // This is an attempt to aggregate the previous state and generate 3911536456f2d4c0d93bb55950ce5edc24e9bb9547ebDianne Hackborn // fake events to reflect that state at the point where we start 3912536456f2d4c0d93bb55950ce5edc24e9bb9547ebDianne Hackborn // printing real events. It doesn't really work right, so is turned off. 391337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (tracker == null) { 391437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn tracker = new HistoryEventTracker(); 391537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 391637de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn tracker.updateState(rec.eventCode, rec.eventTag.string, 391737de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn rec.eventTag.uid, rec.eventTag.poolIdx); 391837de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 391937de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 392037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn if (histStart >= 0) { 3921fc0641340ff927d9c35d5613723d25858f751118Dianne Hackborn commitCurrentHistoryBatchLocked(); 392237de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn pw.print(checkin ? "NEXT: " : " NEXT: "); pw.println(lastTime+1); 392337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 392437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn } 392537de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn 39269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 39279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Dumps a human-readable summary of the battery statistics to the given PrintWriter. 39289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 39299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pw a Printer to receive the dump output. 39309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 39319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 3932c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public void dumpLocked(Context context, PrintWriter pw, int flags, int reqUid, long histStart) { 39330ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn prepareForDumpLocked(); 39340ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 3935c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn final boolean filtering = 3936c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn (flags&(DUMP_HISTORY_ONLY|DUMP_UNPLUGGED_ONLY|DUMP_CHARGED_ONLY)) != 0; 39370ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 3938c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if ((flags&DUMP_HISTORY_ONLY) != 0 || !filtering) { 3939c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn final long historyTotalSize = getHistoryTotalSize(); 3940c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn final long historyUsedSize = getHistoryUsedSize(); 3941c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (startIteratingHistoryLocked()) { 3942c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn try { 3943c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print("Battery History ("); 3944c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print((100*historyUsedSize)/historyTotalSize); 3945c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print("% used, "); 3946c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn printSizeValue(pw, historyUsedSize); 3947c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(" used of "); 3948c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn printSizeValue(pw, historyTotalSize); 3949c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(", "); 3950c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(getHistoryStringPoolSize()); 3951c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(" strings using "); 3952c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn printSizeValue(pw, getHistoryStringPoolBytes()); 3953c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println("):"); 395437de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn dumpHistoryLocked(pw, flags, histStart, false); 3955c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println(); 3956c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } finally { 3957c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn finishIteratingHistoryLocked(); 395871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 39590ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn } 39600ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn 3961c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (startIteratingOldHistoryLocked()) { 3962c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn try { 396337de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn final HistoryItem rec = new HistoryItem(); 3964c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println("Old battery History:"); 3965c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn HistoryPrinter hprinter = new HistoryPrinter(); 396699009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn long baseTime = -1; 3967c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn while (getNextOldHistoryLocked(rec)) { 396899009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn if (baseTime < 0) { 396999009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn baseTime = rec.time; 397099009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn } 397199009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn hprinter.printNextItem(pw, rec, baseTime, false, (flags&DUMP_VERBOSE) != 0); 3972c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 3973c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println(); 3974c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } finally { 3975c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn finishIteratingOldHistoryLocked(); 397671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 397732907cfb38bda2d3c052cf5139c5b592678fedbbDianne Hackborn } 3978b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn } 3979099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn 3980c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (filtering && (flags&(DUMP_UNPLUGGED_ONLY|DUMP_CHARGED_ONLY)) == 0) { 3981099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn return; 3982099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn } 3983099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn 3984c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (!filtering) { 3985c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn SparseArray<? extends Uid> uidStats = getUidStats(); 3986c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn final int NU = uidStats.size(); 3987c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn boolean didPid = false; 3988c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn long nowRealtime = SystemClock.elapsedRealtime(); 3989c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn for (int i=0; i<NU; i++) { 3990c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn Uid uid = uidStats.valueAt(i); 3991c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn SparseArray<? extends Uid.Pid> pids = uid.getPidStats(); 3992c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (pids != null) { 3993c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn for (int j=0; j<pids.size(); j++) { 3994c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn Uid.Pid pid = pids.valueAt(j); 3995c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (!didPid) { 3996c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println("Per-PID Stats:"); 3997c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn didPid = true; 3998c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 3999e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn long time = pid.mWakeSumMs + (pid.mWakeNesting > 0 4000e5167ca61e2c5607aad9041b44158581bc61b4d8Dianne Hackborn ? (nowRealtime - pid.mWakeStartMs) : 0); 4001c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(" PID "); pw.print(pids.keyAt(j)); 4002c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.print(" wake time: "); 4003c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn TimeUtils.formatDuration(time, pw); 4004c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println(""); 4005b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn } 4006b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn } 4007b5e3165129a5871cf679a67d9e9323ffad3d4902Dianne Hackborn } 4008c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (didPid) { 4009ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.println(); 4010ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 4011cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn } 4012cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn 4013cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn if (!filtering || (flags&DUMP_CHARGED_ONLY) != 0) { 4014ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn if (dumpDurationSteps(pw, "Discharge step durations:", getDischargeStepDurationsArray(), 4015ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn getNumDischargeStepDurations(), false)) { 4016ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn long timeRemaining = computeBatteryTimeRemaining(SystemClock.elapsedRealtime()); 4017ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn if (timeRemaining >= 0) { 4018ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.print(" Estimated discharge time remaining: "); 4019ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn TimeUtils.formatDuration(timeRemaining / 1000, pw); 4020ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.println(); 4021ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 4022ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn dumpTimeEstimate(pw, " Estimated screen off time: ", 4023ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn getDischargeStepDurationsArray(), getNumDischargeStepDurations(), 4024ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, 4025ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn (Display.STATE_OFF-1)); 4026ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn dumpTimeEstimate(pw, " Estimated screen off power save time: ", 4027ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn getDischargeStepDurationsArray(), getNumDischargeStepDurations(), 4028ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, 4029ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn (Display.STATE_OFF-1)|STEP_LEVEL_MODE_POWER_SAVE); 4030ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn dumpTimeEstimate(pw, " Estimated screen on time: ", 4031ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn getDischargeStepDurationsArray(), getNumDischargeStepDurations(), 4032ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, 4033ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn (Display.STATE_ON-1)); 4034ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn dumpTimeEstimate(pw, " Estimated screen on power save time: ", 4035ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn getDischargeStepDurationsArray(), getNumDischargeStepDurations(), 4036ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, 4037ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn (Display.STATE_ON-1)|STEP_LEVEL_MODE_POWER_SAVE); 4038ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn dumpTimeEstimate(pw, " Estimated screen doze time: ", 4039ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn getDischargeStepDurationsArray(), getNumDischargeStepDurations(), 4040ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, 4041ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn (Display.STATE_DOZE-1)); 4042ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn dumpTimeEstimate(pw, " Estimated screen doze power save time: ", 4043ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn getDischargeStepDurationsArray(), getNumDischargeStepDurations(), 4044ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, 4045ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn (Display.STATE_DOZE-1)|STEP_LEVEL_MODE_POWER_SAVE); 4046ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn dumpTimeEstimate(pw, " Estimated screen doze suspend time: ", 4047ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn getDischargeStepDurationsArray(), getNumDischargeStepDurations(), 4048ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, 4049ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn (Display.STATE_DOZE_SUSPEND-1)); 4050ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn dumpTimeEstimate(pw, " Estimated screen doze suspend power save time: ", 4051ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn getDischargeStepDurationsArray(), getNumDischargeStepDurations(), 4052ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn STEP_LEVEL_MODE_SCREEN_STATE|STEP_LEVEL_MODE_POWER_SAVE, 4053ad6a99b32a0d062c967019e5cd9858071a9c6617Dianne Hackborn (Display.STATE_DOZE_SUSPEND-1)|STEP_LEVEL_MODE_POWER_SAVE); 4054ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.println(); 4055ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 4056ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn if (dumpDurationSteps(pw, "Charge step durations:", getChargeStepDurationsArray(), 4057ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn getNumChargeStepDurations(), false)) { 4058ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn long timeRemaining = computeChargeTimeRemaining(SystemClock.elapsedRealtime()); 4059ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn if (timeRemaining >= 0) { 4060ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.print(" Estimated charge time remaining: "); 4061ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn TimeUtils.formatDuration(timeRemaining / 1000, pw); 4062ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.println(); 4063ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn } 4064ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.println(); 4065c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 4066ec43a6bc17d90058ba2c00e016846c863ab239bcJeff Sharkey pw.println("Statistics since last charge:"); 4067ec43a6bc17d90058ba2c00e016846c863ab239bcJeff Sharkey pw.println(" System starts: " + getStartCount() 4068ec43a6bc17d90058ba2c00e016846c863ab239bcJeff Sharkey + ", currently on battery: " + getIsOnBattery()); 4069d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn dumpLocked(context, pw, "", STATS_SINCE_CHARGED, reqUid, 4070d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn (flags&DUMP_DEVICE_WIFI_ONLY) != 0); 4071ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn pw.println(); 4072ec43a6bc17d90058ba2c00e016846c863ab239bcJeff Sharkey } 4073c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (!filtering || (flags&DUMP_UNPLUGGED_ONLY) != 0) { 4074c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn pw.println("Statistics since last unplugged:"); 4075d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn dumpLocked(context, pw, "", STATS_SINCE_UNPLUGGED, reqUid, 4076d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn (flags&DUMP_DEVICE_WIFI_ONLY) != 0); 4077c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 40789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 40809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @SuppressWarnings("unused") 4081c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn public void dumpCheckinLocked(Context context, PrintWriter pw, 4082c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn List<ApplicationInfo> apps, int flags, long histStart) { 40830ffc988a7f47013805d5abeed1c20f159b3bd799Dianne Hackborn prepareForDumpLocked(); 4084cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn 4085cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn dumpLine(pw, 0 /* uid */, "i" /* category */, VERSION_DATA, 40860ee10f6d263e5476d0eb8f8ba82ff5cd522883e9Dianne Hackborn "12", getParcelVersion(), getStartPlatformVersion(), getEndPlatformVersion()); 4087cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn 408813ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn long now = getHistoryBaseTime() + SystemClock.elapsedRealtime(); 408913ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn 4090c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn final boolean filtering = 4091c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn (flags&(DUMP_HISTORY_ONLY|DUMP_UNPLUGGED_ONLY|DUMP_CHARGED_ONLY)) != 0; 4092c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn 4093c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if ((flags&DUMP_INCLUDE_HISTORY) != 0 || (flags&DUMP_HISTORY_ONLY) != 0) { 409449021f5f790c31f62d4cee9fafcae13505bed798Dianne Hackborn if (startIteratingHistoryLocked()) { 409571fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn try { 409671fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn for (int i=0; i<getHistoryStringPoolSize(); i++) { 409771fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(','); 409871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(HISTORY_STRING_POOL); pw.print(','); 409971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(i); 410099009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn pw.print(","); 410171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.print(getHistoryTagPoolUid(i)); 410299009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn pw.print(",\""); 410399009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn String str = getHistoryTagPoolString(i); 410499009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn str = str.replace("\\", "\\\\"); 410599009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn str = str.replace("\"", "\\\""); 410699009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn pw.print(str); 410799009ea7dcc196cd97756d70ed69499025229bd9Dianne Hackborn pw.print("\""); 410871fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn pw.println(); 410971fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } 411037de0989359be9c31b91d3608d2cfe63546c38eaDianne Hackborn dumpHistoryLocked(pw, flags, histStart, true); 411171fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn } finally { 411271fc13eb583eecc677b177b8010538a08aebb43dDianne Hackborn finishIteratingHistoryLocked(); 411349021f5f790c31f62d4cee9fafcae13505bed798Dianne Hackborn } 411413ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn } 411513ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn } 411613ac041b9f21043bc7c848a743be618bfd7a67e9Dianne Hackborn 4117c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (filtering && (flags&(DUMP_UNPLUGGED_ONLY|DUMP_CHARGED_ONLY)) == 0) { 4118099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn return; 4119099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn } 4120099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn 4121e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn if (apps != null) { 4122e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn SparseArray<ArrayList<String>> uids = new SparseArray<ArrayList<String>>(); 4123e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn for (int i=0; i<apps.size(); i++) { 4124e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn ApplicationInfo ai = apps.get(i); 4125e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn ArrayList<String> pkgs = uids.get(ai.uid); 4126e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn if (pkgs == null) { 4127e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn pkgs = new ArrayList<String>(); 4128e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn uids.put(ai.uid, pkgs); 4129e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn } 4130e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn pkgs.add(ai.packageName); 4131e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn } 4132e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn SparseArray<? extends Uid> uidStats = getUidStats(); 4133e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn final int NU = uidStats.size(); 4134e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn String[] lineArgs = new String[2]; 4135e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn for (int i=0; i<NU; i++) { 4136e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn int uid = uidStats.keyAt(i); 4137e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn ArrayList<String> pkgs = uids.get(uid); 4138e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn if (pkgs != null) { 4139e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn for (int j=0; j<pkgs.size(); j++) { 4140e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn lineArgs[0] = Integer.toString(uid); 4141e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn lineArgs[1] = pkgs.get(j); 4142e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn dumpLine(pw, 0 /* uid */, "i" /* category */, UID_DATA, 4143e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn (Object[])lineArgs); 4144e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn } 4145e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn } 4146e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn } 4147e4a5951925f16f18dae91ed65567e96528f17feeDianne Hackborn } 4148cd0e335be354d117c553bb87b3432a75d550d21aDianne Hackborn if (!filtering || (flags&DUMP_CHARGED_ONLY) != 0) { 4149ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn dumpDurationSteps(pw, DISCHARGE_STEP_DATA, getDischargeStepDurationsArray(), 4150ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn getNumDischargeStepDurations(), true); 4151d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn String[] lineArgs = new String[1]; 4152d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn long timeRemaining = computeBatteryTimeRemaining(SystemClock.elapsedRealtime()); 4153d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn if (timeRemaining >= 0) { 4154d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn lineArgs[0] = Long.toString(timeRemaining); 4155d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn dumpLine(pw, 0 /* uid */, "i" /* category */, DISCHARGE_TIME_REMAIN_DATA, 4156d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn (Object[])lineArgs); 4157d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn } 4158ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn dumpDurationSteps(pw, CHARGE_STEP_DATA, getChargeStepDurationsArray(), 4159ab5c0ea43cf457b20ab4267a14b224f39e0511bfDianne Hackborn getNumChargeStepDurations(), true); 4160d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn timeRemaining = computeChargeTimeRemaining(SystemClock.elapsedRealtime()); 4161d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn if (timeRemaining >= 0) { 4162d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn lineArgs[0] = Long.toString(timeRemaining); 4163d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn dumpLine(pw, 0 /* uid */, "i" /* category */, CHARGE_TIME_REMAIN_DATA, 4164d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn (Object[])lineArgs); 4165d06dcfd3db609d796165d602a2b7914c0b4f64bbDianne Hackborn } 4166d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn dumpCheckinLocked(context, pw, STATS_SINCE_CHARGED, -1, 4167d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn (flags&DUMP_DEVICE_WIFI_ONLY) != 0); 4168c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn } 4169c51cf03cf2458c8c137f60c7379f2cccf681d16fDianne Hackborn if (!filtering || (flags&DUMP_UNPLUGGED_ONLY) != 0) { 4170d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn dumpCheckinLocked(context, pw, STATS_SINCE_UNPLUGGED, -1, 4171d953c53d3b04d772bb1b62ede1c2011641ca82b5Dianne Hackborn (flags&DUMP_DEVICE_WIFI_ONLY) != 0); 41729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 41749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4175