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

View File

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