OSDN Git Service

Reduce failure uncertainty
authorAndy McFadden <fadden@android.com>
Tue, 11 Sep 2012 22:15:13 +0000 (15:15 -0700)
committerAndy McFadden <fadden@android.com>
Tue, 11 Sep 2012 22:15:13 +0000 (15:15 -0700)
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: 71455217147557
Change-Id: I548f6a9caa9f0bd5710aaecea0e1c6c7c8f2f281

services/surfaceflinger/DisplayHardware/HWComposer.cpp
services/surfaceflinger/SurfaceFlinger.cpp

index 5c125c8..75b8ad8 100644 (file)
@@ -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,
index cb2c8c0..058ba45 100644 (file)
@@ -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<IBinder>& token(mDefaultDisplays[type]);