summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy McFadden <fadden@android.com>2012-10-19 12:53:46 -0700
committerAndy McFadden <fadden@android.com>2012-10-19 12:53:46 -0700
commit620685c2e684082c82657732d1e35cefd0c79006 (patch)
treec7dc94dd672723d29f9925b955b8f7ce94ae8039
parent60393d45207b6548e1f61ca104fa59aecee87d30 (diff)
downloadnative-620685c2e684082c82657732d1e35cefd0c79006.tar.gz
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.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index d9bda11fce..31d731eae3 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;