Loading services/surfaceflinger/SurfaceFlinger.cpp +18 −10 Original line number Original line Diff line number Diff line Loading @@ -5822,6 +5822,7 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, fillLayer.alpha = half(alpha); fillLayer.alpha = half(alpha); clientCompositionLayers.push_back(fillLayer); clientCompositionLayers.push_back(fillLayer); std::vector<Layer*> renderedLayers; Region clearRegion = Region::INVALID_REGION; Region clearRegion = Region::INVALID_REGION; traverseLayers([&](Layer* layer) { traverseLayers([&](Layer* layer) { const bool supportProtectedContent = false; const bool supportProtectedContent = false; Loading @@ -5840,19 +5841,19 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, }; }; std::vector<compositionengine::LayerFE::LayerSettings> results = std::vector<compositionengine::LayerFE::LayerSettings> results = layer->prepareClientCompositionList(targetSettings); layer->prepareClientCompositionList(targetSettings); if (results.size() > 0) { clientCompositionLayers.insert(clientCompositionLayers.end(), clientCompositionLayers.insert(clientCompositionLayers.end(), std::make_move_iterator(results.begin()), std::make_move_iterator(results.begin()), std::make_move_iterator(results.end())); std::make_move_iterator(results.end())); results.clear(); renderedLayers.push_back(layer); } }); }); std::vector<const renderengine::LayerSettings*> clientCompositionLayerPointers; std::vector<const renderengine::LayerSettings*> clientCompositionLayerPointers( clientCompositionLayers.reserve(clientCompositionLayers.size()); clientCompositionLayers.size()); std::transform(clientCompositionLayers.begin(), clientCompositionLayers.end(), std::transform(clientCompositionLayers.begin(), clientCompositionLayers.end(), std::back_inserter(clientCompositionLayerPointers), clientCompositionLayerPointers.begin(), [](compositionengine::LayerFE::LayerSettings& settings) std::pointer_traits<renderengine::LayerSettings*>::pointer_to); -> renderengine::LayerSettings* { return &settings; }); clientCompositionDisplay.clearRegion = clearRegion; clientCompositionDisplay.clearRegion = clearRegion; // Use an empty fence for the buffer fence, since we just created the buffer so // Use an empty fence for the buffer fence, since we just created the buffer so Loading @@ -5864,6 +5865,13 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, /*useFramebufferCache=*/false, std::move(bufferFence), &drawFence); /*useFramebufferCache=*/false, std::move(bufferFence), &drawFence); *outSyncFd = drawFence.release(); *outSyncFd = drawFence.release(); if (*outSyncFd >= 0) { sp<Fence> releaseFence = new Fence(dup(*outSyncFd)); for (auto* layer : renderedLayers) { layer->onLayerDisplayed(releaseFence); } } } } status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea, status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea, Loading Loading
services/surfaceflinger/SurfaceFlinger.cpp +18 −10 Original line number Original line Diff line number Diff line Loading @@ -5822,6 +5822,7 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, fillLayer.alpha = half(alpha); fillLayer.alpha = half(alpha); clientCompositionLayers.push_back(fillLayer); clientCompositionLayers.push_back(fillLayer); std::vector<Layer*> renderedLayers; Region clearRegion = Region::INVALID_REGION; Region clearRegion = Region::INVALID_REGION; traverseLayers([&](Layer* layer) { traverseLayers([&](Layer* layer) { const bool supportProtectedContent = false; const bool supportProtectedContent = false; Loading @@ -5840,19 +5841,19 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, }; }; std::vector<compositionengine::LayerFE::LayerSettings> results = std::vector<compositionengine::LayerFE::LayerSettings> results = layer->prepareClientCompositionList(targetSettings); layer->prepareClientCompositionList(targetSettings); if (results.size() > 0) { clientCompositionLayers.insert(clientCompositionLayers.end(), clientCompositionLayers.insert(clientCompositionLayers.end(), std::make_move_iterator(results.begin()), std::make_move_iterator(results.begin()), std::make_move_iterator(results.end())); std::make_move_iterator(results.end())); results.clear(); renderedLayers.push_back(layer); } }); }); std::vector<const renderengine::LayerSettings*> clientCompositionLayerPointers; std::vector<const renderengine::LayerSettings*> clientCompositionLayerPointers( clientCompositionLayers.reserve(clientCompositionLayers.size()); clientCompositionLayers.size()); std::transform(clientCompositionLayers.begin(), clientCompositionLayers.end(), std::transform(clientCompositionLayers.begin(), clientCompositionLayers.end(), std::back_inserter(clientCompositionLayerPointers), clientCompositionLayerPointers.begin(), [](compositionengine::LayerFE::LayerSettings& settings) std::pointer_traits<renderengine::LayerSettings*>::pointer_to); -> renderengine::LayerSettings* { return &settings; }); clientCompositionDisplay.clearRegion = clearRegion; clientCompositionDisplay.clearRegion = clearRegion; // Use an empty fence for the buffer fence, since we just created the buffer so // Use an empty fence for the buffer fence, since we just created the buffer so Loading @@ -5864,6 +5865,13 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, /*useFramebufferCache=*/false, std::move(bufferFence), &drawFence); /*useFramebufferCache=*/false, std::move(bufferFence), &drawFence); *outSyncFd = drawFence.release(); *outSyncFd = drawFence.release(); if (*outSyncFd >= 0) { sp<Fence> releaseFence = new Fence(dup(*outSyncFd)); for (auto* layer : renderedLayers) { layer->onLayerDisplayed(releaseFence); } } } } status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea, status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea, Loading