Merge "SF could get stuck waiting for vsync when turning the screen off" into jb-dev

This commit is contained in:
Jeff Brown 2012-06-15 15:30:35 -07:00 committed by Android (Google) Code Review
commit 7c24b1d4da

View File

@ -60,7 +60,7 @@ status_t EventThread::registerDisplayEventConnection(
const sp<EventThread::Connection>& connection) {
Mutex::Autolock _l(mLock);
mDisplayEventConnections.add(connection);
mCondition.signal();
mCondition.broadcast();
return NO_ERROR;
}
@ -68,7 +68,7 @@ status_t EventThread::unregisterDisplayEventConnection(
const wp<EventThread::Connection>& connection) {
Mutex::Autolock _l(mLock);
mDisplayEventConnections.remove(connection);
mCondition.signal();
mCondition.broadcast();
return NO_ERROR;
}
@ -85,7 +85,7 @@ void EventThread::setVsyncRate(uint32_t count,
const int32_t new_count = (count == 0) ? -1 : count;
if (connection->count != new_count) {
connection->count = new_count;
mCondition.signal();
mCondition.broadcast();
}
}
}
@ -95,32 +95,33 @@ void EventThread::requestNextVsync(
Mutex::Autolock _l(mLock);
if (connection->count < 0) {
connection->count = 0;
mCondition.signal();
mCondition.broadcast();
}
}
void EventThread::onScreenReleased() {
Mutex::Autolock _l(mLock);
// wait for an eventual pending vsync to be serviced
if (!mUseSoftwareVSync) {
while (mVSyncTimestamp) {
mCondition.wait(mLock);
}
}
// disable reliance on h/w vsync
mUseSoftwareVSync = true;
mCondition.broadcast();
}
}
void EventThread::onScreenAcquired() {
Mutex::Autolock _l(mLock);
if (mUseSoftwareVSync) {
// resume use of h/w vsync
mUseSoftwareVSync = false;
mCondition.broadcast();
}
}
void EventThread::onVSyncReceived(int, nsecs_t timestamp) {
Mutex::Autolock _l(mLock);
mVSyncTimestamp = timestamp;
mCondition.signal();
mCondition.broadcast();
}
bool EventThread::threadLoop() {