From 4801404dcb7990e4753dad0d07de5f6dbc01dbdb Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Thu, 22 Sep 2011 20:57:04 -0700 Subject: [PATCH] don't clear the framebuffer when the framebuffer is not used when areas of the FB are undefined (transparent windows on top of nothing), we clear those areas before composition. however, it makes no sense to do this when the FB is not in use (case where hwc handles all layers) Bug: 5360529 Change-Id: I761a7d3664228ebbee0944aca8b0cc278fc94c9c --- services/surfaceflinger/SurfaceFlinger.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 0ef03bb7d..2be6d1889 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -986,19 +986,20 @@ void SurfaceFlinger::setupHardwareComposer(Region& dirtyInOut) void SurfaceFlinger::composeSurfaces(const Region& dirty) { - if (UNLIKELY(!mWormholeRegion.isEmpty())) { + const DisplayHardware& hw(graphicPlane(0).displayHardware()); + HWComposer& hwc(hw.getHwComposer()); + + const size_t fbLayerCount = hwc.getLayerCount(HWC_FRAMEBUFFER); + if (UNLIKELY(fbLayerCount && !mWormholeRegion.isEmpty())) { // should never happen unless the window manager has a bug // draw something... drawWormhole(); } - const DisplayHardware& hw(graphicPlane(0).displayHardware()); - HWComposer& hwc(hw.getHwComposer()); - hwc_layer_t* const cur(hwc.getLayers()); - /* * and then, render the layers targeted at the framebuffer */ + hwc_layer_t* const cur(hwc.getLayers()); const Vector< sp >& layers(mVisibleLayersSortedByZ); size_t count = layers.size(); for (size_t i=0 ; i