BatteryStatsService.java revision e9b06d754af03faf27012fbed1e7559ec1ba7c79
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006-2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.server.am; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.app.IBatteryStats; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.os.BatteryStatsImpl; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Binder; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Process; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager; 28e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Savilleimport android.telephony.SignalStrength; 2955280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackbornimport android.util.Log; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileDescriptor; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.PrintWriter; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * All information we are collecting about things that can happen that impact 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * battery life. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class BatteryStatsService extends IBatteryStats.Stub { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static IBatteryStats sService; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final BatteryStatsImpl mStats; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Context mContext; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BatteryStatsService(String filename) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats = new BatteryStatsImpl(filename); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void publish(Context context) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext = context; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ServiceManager.addService("batteryinfo", asBinder()); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5355280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn public void shutdown() { 5455280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn Log.w("BatteryStats", "Writing battery stats before shutdown..."); 5555280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn synchronized (mStats) { 5655280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn mStats.writeLocked(); 5755280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn } 5855280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn } 5955280a91884b9256e8db6af6a09f28b3feeaa9d8Dianne Hackborn 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static IBatteryStats getService() { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sService != null) { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sService; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IBinder b = ServiceManager.getService("batteryinfo"); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sService = asInterface(b); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sService; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the current statistics object, which may be modified 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to reflect events that affect battery usage. You must lock the 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stats object before doing anything with it. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public BatteryStatsImpl getActiveStatistics() { 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStats; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public byte[] getStatistics() { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.enforceCallingPermission( 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project android.Manifest.permission.BATTERY_STATS, null); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Log.i("foo", "SENDING BATTERY INFO:"); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //mStats.dumpLocked(new LogPrinter(Log.INFO, "foo")); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Parcel out = Parcel.obtain(); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.writeToParcel(out, 0); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] data = out.marshall(); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.recycle(); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return data; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void noteStartWakelock(int uid, String name, int type) { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.getUidStatsLocked(uid).noteStartWakeLocked(name, type); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void noteStopWakelock(int uid, String name, int type) { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.getUidStatsLocked(uid).noteStopWakeLocked(name, type); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void noteStartSensor(int uid, int sensor) { 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.getUidStatsLocked(uid).noteStartSensor(sensor); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void noteStopSensor(int uid, int sensor) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.getUidStatsLocked(uid).noteStopSensor(sensor); 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void noteStartGps(int uid) { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.noteStartGps(uid); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void noteStopGps(int uid) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.noteStopGps(uid); 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void noteScreenOn() { 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.noteScreenOnLocked(); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public void noteScreenBrightness(int brightness) { 140617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn enforceCallingPermission(); 141617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn synchronized (mStats) { 142617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn mStats.noteScreenBrightnessLocked(brightness); 143617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 144617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 145617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void noteScreenOff() { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.noteScreenOffLocked(); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 153617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public void noteInputEvent() { 154617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn enforceCallingPermission(); 155617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn synchronized (mStats) { 156617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn mStats.noteInputEventLocked(); 157617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 158617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 159617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 160617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public void noteUserActivity(int uid, int event) { 161617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn enforceCallingPermission(); 162617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn synchronized (mStats) { 163617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn mStats.noteUserActivityLocked(uid, event); 164617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 165617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn } 166617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void notePhoneOn() { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.notePhoneOnLocked(); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void notePhoneOff() { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStats.notePhoneOffLocked(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 180105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 181e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville public void notePhoneSignalStrength(SignalStrength signalStrength) { 182627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn enforceCallingPermission(); 183627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn synchronized (mStats) { 184e9b06d754af03faf27012fbed1e7559ec1ba7c79Wink Saville mStats.notePhoneSignalStrengthLocked(signalStrength); 185627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 186627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 187627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 188627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn public void notePhoneDataConnectionState(int dataType, boolean hasData) { 189627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn enforceCallingPermission(); 190627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn synchronized (mStats) { 191627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn mStats.notePhoneDataConnectionStateLocked(dataType, hasData); 192627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 193627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn } 194627bba736d022c39696b7c582a6af5592d2b8c33Dianne Hackborn 195617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public void noteWifiOn(int uid) { 196105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project enforceCallingPermission(); 197105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project synchronized (mStats) { 198617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn mStats.noteWifiOnLocked(uid); 199105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 200105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 201105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 202617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn public void noteWifiOff(int uid) { 203105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project enforceCallingPermission(); 204105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project synchronized (mStats) { 205617f877c06c82584a38f41bb60d836e08c5e3bdaDianne Hackborn mStats.noteWifiOffLocked(uid); 206105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 207105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 208d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 209d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood public void noteWifiRunning() { 210d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood enforceCallingPermission(); 211d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood synchronized (mStats) { 212d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood mStats.noteWifiRunningLocked(); 213d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood } 214d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood } 215d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 216d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood public void noteWifiStopped() { 217d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood enforceCallingPermission(); 218d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood synchronized (mStats) { 219d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood mStats.noteWifiStoppedLocked(); 220d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood } 221d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood } 222d4c5f8919b0522bcaab41a5863c313fec52d3a79Eric Shienbrood 223105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void noteBluetoothOn() { 224105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project enforceCallingPermission(); 225105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project synchronized (mStats) { 226105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mStats.noteBluetoothOnLocked(); 227105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 228105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 229105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 230105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void noteBluetoothOff() { 231105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project enforceCallingPermission(); 232105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project synchronized (mStats) { 233105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mStats.noteBluetoothOffLocked(); 234105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 235105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 236105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 237105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void noteFullWifiLockAcquired(int uid) { 238105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project enforceCallingPermission(); 239105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project synchronized (mStats) { 240105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mStats.noteFullWifiLockAcquiredLocked(uid); 241105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 242105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 243105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 244105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void noteFullWifiLockReleased(int uid) { 245105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project enforceCallingPermission(); 246105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project synchronized (mStats) { 247105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mStats.noteFullWifiLockReleasedLocked(uid); 248105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 249105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 250105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 251105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void noteScanWifiLockAcquired(int uid) { 252105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project enforceCallingPermission(); 253105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project synchronized (mStats) { 254105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mStats.noteScanWifiLockAcquiredLocked(uid); 255105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 256105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 257105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project 258105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void noteScanWifiLockReleased(int uid) { 259105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project enforceCallingPermission(); 260105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project synchronized (mStats) { 261105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mStats.noteScanWifiLockReleasedLocked(uid); 262105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 263105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project } 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2655347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public void noteWifiMulticastEnabled(int uid) { 2665347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt enforceCallingPermission(); 2675347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt synchronized (mStats) { 2685347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt mStats.noteWifiMulticastEnabledLocked(uid); 2695347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt } 2705347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt } 2715347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt 2725347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt public void noteWifiMulticastDisabled(int uid) { 2735347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt enforceCallingPermission(); 2745347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt synchronized (mStats) { 2755347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt mStats.noteWifiMulticastDisabledLocked(uid); 2765347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt } 2775347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt } 2785347bd4cda2b6afc18f8acab48e52131f35ed13cRobert Greenwalt 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isOnBattery() { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStats.isOnBattery(); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 283105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project public void setOnBattery(boolean onBattery, int level) { 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enforceCallingPermission(); 285105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project mStats.setOnBattery(onBattery, level); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 288633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar public void recordCurrentLevel(int level) { 289633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar enforceCallingPermission(); 290633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar mStats.recordCurrentLevel(level); 291633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar } 292633a1740ce5951ccb5d478ba2795f6f4fada1646Evan Millar 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getAwakeTimeBattery() { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.enforceCallingOrSelfPermission( 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project android.Manifest.permission.BATTERY_STATS, null); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStats.getAwakeTimeBattery(); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getAwakeTimePlugged() { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.enforceCallingOrSelfPermission( 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project android.Manifest.permission.BATTERY_STATS, null); 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mStats.getAwakeTimePlugged(); 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void enforceCallingPermission() { 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Binder.getCallingPid() == Process.myPid()) { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mContext.enforcePermission(android.Manifest.permission.UPDATE_DEVICE_STATS, 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Binder.getCallingPid(), Binder.getCallingUid(), null); 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (mStats) { 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isCheckin = false; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (args != null) { 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (String arg : args) { 3196447ca30b8e41c22c7214f201120327057e356dcDianne Hackborn if ("--checkin".equals(arg)) { 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project isCheckin = true; 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isCheckin) mStats.dumpCheckinLocked(pw, args); 3261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn else mStats.dumpLocked(pw); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 330