summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2013-12-17 22:06:50 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2013-12-17 22:06:51 +0000
commit274cc85dcb255185838705a91dba00efa52bf436 (patch)
tree6376a6e510582d2834f03e03e9fa0dd6f30d9c53
parentf81f7a52d4720f441197f75918d2b2c05d41ab45 (diff)
parent25cb85cd3c96c28f64aae52f9c66c76773aa124c (diff)
downloadframeworks_av-274cc85dcb255185838705a91dba00efa52bf436.zip
frameworks_av-274cc85dcb255185838705a91dba00efa52bf436.tar.gz
frameworks_av-274cc85dcb255185838705a91dba00efa52bf436.tar.bz2
Merge "libstagefright: Delay release of wakelock in TimedEventQueue"
-rw-r--r--media/libstagefright/TimedEventQueue.cpp13
-rw-r--r--media/libstagefright/include/TimedEventQueue.h2
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);