diff options
author | Andy McFadden <fadden@android.com> | 2012-10-19 12:53:46 -0700 |
---|---|---|
committer | Andy McFadden <fadden@android.com> | 2012-10-19 12:53:46 -0700 |
commit | 620685c2e684082c82657732d1e35cefd0c79006 (patch) | |
tree | c7dc94dd672723d29f9925b955b8f7ce94ae8039 | |
parent | 60393d45207b6548e1f61ca104fa59aecee87d30 (diff) | |
download | frameworks_native-620685c2e684082c82657732d1e35cefd0c79006.zip frameworks_native-620685c2e684082c82657732d1e35cefd0c79006.tar.gz frameworks_native-620685c2e684082c82657732d1e35cefd0c79006.tar.bz2 |
Fix emulator vsync
The code that reserves display IDs was only run when a hardware
composer was present. The eventControl() function, which handles
enabling of vsync, was ignoring the request because the primary
display didn't appear in its set of allocated IDs. This moves
reservation of IDs for built-in displays outside the HWC-only block.
Also, added a couple of warnings in eventControl().
Bug 7376568
Change-Id: I185ccdf817a25499b5c2668f8f6d594afb8c1568
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index d9bda11..31d731e 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -128,6 +128,11 @@ HWComposer::HWComposer( abort(); } + // these display IDs are always reserved + for (size_t i=0 ; i<HWC_NUM_DISPLAY_TYPES ; i++) { + mAllocatedDisplayIDs.markBit(i); + } + if (mHwc) { ALOGI("Using %s version %u.%u", HWC_HARDWARE_COMPOSER, (hwcApiVersion(mHwc) >> 24) & 0xff, @@ -149,11 +154,6 @@ HWComposer::HWComposer( // always turn vsync off when we start eventControl(HWC_DISPLAY_PRIMARY, HWC_EVENT_VSYNC, 0); - // these IDs are always reserved - for (size_t i=0 ; i<HWC_NUM_DISPLAY_TYPES ; i++) { - mAllocatedDisplayIDs.markBit(i); - } - // the number of displays we actually have depends on the // hw composer version if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_2)) { @@ -445,6 +445,13 @@ bool HWComposer::isConnected(int disp) const { void HWComposer::eventControl(int disp, int event, int enabled) { if (uint32_t(disp)>31 || !mAllocatedDisplayIDs.hasBit(disp)) { + ALOGD("eventControl ignoring event %d on unallocated disp %d (en=%d)", + event, disp, enabled); + return; + } + if (event != EVENT_VSYNC) { + ALOGW("eventControl got unexpected event %d (disp=%d en=%d)", + event, disp, enabled); return; } status_t err = NO_ERROR; |