15b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk/* 25b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * Copyright (C) 2015 The Android Open Source Project 35b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * 45b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * Licensed under the Apache License, Version 2.0 (the "License"); 55b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * you may not use this file except in compliance with the License. 65b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * You may obtain a copy of the License at 75b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * 85b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * http://www.apache.org/licenses/LICENSE-2.0 95b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * 105b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * Unless required by applicable law or agreed to in writing, software 115b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * distributed under the License is distributed on an "AS IS" BASIS, 125b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * See the License for the specific language governing permissions and 145b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * limitations under the License. 155b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk */ 165b1308f02d720808727af61863bd59c227d6fe02Ruben Brunkpackage com.android.internal.os; 175b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk 185b1308f02d720808727af61863bd59c227d6fe02Ruben Brunkimport android.os.BatteryStats; 195b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk 205b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk/** 215b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * Power calculator for the camera subsystem, excluding the flashlight. 225b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * 235b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk * Note: Power draw for the flash unit should be included in the FlashlightPowerCalculator. 245b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk */ 255b1308f02d720808727af61863bd59c227d6fe02Ruben Brunkpublic class CameraPowerCalculator extends PowerCalculator { 265b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk private final double mCameraPowerOnAvg; 275b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk 285b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk public CameraPowerCalculator(PowerProfile profile) { 295b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk mCameraPowerOnAvg = profile.getAveragePower(PowerProfile.POWER_CAMERA); 305b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk } 315b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk 325b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk @Override 335b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk public void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, 345b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk long rawUptimeUs, int statsType) { 355b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk 365b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk // Calculate camera power usage. Right now, this is a (very) rough estimate based on the 375b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk // average power usage for a typical camera application. 385b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk final BatteryStats.Timer timer = u.getCameraTurnedOnTimer(); 395b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk if (timer != null) { 405b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk final long totalTime = timer.getTotalTimeLocked(rawRealtimeUs, statsType) / 1000; 415b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk app.cameraTimeMs = totalTime; 425b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk app.cameraPowerMah = (totalTime * mCameraPowerOnAvg) / (1000*60*60); 435b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk } else { 445b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk app.cameraTimeMs = 0; 455b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk app.cameraPowerMah = 0; 465b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk } 475b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk } 485b1308f02d720808727af61863bd59c227d6fe02Ruben Brunk} 49