Loading services/surfaceflinger/CompositionEngine/Android.bp +5 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,10 @@ cc_defaults { "libtonemap", "libtrace_proto", "libaidlcommonsupport", "libprocessgroup", "libcgrouprc", "libjsoncpp", "libcgrouprc_format", ], header_libs: [ "android.hardware.graphics.composer@2.1-command-buffer", Loading Loading @@ -69,6 +73,7 @@ cc_library { "src/DisplayColorProfile.cpp", "src/DisplaySurface.cpp", "src/DumpHelpers.cpp", "src/HwcAsyncWorker.cpp", "src/HwcBufferCache.cpp", "src/LayerFECompositionState.cpp", "src/Output.cpp", Loading services/surfaceflinger/CompositionEngine/include/compositionengine/DisplaySurface.h +3 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,9 @@ public: virtual void resizeBuffers(const ui::Size&) = 0; virtual const sp<Fence>& getClientTargetAcquireFence() const = 0; // Returns true if the render surface supports client composition prediction. virtual bool supportsCompositionStrategyPrediction() const; }; } // namespace compositionengine Loading services/surfaceflinger/CompositionEngine/include/compositionengine/Output.h +18 −3 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #include <utils/Vector.h> #include <ui/DisplayIdentification.h> #include "DisplayHardware/HWComposer.h" namespace android { Loading @@ -54,6 +55,7 @@ struct LayerFECompositionState; namespace impl { struct OutputCompositionState; struct GpuCompositionResult; } // namespace impl /** Loading Loading @@ -262,6 +264,9 @@ public: // Latches the front-end layer state for each output layer virtual void updateLayerStateFromFE(const CompositionRefreshArgs&) const = 0; // Enables predicting composition strategy to run client composition earlier virtual void setPredictCompositionStrategy(bool) = 0; protected: virtual void setDisplayColorProfile(std::unique_ptr<DisplayColorProfile>) = 0; virtual void setRenderSurface(std::unique_ptr<RenderSurface>) = 0; Loading @@ -278,13 +283,22 @@ protected: virtual void updateColorProfile(const CompositionRefreshArgs&) = 0; virtual void beginFrame() = 0; virtual void prepareFrame() = 0; using GpuCompositionResult = compositionengine::impl::GpuCompositionResult; // Runs prepare frame in another thread while running client composition using // the previous frame's composition strategy. virtual GpuCompositionResult prepareFrameAsync(const CompositionRefreshArgs&) = 0; virtual void devOptRepaintFlash(const CompositionRefreshArgs&) = 0; virtual void finishFrame(const CompositionRefreshArgs&) = 0; virtual void finishFrame(const CompositionRefreshArgs&, GpuCompositionResult&&) = 0; virtual std::optional<base::unique_fd> composeSurfaces( const Region&, const compositionengine::CompositionRefreshArgs& refreshArgs) = 0; const Region&, const compositionengine::CompositionRefreshArgs&, std::shared_ptr<renderengine::ExternalTexture>, base::unique_fd&) = 0; virtual void postFramebuffer() = 0; virtual void renderCachedSets(const CompositionRefreshArgs&) = 0; virtual void chooseCompositionStrategy() = 0; virtual bool chooseCompositionStrategy( std::optional<android::HWComposer::DeviceRequestedChanges>*) = 0; virtual void applyCompositionStrategy( const std::optional<android::HWComposer::DeviceRequestedChanges>& changes) = 0; virtual bool getSkipColorTransform() const = 0; virtual FrameFences presentAndGetFrameFences() = 0; virtual std::vector<LayerFE::LayerSettings> generateClientCompositionRequests( Loading @@ -295,6 +309,7 @@ protected: std::vector<LayerFE::LayerSettings>& clientCompositionLayers) = 0; virtual void setExpensiveRenderingExpected(bool enabled) = 0; virtual void cacheClientCompositionRequests(uint32_t cacheSize) = 0; virtual bool canPredictCompositionStrategy(const CompositionRefreshArgs&) = 0; }; } // namespace compositionengine Loading services/surfaceflinger/CompositionEngine/include/compositionengine/RenderSurface.h +3 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,9 @@ public: // Debugging - gets the page flip count for the RenderSurface virtual std::uint32_t getPageFlipCount() const = 0; // Returns true if the render surface supports client composition prediction. virtual bool supportsCompositionStrategyPrediction() const = 0; }; } // namespace compositionengine Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h +8 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <compositionengine/DisplayColorProfile.h> #include <compositionengine/DisplayCreationArgs.h> #include <compositionengine/RenderSurface.h> #include <compositionengine/impl/GpuCompositionResult.h> #include <compositionengine/impl/Output.h> #include <ui/PixelFormat.h> #include <ui/Size.h> Loading Loading @@ -51,11 +52,16 @@ public: void setReleasedLayers(const CompositionRefreshArgs&) override; void setColorTransform(const CompositionRefreshArgs&) override; void setColorProfile(const ColorProfile&) override; void chooseCompositionStrategy() override; void beginFrame() override; using DeviceRequestedChanges = android::HWComposer::DeviceRequestedChanges; bool chooseCompositionStrategy( std::optional<android::HWComposer::DeviceRequestedChanges>*) override; void applyCompositionStrategy(const std::optional<DeviceRequestedChanges>&) override; bool getSkipColorTransform() const override; compositionengine::Output::FrameFences presentAndGetFrameFences() override; void setExpensiveRenderingExpected(bool) override; void finishFrame(const CompositionRefreshArgs&) override; void finishFrame(const CompositionRefreshArgs&, GpuCompositionResult&&) override; // compositionengine::Display overrides DisplayId getId() const override; Loading @@ -72,7 +78,6 @@ public: using DisplayRequests = android::HWComposer::DeviceRequestedChanges::DisplayRequests; using LayerRequests = android::HWComposer::DeviceRequestedChanges::LayerRequests; using ClientTargetProperty = android::HWComposer::DeviceRequestedChanges::ClientTargetProperty; virtual bool anyLayersRequireClientComposition() const; virtual bool allLayersRequireClientComposition() const; virtual void applyChangedTypesToLayers(const ChangedTypes&); virtual void applyDisplayRequests(const DisplayRequests&); Loading Loading
services/surfaceflinger/CompositionEngine/Android.bp +5 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,10 @@ cc_defaults { "libtonemap", "libtrace_proto", "libaidlcommonsupport", "libprocessgroup", "libcgrouprc", "libjsoncpp", "libcgrouprc_format", ], header_libs: [ "android.hardware.graphics.composer@2.1-command-buffer", Loading Loading @@ -69,6 +73,7 @@ cc_library { "src/DisplayColorProfile.cpp", "src/DisplaySurface.cpp", "src/DumpHelpers.cpp", "src/HwcAsyncWorker.cpp", "src/HwcBufferCache.cpp", "src/LayerFECompositionState.cpp", "src/Output.cpp", Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/DisplaySurface.h +3 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,9 @@ public: virtual void resizeBuffers(const ui::Size&) = 0; virtual const sp<Fence>& getClientTargetAcquireFence() const = 0; // Returns true if the render surface supports client composition prediction. virtual bool supportsCompositionStrategyPrediction() const; }; } // namespace compositionengine Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/Output.h +18 −3 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #include <utils/Vector.h> #include <ui/DisplayIdentification.h> #include "DisplayHardware/HWComposer.h" namespace android { Loading @@ -54,6 +55,7 @@ struct LayerFECompositionState; namespace impl { struct OutputCompositionState; struct GpuCompositionResult; } // namespace impl /** Loading Loading @@ -262,6 +264,9 @@ public: // Latches the front-end layer state for each output layer virtual void updateLayerStateFromFE(const CompositionRefreshArgs&) const = 0; // Enables predicting composition strategy to run client composition earlier virtual void setPredictCompositionStrategy(bool) = 0; protected: virtual void setDisplayColorProfile(std::unique_ptr<DisplayColorProfile>) = 0; virtual void setRenderSurface(std::unique_ptr<RenderSurface>) = 0; Loading @@ -278,13 +283,22 @@ protected: virtual void updateColorProfile(const CompositionRefreshArgs&) = 0; virtual void beginFrame() = 0; virtual void prepareFrame() = 0; using GpuCompositionResult = compositionengine::impl::GpuCompositionResult; // Runs prepare frame in another thread while running client composition using // the previous frame's composition strategy. virtual GpuCompositionResult prepareFrameAsync(const CompositionRefreshArgs&) = 0; virtual void devOptRepaintFlash(const CompositionRefreshArgs&) = 0; virtual void finishFrame(const CompositionRefreshArgs&) = 0; virtual void finishFrame(const CompositionRefreshArgs&, GpuCompositionResult&&) = 0; virtual std::optional<base::unique_fd> composeSurfaces( const Region&, const compositionengine::CompositionRefreshArgs& refreshArgs) = 0; const Region&, const compositionengine::CompositionRefreshArgs&, std::shared_ptr<renderengine::ExternalTexture>, base::unique_fd&) = 0; virtual void postFramebuffer() = 0; virtual void renderCachedSets(const CompositionRefreshArgs&) = 0; virtual void chooseCompositionStrategy() = 0; virtual bool chooseCompositionStrategy( std::optional<android::HWComposer::DeviceRequestedChanges>*) = 0; virtual void applyCompositionStrategy( const std::optional<android::HWComposer::DeviceRequestedChanges>& changes) = 0; virtual bool getSkipColorTransform() const = 0; virtual FrameFences presentAndGetFrameFences() = 0; virtual std::vector<LayerFE::LayerSettings> generateClientCompositionRequests( Loading @@ -295,6 +309,7 @@ protected: std::vector<LayerFE::LayerSettings>& clientCompositionLayers) = 0; virtual void setExpensiveRenderingExpected(bool enabled) = 0; virtual void cacheClientCompositionRequests(uint32_t cacheSize) = 0; virtual bool canPredictCompositionStrategy(const CompositionRefreshArgs&) = 0; }; } // namespace compositionengine Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/RenderSurface.h +3 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,9 @@ public: // Debugging - gets the page flip count for the RenderSurface virtual std::uint32_t getPageFlipCount() const = 0; // Returns true if the render surface supports client composition prediction. virtual bool supportsCompositionStrategyPrediction() const = 0; }; } // namespace compositionengine Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h +8 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <compositionengine/DisplayColorProfile.h> #include <compositionengine/DisplayCreationArgs.h> #include <compositionengine/RenderSurface.h> #include <compositionengine/impl/GpuCompositionResult.h> #include <compositionengine/impl/Output.h> #include <ui/PixelFormat.h> #include <ui/Size.h> Loading Loading @@ -51,11 +52,16 @@ public: void setReleasedLayers(const CompositionRefreshArgs&) override; void setColorTransform(const CompositionRefreshArgs&) override; void setColorProfile(const ColorProfile&) override; void chooseCompositionStrategy() override; void beginFrame() override; using DeviceRequestedChanges = android::HWComposer::DeviceRequestedChanges; bool chooseCompositionStrategy( std::optional<android::HWComposer::DeviceRequestedChanges>*) override; void applyCompositionStrategy(const std::optional<DeviceRequestedChanges>&) override; bool getSkipColorTransform() const override; compositionengine::Output::FrameFences presentAndGetFrameFences() override; void setExpensiveRenderingExpected(bool) override; void finishFrame(const CompositionRefreshArgs&) override; void finishFrame(const CompositionRefreshArgs&, GpuCompositionResult&&) override; // compositionengine::Display overrides DisplayId getId() const override; Loading @@ -72,7 +78,6 @@ public: using DisplayRequests = android::HWComposer::DeviceRequestedChanges::DisplayRequests; using LayerRequests = android::HWComposer::DeviceRequestedChanges::LayerRequests; using ClientTargetProperty = android::HWComposer::DeviceRequestedChanges::ClientTargetProperty; virtual bool anyLayersRequireClientComposition() const; virtual bool allLayersRequireClientComposition() const; virtual void applyChangedTypesToLayers(const ChangedTypes&); virtual void applyDisplayRequests(const DisplayRequests&); Loading