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:
@ -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);
|
||||
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user