summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MediaCodec.cpp
diff options
context:
space:
mode:
authorRuben Brunk <rubenbrunk@google.com>2015-05-26 17:25:07 -0700
committerRuben Brunk <rubenbrunk@google.com>2015-06-01 16:53:45 -0700
commit99e69716215cd0665379bc90d708f2ea8689831d (patch)
treed013b8e9273ea6032ddf24ba701eccb755b672bb /media/libstagefright/MediaCodec.cpp
parent4a95e69406aa2e9896d865962d6d947ebbdac6fc (diff)
downloadframeworks_av-99e69716215cd0665379bc90d708f2ea8689831d.zip
frameworks_av-99e69716215cd0665379bc90d708f2ea8689831d.tar.gz
frameworks_av-99e69716215cd0665379bc90d708f2ea8689831d.tar.bz2
Track camera and flashlight usage in battery stats.
Bug: 15986092 Change-Id: I9dc6828332e4091fd93bf2d82839e8e3862a2fc2
Diffstat (limited to 'media/libstagefright/MediaCodec.cpp')
-rw-r--r--media/libstagefright/MediaCodec.cpp130
1 files changed, 1 insertions, 129 deletions
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index 46c154d..c8dcef1 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -21,7 +21,6 @@
#include "include/avc_utils.h"
#include "include/SoftwareRenderer.h"
-#include <binder/IBatteryStats.h>
#include <binder/IMemory.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
@@ -47,6 +46,7 @@
#include <media/stagefright/OMXCodec.h>
#include <media/stagefright/PersistentSurface.h>
#include <media/stagefright/SurfaceUtils.h>
+#include <mediautils/BatteryNotifier.h>
#include <private/android_filesystem_config.h>
#include <utils/Log.h>
#include <utils/Singleton.h>
@@ -107,134 +107,6 @@ private:
DISALLOW_EVIL_CONSTRUCTORS(ResourceManagerClient);
};
-struct MediaCodec::BatteryNotifier : public Singleton<BatteryNotifier> {
- BatteryNotifier();
- virtual ~BatteryNotifier();
-
- void noteStartVideo();
- void noteStopVideo();
- void noteStartAudio();
- void noteStopAudio();
- void onBatteryStatServiceDied();
-
-private:
- struct DeathNotifier : public IBinder::DeathRecipient {
- DeathNotifier() {}
- virtual void binderDied(const wp<IBinder>& /*who*/) {
- BatteryNotifier::getInstance().onBatteryStatServiceDied();
- }
- };
-
- Mutex mLock;
- int32_t mVideoRefCount;
- int32_t mAudioRefCount;
- sp<IBatteryStats> mBatteryStatService;
- sp<DeathNotifier> mDeathNotifier;
-
- sp<IBatteryStats> getBatteryService_l();
-
- DISALLOW_EVIL_CONSTRUCTORS(BatteryNotifier);
-};
-
-ANDROID_SINGLETON_STATIC_INSTANCE(MediaCodec::BatteryNotifier)
-
-MediaCodec::BatteryNotifier::BatteryNotifier() :
- mVideoRefCount(0),
- mAudioRefCount(0) {
-}
-
-sp<IBatteryStats> MediaCodec::BatteryNotifier::getBatteryService_l() {
- if (mBatteryStatService != NULL) {
- return mBatteryStatService;
- }
- // get battery service from service manager
- const sp<IServiceManager> sm(defaultServiceManager());
- if (sm != NULL) {
- const String16 name("batterystats");
- mBatteryStatService =
- interface_cast<IBatteryStats>(sm->getService(name));
- if (mBatteryStatService == NULL) {
- ALOGE("batterystats service unavailable!");
- return NULL;
- }
- mDeathNotifier = new DeathNotifier();
- IInterface::asBinder(mBatteryStatService)->linkToDeath(mDeathNotifier);
- // notify start now if media already started
- if (mVideoRefCount > 0) {
- mBatteryStatService->noteStartVideo(AID_MEDIA);
- }
- if (mAudioRefCount > 0) {
- mBatteryStatService->noteStartAudio(AID_MEDIA);
- }
- }
- return mBatteryStatService;
-}
-
-MediaCodec::BatteryNotifier::~BatteryNotifier() {
- if (mDeathNotifier != NULL) {
- IInterface::asBinder(mBatteryStatService)->
- unlinkToDeath(mDeathNotifier);
- }
-}
-
-void MediaCodec::BatteryNotifier::noteStartVideo() {
- Mutex::Autolock _l(mLock);
- sp<IBatteryStats> batteryService = getBatteryService_l();
- if (mVideoRefCount == 0 && batteryService != NULL) {
- batteryService->noteStartVideo(AID_MEDIA);
- }
- mVideoRefCount++;
-}
-
-void MediaCodec::BatteryNotifier::noteStopVideo() {
- Mutex::Autolock _l(mLock);
- if (mVideoRefCount == 0) {
- ALOGW("BatteryNotifier::noteStop(): video refcount is broken!");
- return;
- }
-
- sp<IBatteryStats> batteryService = getBatteryService_l();
-
- mVideoRefCount--;
- if (mVideoRefCount == 0 && batteryService != NULL) {
- batteryService->noteStopVideo(AID_MEDIA);
- }
-}
-
-void MediaCodec::BatteryNotifier::noteStartAudio() {
- Mutex::Autolock _l(mLock);
- sp<IBatteryStats> batteryService = getBatteryService_l();
- if (mAudioRefCount == 0 && batteryService != NULL) {
- batteryService->noteStartAudio(AID_MEDIA);
- }
- mAudioRefCount++;
-}
-
-void MediaCodec::BatteryNotifier::noteStopAudio() {
- Mutex::Autolock _l(mLock);
- if (mAudioRefCount == 0) {
- ALOGW("BatteryNotifier::noteStop(): audio refcount is broken!");
- return;
- }
-
- sp<IBatteryStats> batteryService = getBatteryService_l();
-
- mAudioRefCount--;
- if (mAudioRefCount == 0 && batteryService != NULL) {
- batteryService->noteStopAudio(AID_MEDIA);
- }
-}
-
-void MediaCodec::BatteryNotifier::onBatteryStatServiceDied() {
- Mutex::Autolock _l(mLock);
- mBatteryStatService.clear();
- mDeathNotifier.clear();
- // Do not reset mVideoRefCount and mAudioRefCount here. The ref
- // counting is independent of the battery service availability.
- // We need this if battery service becomes available after media
- // started.
-}
-
MediaCodec::ResourceManagerServiceProxy::ResourceManagerServiceProxy() {
}