diff options
author | Bernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org> | 2013-07-25 13:27:18 +0530 |
---|---|---|
committer | Amit Pundir <amit.pundir@linaro.org> | 2013-11-03 04:38:07 +0530 |
commit | 783947ca5d528721c6193f485ee7a26e7d9d2b5f (patch) | |
tree | 8d9183682b57261026069842b12d07b4494d20f5 | |
parent | c7852e74b946172fd9c645b73fa77e2797a52840 (diff) | |
download | native-783947ca5d528721c6193f485ee7a26e7d9d2b5f.tar.gz |
surfaceflinger: Don't crash on missing functions in hwcomposers
Some hwcomposers -- most notably hwcomposer.default.so -- don't
implement blank() or eventControl().
Don't crash when trying to use them.
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 2469f0cf61..b992932ec8 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -493,7 +493,7 @@ void HWComposer::eventControl(int disp, int event, int enabled) { const int32_t oldValue = mDisplayData[disp].events & eventBit; if (newValue != oldValue) { ATRACE_CALL(); - err = mHwc->eventControl(mHwc, disp, event, enabled); + err = mHwc->eventControl ? mHwc->eventControl(mHwc, disp, event, enabled) : NO_ERROR; if (!err) { int32_t& events(mDisplayData[disp].events); events = (events & ~eventBit) | newValue; @@ -731,14 +731,15 @@ status_t HWComposer::release(int disp) { LOG_FATAL_IF(disp >= VIRTUAL_DISPLAY_ID_BASE); if (mHwc) { eventControl(disp, HWC_EVENT_VSYNC, 0); - return (status_t)mHwc->blank(mHwc, disp, 1); + if (mHwc->blank) + return (status_t)mHwc->blank(mHwc, disp, 1); } return NO_ERROR; } status_t HWComposer::acquire(int disp) { LOG_FATAL_IF(disp >= VIRTUAL_DISPLAY_ID_BASE); - if (mHwc) { + if (mHwc && mHwc->blank) { return (status_t)mHwc->blank(mHwc, disp, 0); } return NO_ERROR; |