From b7a5b05b53b81cb24849c7e9934c941f64e05a42 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 11 Mar 2013 20:47:24 -0700 Subject: [PATCH] Fix missing recents screenshots We were using the "visible layer list" when taking screenshots, which doesn't work when a layer is behind other opaque layers and therefore hidden. We fix this by using the full layer list, filtered by the layerstack of the display we're looking at. Bug: 7552304 Change-Id: I4b6f77e5511aea94f8d218975b6e22738e7e5d5b --- services/surfaceflinger/SurfaceFlinger.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 5939dc85f..184f47e91 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -2708,15 +2708,17 @@ status_t SurfaceFlinger::captureScreenImplLocked( glClearColor(0,0,0,1); glClear(GL_COLOR_BUFFER_BIT); - const Vector< sp >& layers(hw->getVisibleLayersSortedByZ()); + const LayerVector& layers( mDrawingState.layersSortedByZ ); const size_t count = layers.size(); for (size_t i=0 ; i& layer(layers[i]); - const uint32_t z = layer->drawingState().z; - if (z >= minLayerZ && z <= maxLayerZ) { - if (filtering) layer->setFiltering(true); - layer->draw(hw); - if (filtering) layer->setFiltering(false); + const Layer::State& state(layer->drawingState()); + if (state.layerStack == hw->getLayerStack()) { + if (state.z >= minLayerZ && state.z <= maxLayerZ) { + if (filtering) layer->setFiltering(true); + layer->draw(hw); + if (filtering) layer->setFiltering(false); + } } }