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