diff options
author | Jesse Hall <jessehall@google.com> | 2013-10-14 20:34:58 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-10-14 20:34:58 -0700 |
commit | a04fd39cb88bb6df5f639464f70795f58cd0aefa (patch) | |
tree | 3ccc246f14425b036349406a41393cdf1f36d1da | |
parent | 055558b257e893b50a7dff1d60f6ccc970abe46c (diff) | |
parent | 8e26b28be62e7c0e093900540db5e5cdcf52a0ff (diff) | |
download | frameworks_native-a04fd39cb88bb6df5f639464f70795f58cd0aefa.zip frameworks_native-a04fd39cb88bb6df5f639464f70795f58cd0aefa.tar.gz frameworks_native-a04fd39cb88bb6df5f639464f70795f58cd0aefa.tar.bz2 |
am 8e26b28b: Filter out vsync events from HWC with duplicate timestamps
* commit '8e26b28be62e7c0e093900540db5e5cdcf52a0ff':
Filter out vsync events from HWC with duplicate timestamps
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 179d956..2469f0c 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -284,13 +284,27 @@ void HWComposer::invalidate() { void HWComposer::vsync(int disp, int64_t timestamp) { if (uint32_t(disp) < HWC_NUM_PHYSICAL_DISPLAY_TYPES) { + { + Mutex::Autolock _l(mLock); + + // There have been reports of HWCs that signal several vsync events + // with the same timestamp when turning the display off and on. This + // is a bug in the HWC implementation, but filter the extra events + // out here so they don't cause havoc downstream. + if (timestamp == mLastHwVSync[disp]) { + ALOGW("Ignoring duplicate VSYNC event from HWC (t=%lld)", + timestamp); + return; + } + + mLastHwVSync[disp] = timestamp; + } + char tag[16]; snprintf(tag, sizeof(tag), "HW_VSYNC_%1u", disp); ATRACE_INT(tag, ++mVSyncCounts[disp] & 1); mEventHandler.onVSyncReceived(disp, timestamp); - Mutex::Autolock _l(mLock); - mLastHwVSync[disp] = timestamp; } } |