From 43601a2dc320a271ff8c3765ff61414a07221635 Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Tue, 11 Sep 2012 15:15:13 -0700 Subject: [PATCH] Reduce failure uncertainty This adds a trivial workaround for a one-shot boot time crash, plus an explicit check and abort for a failure condition that currently presents as a less obvious failure. Bug: 7145521, 7147557 Change-Id: I548f6a9caa9f0bd5710aaecea0e1c6c7c8f2f281 --- services/surfaceflinger/DisplayHardware/HWComposer.cpp | 6 ++++++ services/surfaceflinger/SurfaceFlinger.cpp | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 5c125c807..75b8ad836 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -111,6 +111,12 @@ HWComposer::HWComposer( loadFbHalModule(); loadHwcModule(); + if (!hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_1) && !mFbDev) { + ALOGE("ERROR: failed to open framebuffer, aborting"); + // FB mandatory on <= 1.0, give up + abort(); + } + if (mHwc) { ALOGI("Using %s version %u.%u", HWC_HARDWARE_COMPOSER, (hwcApiVersion(mHwc) >> 24) & 0xff, diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index cb2c8c033..058ba45a4 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -618,6 +618,13 @@ bool SurfaceFlinger::threadLoop() { } void SurfaceFlinger::onVSyncReceived(int type, nsecs_t timestamp) { + if (mEventThread == NULL) { + // This is a temporary workaround for b/7145521. A non-null pointer + // does not mean EventThread has finished initializing, so this + // is not a correct fix. + ALOGW("WARNING: EventThread not started, ignoring vsync"); + return; + } if (uint32_t(type) < DisplayDevice::NUM_DISPLAY_TYPES) { // we should only receive DisplayDevice::DisplayType from the vsync callback const wp& token(mDefaultDisplays[type]);