diff options
author | Prashant Malani <pmalani@google.com> | 2014-05-25 01:36:31 -0700 |
---|---|---|
committer | Prashant Malani <pmalani@google.com> | 2014-06-05 16:35:52 -0700 |
commit | 2c9b11f0291210c9b9513a1a0cce6afebd361b3b (patch) | |
tree | 47ba276853c591e558553ee5e0eefabbc7db4625 /services/surfaceflinger/DisplayHardware | |
parent | edcf7f4d3ac452500d68e254d367f559d538695d (diff) | |
download | frameworks_native-2c9b11f0291210c9b9513a1a0cce6afebd361b3b.zip frameworks_native-2c9b11f0291210c9b9513a1a0cce6afebd361b3b.tar.gz frameworks_native-2c9b11f0291210c9b9513a1a0cce6afebd361b3b.tar.bz2 |
surfaceflinger: Replace blank/unblank with setPowerMode
We replace the blank/unblank calls in surfaceFlinger with a more generic
setPowerMode() routine.
Some displays support different power modes (for example, with reduced
color palettes). Depending on the use case we should be able to toggle
these modes, so as to achieve incremental power savings.
Initially, three power modes will be supported:
- HWC_POWER_MODE_OFF
- HWC_POWER_MODE_DOZE
- HWC_POWER_MODE_NORMAL
HWC_POWER_MODE_OFF will correspond to blanking the display, while
HWC_POWER_MODE_NORMAL will correspond to unblanking. HWC_POWER_MODE_DOZE
will put the display into a low power setting, if it is supported in
hardware.
If such a low power mode is not supported, it should be treated as a
call to set the mode to HWC_POWER_MODE_NORMAL.
As a consequence of adding the mPowerMode field, the mScreenAcquired is
no longer required, and thus references to it are removed and replaced
equivalent references to mPowerMode.
We also add the glue code to connect the services invocation of setting
a power mode and the HAL implementation in HWComposer.
Bug: 13472578
Change-Id: I431595ecf16d2f2c94259272db3dd42f29636204
Signed-off-by: Prashant Malani <pmalani@google.com>
Diffstat (limited to 'services/surfaceflinger/DisplayHardware')
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 21 | ||||
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.h | 7 |
2 files changed, 12 insertions, 16 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index c3b2159..185dab2 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -759,19 +759,18 @@ status_t HWComposer::commit() { return (status_t)err; } -status_t HWComposer::release(int disp) { +status_t HWComposer::setPowerMode(int disp, int mode) { LOG_FATAL_IF(disp >= VIRTUAL_DISPLAY_ID_BASE); if (mHwc) { - eventControl(disp, HWC_EVENT_VSYNC, 0); - 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) { - return (status_t)mHwc->blank(mHwc, disp, 0); + if (mode == HWC_POWER_MODE_OFF) { + eventControl(disp, HWC_EVENT_VSYNC, 0); + } + if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_4)) { + return (status_t)mHwc->setPowerMode(mHwc, disp, mode); + } else { + return (status_t)mHwc->blank(mHwc, disp, + mode == HWC_POWER_MODE_OFF ? 1 : 0); + } } return NO_ERROR; } diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h index 2f92672..c62b924 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -97,11 +97,8 @@ public: // commits the list status_t commit(); - // release hardware resources and blank screen - status_t release(int disp); - - // acquire hardware resources and unblank screen - status_t acquire(int disp); + // set power mode + status_t setPowerMode(int disp, int mode); // reset state when an external, non-virtual display is disconnected void disconnectDisplay(int disp); |