summaryrefslogtreecommitdiffstats
path: root/services/surfaceflinger
diff options
context:
space:
mode:
authorAndy McFadden <fadden@android.com>2012-09-11 15:15:13 -0700
committerAndy McFadden <fadden@android.com>2012-09-11 15:15:13 -0700
commit43601a2dc320a271ff8c3765ff61414a07221635 (patch)
tree2030c8c6d6f7e5494a538bc72cfdc7c370943168 /services/surfaceflinger
parentb0d1dd36f104c0b581674adc7f830cbf44b7db06 (diff)
downloadframeworks_native-43601a2dc320a271ff8c3765ff61414a07221635.zip
frameworks_native-43601a2dc320a271ff8c3765ff61414a07221635.tar.gz
frameworks_native-43601a2dc320a271ff8c3765ff61414a07221635.tar.bz2
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
Diffstat (limited to 'services/surfaceflinger')
-rw-r--r--services/surfaceflinger/DisplayHardware/HWComposer.cpp6
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp7
2 files changed, 13 insertions, 0 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 5c125c8..75b8ad8 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 cb2c8c0..058ba45 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<IBinder>& token(mDefaultDisplays[type]);