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