sf: Clear FrameBuffer only if there are GLES composed layers
Clear FrameBuffer Target only if there are layers to be composed by
GLES. Otherwise, it results unnecessary gl calls and increases power
consumption in full MDP comp use cases
Change-Id: Ib84c4fe154bb67668e4e8b8ce2f2328c55aed7c6
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index d6140dd..0d5f579 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2196,20 +2196,23 @@
hw->eglSwapPreserved(false);
}
// DrawWormHole/Any Draw has to be within startTile & EndTile
- if (hasHwcComposition) {
- if(mCanUseGpuTileRender && !mUnionDirtyRect.isEmpty()) {
- const Rect& scissor(mUnionDirtyRect);
- engine.setScissor(scissor.left, hw->getHeight()- scissor.bottom,
- scissor.getWidth(), scissor.getHeight());
- engine.clearWithColor(0, 0, 0, 0);
- engine.disableScissor();
+ if (hasGlesComposition) {
+ if (hasHwcComposition) {
+ if(mCanUseGpuTileRender && !mUnionDirtyRect.isEmpty()) {
+ const Rect& scissor(mUnionDirtyRect);
+ engine.setScissor(scissor.left,
+ hw->getHeight()- scissor.bottom,
+ scissor.getWidth(), scissor.getHeight());
+ engine.clearWithColor(0, 0, 0, 0);
+ engine.disableScissor();
+ } else {
+ engine.clearWithColor(0, 0, 0, 0);
+ }
} else {
- engine.clearWithColor(0, 0, 0, 0);
- }
- } else {
- if (cur->getCompositionType() != HWC_BLIT &&
- !clearRegion.isEmpty()){
- drawWormhole(hw, clearRegion);
+ if (cur->getCompositionType() != HWC_BLIT &&
+ !clearRegion.isEmpty()) {
+ drawWormhole(hw, clearRegion);
+ }
}
}
}