diff options
author | Eric Laurent <elaurent@google.com> | 2013-12-17 14:11:15 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-12-17 14:11:15 -0800 |
commit | 35da47e5d55392e6adbc97efaf181cb1dd259c04 (patch) | |
tree | b1c0460d0518b4a13e980371fc82824555d26f57 | |
parent | e4301da6b830b8ae3e27b6f095c1a96bed0b69ac (diff) | |
parent | 274cc85dcb255185838705a91dba00efa52bf436 (diff) | |
download | frameworks_av-35da47e5d55392e6adbc97efaf181cb1dd259c04.zip frameworks_av-35da47e5d55392e6adbc97efaf181cb1dd259c04.tar.gz frameworks_av-35da47e5d55392e6adbc97efaf181cb1dd259c04.tar.bz2 |
am 274cc85d: Merge "libstagefright: Delay release of wakelock in TimedEventQueue"
* commit '274cc85dcb255185838705a91dba00efa52bf436':
libstagefright: Delay release of wakelock in TimedEventQueue
-rw-r--r-- | media/libstagefright/TimedEventQueue.cpp | 13 | ||||
-rw-r--r-- | media/libstagefright/include/TimedEventQueue.h | 2 |
2 files changed, 9 insertions, 6 deletions
diff --git a/media/libstagefright/TimedEventQueue.cpp b/media/libstagefright/TimedEventQueue.cpp index 1a9a26b..dedd186 100644 --- a/media/libstagefright/TimedEventQueue.cpp +++ b/media/libstagefright/TimedEventQueue.cpp @@ -217,6 +217,7 @@ void TimedEventQueue::threadEntry() { for (;;) { int64_t now_us = 0; sp<Event> event; + bool wakeLocked = false; { Mutex::Autolock autoLock(mLock); @@ -283,26 +284,28 @@ void TimedEventQueue::threadEntry() { // removeEventFromQueue_l will return NULL. // Otherwise, the QueueItem will be removed // from the queue and the referenced event returned. - event = removeEventFromQueue_l(eventID); + event = removeEventFromQueue_l(eventID, &wakeLocked); } if (event != NULL) { // Fire event with the lock NOT held. event->fire(this, now_us); + if (wakeLocked) { + Mutex::Autolock autoLock(mLock); + releaseWakeLock_l(); + } } } } sp<TimedEventQueue::Event> TimedEventQueue::removeEventFromQueue_l( - event_id id) { + event_id id, bool *wakeLocked) { for (List<QueueItem>::iterator it = mQueue.begin(); it != mQueue.end(); ++it) { if ((*it).event->eventID() == id) { sp<Event> event = (*it).event; event->setEventID(0); - if ((*it).has_wakelock) { - releaseWakeLock_l(); - } + *wakeLocked = (*it).has_wakelock; mQueue.erase(it); return event; } diff --git a/media/libstagefright/include/TimedEventQueue.h b/media/libstagefright/include/TimedEventQueue.h index 38a08b1..3e84256 100644 --- a/media/libstagefright/include/TimedEventQueue.h +++ b/media/libstagefright/include/TimedEventQueue.h @@ -145,7 +145,7 @@ private: static void *ThreadWrapper(void *me); void threadEntry(); - sp<Event> removeEventFromQueue_l(event_id id); + sp<Event> removeEventFromQueue_l(event_id id, bool *wakeLocked); void acquireWakeLock_l(); void releaseWakeLock_l(bool force = false); |