Loading services/surfaceflinger/LayerRenderArea.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -25,13 +25,14 @@ namespace android { LayerRenderArea::LayerRenderArea(sp<Layer> layer, const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers, const ui::Transform& layerTransform, const Rect& layerBufferSize, bool hintForSeamlessTransition) LayerRenderArea::LayerRenderArea(sp<Layer> layer, frontend::LayerSnapshot layerSnapshot, const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers, const ui::Transform& layerTransform, const Rect& layerBufferSize, bool hintForSeamlessTransition) : RenderArea(reqSize, CaptureFill::CLEAR, reqDataSpace, hintForSeamlessTransition, allowSecureLayers), mLayer(std::move(layer)), mLayerSnapshot(std::move(layerSnapshot)), mLayerBufferSize(layerBufferSize), mCrop(crop), mTransform(layerTransform) {} Loading services/surfaceflinger/LayerRenderArea.h +7 −4 Original line number Diff line number Diff line Loading @@ -32,19 +32,22 @@ class SurfaceFlinger; class LayerRenderArea : public RenderArea { public: LayerRenderArea(sp<Layer> layer, const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers, const ui::Transform& layerTransform, const Rect& layerBufferSize, bool hintForSeamlessTransition); LayerRenderArea(sp<Layer> layer, frontend::LayerSnapshot layerSnapshot, const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers, const ui::Transform& layerTransform, const Rect& layerBufferSize, bool hintForSeamlessTransition); const ui::Transform& getTransform() const override; bool isSecure() const override; sp<const DisplayDevice> getDisplayDevice() const override; Rect getSourceCrop() const override; virtual sp<Layer> getParentLayer() const { return mLayer; } sp<Layer> getParentLayer() const override { return mLayer; } const frontend::LayerSnapshot* getLayerSnapshot() const override { return &mLayerSnapshot; } private: const sp<Layer> mLayer; const frontend::LayerSnapshot mLayerSnapshot; const Rect mLayerBufferSize; const Rect mCrop; Loading services/surfaceflinger/RenderArea.h +6 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,8 @@ #include <ui/Transform.h> #include <functional> #include "FrontEnd/LayerSnapshot.h" #include "Layer.h" namespace android { Loading Loading @@ -82,6 +84,10 @@ public: // capture operation. virtual sp<Layer> getParentLayer() const { return nullptr; } // If this is a LayerRenderArea, return the layer snapshot // of the root layer of the capture operation virtual const frontend::LayerSnapshot* getLayerSnapshot() const { return nullptr; } // Returns whether the render result may be used for system animations that // must preserve the exact colors of the display. bool getHintForSeamlessTransition() const { return mHintForSeamlessTransition; } Loading services/surfaceflinger/RenderAreaBuilder.h +11 −7 Original line number Diff line number Diff line Loading @@ -83,9 +83,12 @@ struct LayerRenderAreaBuilder : RenderAreaBuilder { layer(layer), childrenOnly(childrenOnly) {} // Layer that the render area will be on // Root layer of the render area sp<Layer> layer; // Layer snapshot of the root layer frontend::LayerSnapshot layerSnapshot; // Transform to be applied on the layers to transform them // into the logical render area ui::Transform layerTransform{ui::Transform()}; Loading @@ -97,17 +100,18 @@ struct LayerRenderAreaBuilder : RenderAreaBuilder { bool childrenOnly; // Uses parent snapshot to determine layer transform and buffer size void setLayerInfo(const frontend::LayerSnapshot* parentSnapshot) { void setLayerSnapshot(const frontend::LayerSnapshot& parentSnapshot) { layerSnapshot = parentSnapshot; if (!childrenOnly) { layerTransform = parentSnapshot->localTransform.inverse(); layerTransform = parentSnapshot.localTransform.inverse(); } layerBufferSize = parentSnapshot->bufferSize; layerBufferSize = parentSnapshot.bufferSize; } std::unique_ptr<RenderArea> build() const override { return std::make_unique<LayerRenderArea>(layer, crop, reqSize, reqDataSpace, allowSecureLayers, layerTransform, layerBufferSize, hintForSeamlessTransition); return std::make_unique<LayerRenderArea>(layer, std::move(layerSnapshot), crop, reqSize, reqDataSpace, allowSecureLayers, layerTransform, layerBufferSize, hintForSeamlessTransition); } }; Loading services/surfaceflinger/SurfaceFlinger.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -8207,7 +8207,7 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot( ALOGW("Couldn't find layer snapshot for %d", layerRenderAreaBuilder->layer->getSequence()); } else { layerRenderAreaBuilder->setLayerInfo(snapshot); layerRenderAreaBuilder->setLayerSnapshot(*snapshot); } } Loading Loading @@ -8302,9 +8302,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl( Mutex::Autolock lock(mStateLock); const DisplayDevice* display = nullptr; if (parent) { const frontend::LayerSnapshot* snapshot = mLayerLifecycleManagerEnabled ? mLayerSnapshotBuilder.getSnapshot(parent->sequence) : parent->getLayerSnapshot(); const frontend::LayerSnapshot* snapshot = mLayerSnapshotBuilder.getSnapshot(parent->sequence); if (snapshot) { display = findDisplay([layerStack = snapshot->outputFilter.layerStack]( const auto& display) { Loading Loading
services/surfaceflinger/LayerRenderArea.cpp +5 −4 Original line number Diff line number Diff line Loading @@ -25,13 +25,14 @@ namespace android { LayerRenderArea::LayerRenderArea(sp<Layer> layer, const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers, const ui::Transform& layerTransform, const Rect& layerBufferSize, bool hintForSeamlessTransition) LayerRenderArea::LayerRenderArea(sp<Layer> layer, frontend::LayerSnapshot layerSnapshot, const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers, const ui::Transform& layerTransform, const Rect& layerBufferSize, bool hintForSeamlessTransition) : RenderArea(reqSize, CaptureFill::CLEAR, reqDataSpace, hintForSeamlessTransition, allowSecureLayers), mLayer(std::move(layer)), mLayerSnapshot(std::move(layerSnapshot)), mLayerBufferSize(layerBufferSize), mCrop(crop), mTransform(layerTransform) {} Loading
services/surfaceflinger/LayerRenderArea.h +7 −4 Original line number Diff line number Diff line Loading @@ -32,19 +32,22 @@ class SurfaceFlinger; class LayerRenderArea : public RenderArea { public: LayerRenderArea(sp<Layer> layer, const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers, const ui::Transform& layerTransform, const Rect& layerBufferSize, bool hintForSeamlessTransition); LayerRenderArea(sp<Layer> layer, frontend::LayerSnapshot layerSnapshot, const Rect& crop, ui::Size reqSize, ui::Dataspace reqDataSpace, bool allowSecureLayers, const ui::Transform& layerTransform, const Rect& layerBufferSize, bool hintForSeamlessTransition); const ui::Transform& getTransform() const override; bool isSecure() const override; sp<const DisplayDevice> getDisplayDevice() const override; Rect getSourceCrop() const override; virtual sp<Layer> getParentLayer() const { return mLayer; } sp<Layer> getParentLayer() const override { return mLayer; } const frontend::LayerSnapshot* getLayerSnapshot() const override { return &mLayerSnapshot; } private: const sp<Layer> mLayer; const frontend::LayerSnapshot mLayerSnapshot; const Rect mLayerBufferSize; const Rect mCrop; Loading
services/surfaceflinger/RenderArea.h +6 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,8 @@ #include <ui/Transform.h> #include <functional> #include "FrontEnd/LayerSnapshot.h" #include "Layer.h" namespace android { Loading Loading @@ -82,6 +84,10 @@ public: // capture operation. virtual sp<Layer> getParentLayer() const { return nullptr; } // If this is a LayerRenderArea, return the layer snapshot // of the root layer of the capture operation virtual const frontend::LayerSnapshot* getLayerSnapshot() const { return nullptr; } // Returns whether the render result may be used for system animations that // must preserve the exact colors of the display. bool getHintForSeamlessTransition() const { return mHintForSeamlessTransition; } Loading
services/surfaceflinger/RenderAreaBuilder.h +11 −7 Original line number Diff line number Diff line Loading @@ -83,9 +83,12 @@ struct LayerRenderAreaBuilder : RenderAreaBuilder { layer(layer), childrenOnly(childrenOnly) {} // Layer that the render area will be on // Root layer of the render area sp<Layer> layer; // Layer snapshot of the root layer frontend::LayerSnapshot layerSnapshot; // Transform to be applied on the layers to transform them // into the logical render area ui::Transform layerTransform{ui::Transform()}; Loading @@ -97,17 +100,18 @@ struct LayerRenderAreaBuilder : RenderAreaBuilder { bool childrenOnly; // Uses parent snapshot to determine layer transform and buffer size void setLayerInfo(const frontend::LayerSnapshot* parentSnapshot) { void setLayerSnapshot(const frontend::LayerSnapshot& parentSnapshot) { layerSnapshot = parentSnapshot; if (!childrenOnly) { layerTransform = parentSnapshot->localTransform.inverse(); layerTransform = parentSnapshot.localTransform.inverse(); } layerBufferSize = parentSnapshot->bufferSize; layerBufferSize = parentSnapshot.bufferSize; } std::unique_ptr<RenderArea> build() const override { return std::make_unique<LayerRenderArea>(layer, crop, reqSize, reqDataSpace, allowSecureLayers, layerTransform, layerBufferSize, hintForSeamlessTransition); return std::make_unique<LayerRenderArea>(layer, std::move(layerSnapshot), crop, reqSize, reqDataSpace, allowSecureLayers, layerTransform, layerBufferSize, hintForSeamlessTransition); } }; Loading
services/surfaceflinger/SurfaceFlinger.cpp +3 −4 Original line number Diff line number Diff line Loading @@ -8207,7 +8207,7 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::captureScreenshot( ALOGW("Couldn't find layer snapshot for %d", layerRenderAreaBuilder->layer->getSequence()); } else { layerRenderAreaBuilder->setLayerInfo(snapshot); layerRenderAreaBuilder->setLayerSnapshot(*snapshot); } } Loading Loading @@ -8302,9 +8302,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl( Mutex::Autolock lock(mStateLock); const DisplayDevice* display = nullptr; if (parent) { const frontend::LayerSnapshot* snapshot = mLayerLifecycleManagerEnabled ? mLayerSnapshotBuilder.getSnapshot(parent->sequence) : parent->getLayerSnapshot(); const frontend::LayerSnapshot* snapshot = mLayerSnapshotBuilder.getSnapshot(parent->sequence); if (snapshot) { display = findDisplay([layerStack = snapshot->outputFilter.layerStack]( const auto& display) { Loading