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
This commit is contained in:
Mathias Agopian 2013-03-11 20:47:24 -07:00
parent 2aee1b01b7
commit b7a5b05b53

View File

@ -2708,17 +2708,19 @@ status_t SurfaceFlinger::captureScreenImplLocked(
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT);
const Vector< sp<Layer> >& layers(hw->getVisibleLayersSortedByZ());
const LayerVector& layers( mDrawingState.layersSortedByZ );
const size_t count = layers.size();
for (size_t i=0 ; i<count ; ++i) {
const sp<Layer>& layer(layers[i]);
const uint32_t z = layer->drawingState().z;
if (z >= minLayerZ && z <= maxLayerZ) {
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);
}
}
}
// compositionComplete is needed for older driver
hw->compositionComplete();