am 33ad0f9e: Merge change I0e44976a into eclair

Merge commit '33ad0f9ec8d47660b16ced45242a45f369fe2547' into eclair-mr2

* commit '33ad0f9ec8d47660b16ced45242a45f369fe2547':
  fix [2297155] SurfaceFlinger's freeze-timeout doesn't work
This commit is contained in:
Mathias Agopian
2009-12-02 09:47:48 -08:00
committed by Android Git Automerger
2 changed files with 22 additions and 13 deletions

View File

@ -417,9 +417,9 @@ void SurfaceFlinger::waitForEvent()
{
while (true) {
nsecs_t timeout = -1;
const nsecs_t freezeDisplayTimeout = ms2ns(5000);
if (UNLIKELY(isFrozen())) {
// wait 5 seconds
const nsecs_t freezeDisplayTimeout = ms2ns(5000);
const nsecs_t now = systemTime();
if (mFreezeDisplayTime == 0) {
mFreezeDisplayTime = now;
@ -429,23 +429,27 @@ void SurfaceFlinger::waitForEvent()
}
MessageList::value_type msg = mEventQueue.waitMessage(timeout);
// see if we timed out
if (isFrozen()) {
const nsecs_t now = systemTime();
nsecs_t frozenTime = (now - mFreezeDisplayTime);
if (frozenTime >= freezeDisplayTimeout) {
// we timed out and are still frozen
LOGW("timeout expired mFreezeDisplay=%d, mFreezeCount=%d",
mFreezeDisplay, mFreezeCount);
mFreezeDisplayTime = 0;
mFreezeCount = 0;
mFreezeDisplay = false;
}
}
if (msg != 0) {
mFreezeDisplayTime = 0;
switch (msg->what) {
case MessageQueue::INVALIDATE:
// invalidate message, just return to the main loop
return;
}
} else {
// we timed out
if (isFrozen()) {
// we timed out and are still frozen
LOGW("timeout expired mFreezeDisplay=%d, mFreezeCount=%d",
mFreezeDisplay, mFreezeCount);
mFreezeCount = 0;
mFreezeDisplay = false;
return;
}
}
}
}
@ -1646,6 +1650,7 @@ status_t SurfaceFlinger::onTransact(
}
case 1007: // set mFreezeCount
mFreezeCount = data.readInt32();
mFreezeDisplayTime = 0;
return NO_ERROR;
case 1010: // interrogate.
reply->writeInt32(0);

View File

@ -291,7 +291,11 @@ private:
friend class FreezeLock;
sp<FreezeLock> getFreezeLock() const;
inline void incFreezeCount() { mFreezeCount++; }
inline void incFreezeCount() {
if (mFreezeCount == 0)
mFreezeDisplayTime = 0;
mFreezeCount++;
}
inline void decFreezeCount() { if (mFreezeCount > 0) mFreezeCount--; }
inline bool hasFreezeRequest() const { return mFreezeDisplay; }
inline bool isFrozen() const {