summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Rosenkraenzer <Bernhard.Rosenkranzer@linaro.org>2013-07-25 13:27:18 +0530
committerUbuntu <vishal.bhoj@linaro.org>2014-06-05 09:54:02 +0000
commit7404729b5fdbab2ab07b519632d53820c50f4efa (patch)
treec52123976c0c0e93dbc1a1d8b7f24e71827ab349
parent6e0d7bf1520137bc0d40bf370764f0bbbf4d8824 (diff)
downloadnative-7404729b5fdbab2ab07b519632d53820c50f4efa.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.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index c7d1a903e4..7f9fb2fd6c 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;