1a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn/* 2a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * Copyright (C) 2009 The Android Open Source Project 3a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * 4a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * you may not use this file except in compliance with the License. 6a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * You may obtain a copy of the License at 7a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * 8a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * 10a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * Unless required by applicable law or agreed to in writing, software 11a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * See the License for the specific language governing permissions and 14a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * limitations under the License. 15a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn */ 16a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackbornpackage com.android.internal.os; 17a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 18a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackbornimport android.os.BatteryStats.Uid; 19a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 205dad8068e251744ca38fd333c6543185f0c85b3cjackqdyuleiimport java.util.List; 215dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei 22a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn/** 23a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * Contains power usage of an application, system service, or hardware type. 24a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn */ 25a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackbornpublic class BatterySipper implements Comparable<BatterySipper> { 26a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public int userId; 27a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public Uid uidObj; 28a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public DrainType drainType; 2933dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski 30e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski /** 315dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * Smeared power from screen usage. 325dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * We split the screen usage power and smear them among apps, based on activity time. 335dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei */ 345dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei public double screenPowerMah; 355dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei 365dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei /** 375dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * Smeared power using proportional method. 385dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * 395dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * we smear power usage from hidden sippers to all apps proportionally.(except for screen usage) 405dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * 415dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * @see BatteryStatsHelper#shouldHideSipper(BatterySipper) 425dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * @see BatteryStatsHelper#removeHiddenBatterySippers(List) 435dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei */ 445dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei public double proportionalSmearMah; 455dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei 465dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei /** 475dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * Total power that adding the smeared power. 485dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * 495dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * @see #sumPower() 505dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei */ 515dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei public double totalSmearedPowerMah; 525dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei 535dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei /** 545dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * Total power before smearing 555dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei */ 565dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei public double totalPowerMah; 575dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei 585dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei /** 595dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * Whether we should hide this sipper 605dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * 615dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * @see BatteryStatsHelper#shouldHideSipper(BatterySipper) 625dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei */ 635dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei public boolean shouldHide; 645dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei 655dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei /** 66e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski * Generic usage time in milliseconds. 67e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski */ 68e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public long usageTimeMs; 69e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski 70e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski /** 71e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski * Generic power usage in mAh. 72e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski */ 73e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public double usagePowerMah; 74e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski 75e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski // Subsystem usage times. 76e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public long cpuTimeMs; 77e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public long gpsTimeMs; 78e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public long wifiRunningTimeMs; 79e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public long cpuFgTimeMs; 80e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public long wakeLockTimeMs; 815b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk public long cameraTimeMs; 825b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk public long flashlightTimeMs; 839f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski public long bluetoothRunningTimeMs; 8433dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski 85a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public long mobileRxPackets; 86a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public long mobileTxPackets; 87d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn public long mobileActive; 8877b987f1a1bb6028a871de01065b94c4cfff0b5cDianne Hackborn public int mobileActiveCount; 89d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn public double mobilemspp; // milliseconds per packet 90a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public long wifiRxPackets; 91a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public long wifiTxPackets; 92a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public long mobileRxBytes; 93a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public long mobileTxBytes; 94a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public long wifiRxBytes; 95a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public long wifiTxBytes; 969f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski public long btRxBytes; 979f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski public long btTxBytes; 98a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public double percent; 99a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public double noCoveragePercent; 100a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public String[] mPackages; 101a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public String packageWithHighestDrain; 102a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 10333dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski // Measured in mAh (milli-ampere per hour). 104e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski // These are included when summed. 105e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public double wifiPowerMah; 106e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public double cpuPowerMah; 107e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public double wakeLockPowerMah; 108e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public double mobileRadioPowerMah; 109e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public double gpsPowerMah; 110e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public double sensorPowerMah; 1115b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk public double cameraPowerMah; 1125b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk public double flashlightPowerMah; 1139f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski public double bluetoothPowerMah; 11433dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski 115a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public enum DrainType { 116a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn IDLE, 117a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn CELL, 118a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn PHONE, 119a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn WIFI, 120a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn BLUETOOTH, 121abc7c499133fe640d6ece2b28d43b52e66cdaa9aDianne Hackborn FLASHLIGHT, 122a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn SCREEN, 123a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn APP, 124a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn USER, 125a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn UNACCOUNTED, 1265b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk OVERCOUNTED, 1272dd7e5e3ef0a20864a5908fd8c0896776575d68aJames Carr CAMERA, 1282dd7e5e3ef0a20864a5908fd8c0896776575d68aJames Carr MEMORY 129a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 130a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 131e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public BatterySipper(DrainType drainType, Uid uid, double value) { 132e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski this.totalPowerMah = value; 133a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn this.drainType = drainType; 134a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn uidObj = uid; 135a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 136a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 137d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn public void computeMobilemspp() { 1385dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei long packets = mobileRxPackets + mobileTxPackets; 1395dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei mobilemspp = packets > 0 ? (mobileActive / (double) packets) : 0; 140d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn } 141d45665bf0b26fddf5716a0fd43036848d9301960Dianne Hackborn 142a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn @Override 143a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public int compareTo(BatterySipper other) { 144fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn // Over-counted always goes to the bottom. 145fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn if (drainType != other.drainType) { 146fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn if (drainType == DrainType.OVERCOUNTED) { 147fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn // This is "larger" 148fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn return 1; 149fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn } else if (other.drainType == DrainType.OVERCOUNTED) { 150fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn return -1; 151fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn } 152fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn } 153a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn // Return the flipped value because we want the items in descending order 154e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski return Double.compare(other.totalPowerMah, totalPowerMah); 155a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 156a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 157a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn /** 158a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn * Gets a list of packages associated with the current user 159a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn */ 160a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public String[] getPackages() { 161a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn return mPackages; 162a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 163a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn 164a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn public int getUid() { 165a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn // Bail out if the current sipper is not an App sipper. 166a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn if (uidObj == null) { 167a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn return 0; 168a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 169a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn return uidObj.getUid(); 170a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn } 17133dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski 17233dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski /** 17333dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski * Add stats from other to this BatterySipper. 17433dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski */ 17533dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski public void add(BatterySipper other) { 176e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski totalPowerMah += other.totalPowerMah; 177e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski usageTimeMs += other.usageTimeMs; 178e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski usagePowerMah += other.usagePowerMah; 179e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski cpuTimeMs += other.cpuTimeMs; 180e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski gpsTimeMs += other.gpsTimeMs; 181e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski wifiRunningTimeMs += other.wifiRunningTimeMs; 182e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski cpuFgTimeMs += other.cpuFgTimeMs; 183e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski wakeLockTimeMs += other.wakeLockTimeMs; 1845b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk cameraTimeMs += other.cameraTimeMs; 1855b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk flashlightTimeMs += other.flashlightTimeMs; 1869f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski bluetoothRunningTimeMs += other.bluetoothRunningTimeMs; 18733dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski mobileRxPackets += other.mobileRxPackets; 18833dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski mobileTxPackets += other.mobileTxPackets; 18933dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski mobileActive += other.mobileActive; 19033dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski mobileActiveCount += other.mobileActiveCount; 19133dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski wifiRxPackets += other.wifiRxPackets; 19233dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski wifiTxPackets += other.wifiTxPackets; 19333dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski mobileRxBytes += other.mobileRxBytes; 19433dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski mobileTxBytes += other.mobileTxBytes; 19533dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski wifiRxBytes += other.wifiRxBytes; 19633dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski wifiTxBytes += other.wifiTxBytes; 1979f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski btRxBytes += other.btRxBytes; 1989f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski btTxBytes += other.btTxBytes; 199e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski wifiPowerMah += other.wifiPowerMah; 200e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski gpsPowerMah += other.gpsPowerMah; 201e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski cpuPowerMah += other.cpuPowerMah; 202e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski sensorPowerMah += other.sensorPowerMah; 203e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski mobileRadioPowerMah += other.mobileRadioPowerMah; 204e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski wakeLockPowerMah += other.wakeLockPowerMah; 2055b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk cameraPowerMah += other.cameraPowerMah; 2065b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk flashlightPowerMah += other.flashlightPowerMah; 2079f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski bluetoothPowerMah += other.bluetoothPowerMah; 2085dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei screenPowerMah += other.screenPowerMah; 2095dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei proportionalSmearMah += other.proportionalSmearMah; 2105dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei totalSmearedPowerMah += other.totalSmearedPowerMah; 211e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski } 212e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski 213e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski /** 214e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski * Sum all the powers and store the value into `value`. 2155dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * Also sum the {@code smearedTotalPowerMah} by adding smeared powerMah. 2165dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei * 217e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski * @return the sum of all the power in this BatterySipper. 218e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski */ 219e08af19fcc7b13d526f3dfd24d58300947cf1146Adam Lesinski public double sumPower() { 2205dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei totalPowerMah = usagePowerMah + wifiPowerMah + gpsPowerMah + cpuPowerMah + 2215b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk sensorPowerMah + mobileRadioPowerMah + wakeLockPowerMah + cameraPowerMah + 2229f55cc71b9b0a27604d448b5c54e3c377b7a067fAdam Lesinski flashlightPowerMah + bluetoothPowerMah; 2235dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei totalSmearedPowerMah = totalPowerMah + screenPowerMah + proportionalSmearMah; 2245dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei 2255dad8068e251744ca38fd333c6543185f0c85b3cjackqdyulei return totalPowerMah; 22633dac5593519a3e9eb83550faf0d55f9f0caefdfAdam Lesinski } 227a7c837f043c1ca0bdecd42645ba7da8c5717566dDianne Hackborn} 228