Loading services/surfaceflinger/CompositionEngine/include/compositionengine/Output.h +6 −2 Original line number Diff line number Diff line Loading @@ -162,11 +162,15 @@ public: // Performs any debug related screen flashing due to the update virtual void devOptRepaintFlash(const CompositionRefreshArgs&) = 0; // Finishes the current frame on the output, performing client composition // and ensuring the content is displayed. virtual void finishFrame(const CompositionRefreshArgs&) = 0; // Performs client composition as needed for layers on the output. The // output fence is set to a fence to signal when client composition is // finished. // Returns false if client composition cannot be performed. virtual bool composeSurfaces(const Region& debugFence, base::unique_fd* outReadyFence) = 0; // Returns std::nullopt if client composition cannot be performed. virtual std::optional<base::unique_fd> composeSurfaces(const Region&) = 0; // Posts the new frame, and sets release fences. virtual void postFramebuffer() = 0; Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ public: bool getSkipColorTransform() const override; compositionengine::Output::FrameFences presentAndGetFrameFences() override; void setExpensiveRenderingExpected(bool) override; void finishFrame(const compositionengine::CompositionRefreshArgs&) override; // compositionengine::Display overrides const std::optional<DisplayId>& getId() const override; Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h +2 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,8 @@ public: void beginFrame() override; void prepareFrame() override; void devOptRepaintFlash(const compositionengine::CompositionRefreshArgs&) override; bool composeSurfaces(const Region&, base::unique_fd*) override; void finishFrame(const compositionengine::CompositionRefreshArgs&) override; std::optional<base::unique_fd> composeSurfaces(const Region&) override; void postFramebuffer() override; // Testing Loading services/surfaceflinger/CompositionEngine/include/compositionengine/mock/Output.h +3 −1 Original line number Diff line number Diff line Loading @@ -80,7 +80,9 @@ public: MOCK_METHOD1(devOptRepaintFlash, void(const compositionengine::CompositionRefreshArgs&)); MOCK_METHOD2(composeSurfaces, bool(const Region&, base::unique_fd*)); MOCK_METHOD1(finishFrame, void(const compositionengine::CompositionRefreshArgs&)); MOCK_METHOD1(composeSurfaces, std::optional<base::unique_fd>(const Region&)); MOCK_CONST_METHOD0(getSkipColorTransform, bool()); MOCK_METHOD0(postFramebuffer, void()); Loading services/surfaceflinger/CompositionEngine/src/Display.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <android-base/stringprintf.h> #include <compositionengine/CompositionEngine.h> #include <compositionengine/CompositionRefreshArgs.h> #include <compositionengine/DisplayCreationArgs.h> #include <compositionengine/DisplaySurface.h> #include <compositionengine/impl/Display.h> Loading Loading @@ -259,4 +260,19 @@ void Display::setExpensiveRenderingExpected(bool enabled) { } } void Display::finishFrame(const compositionengine::CompositionRefreshArgs& refreshArgs) { // We only need to actually compose the display if: // 1) It is being handled by hardware composer, which may need this to // keep its virtual display state machine in sync, or // 2) There is work to be done (the dirty region isn't empty) if (!mId) { if (getDirtyRegion(refreshArgs.repaintEverything).isEmpty()) { ALOGV("Skipping display composition"); return; } } impl::Output::finishFrame(refreshArgs); } } // namespace android::compositionengine::impl Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/Output.h +6 −2 Original line number Diff line number Diff line Loading @@ -162,11 +162,15 @@ public: // Performs any debug related screen flashing due to the update virtual void devOptRepaintFlash(const CompositionRefreshArgs&) = 0; // Finishes the current frame on the output, performing client composition // and ensuring the content is displayed. virtual void finishFrame(const CompositionRefreshArgs&) = 0; // Performs client composition as needed for layers on the output. The // output fence is set to a fence to signal when client composition is // finished. // Returns false if client composition cannot be performed. virtual bool composeSurfaces(const Region& debugFence, base::unique_fd* outReadyFence) = 0; // Returns std::nullopt if client composition cannot be performed. virtual std::optional<base::unique_fd> composeSurfaces(const Region&) = 0; // Posts the new frame, and sets release fences. virtual void postFramebuffer() = 0; Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Display.h +1 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ public: bool getSkipColorTransform() const override; compositionengine::Output::FrameFences presentAndGetFrameFences() override; void setExpensiveRenderingExpected(bool) override; void finishFrame(const compositionengine::CompositionRefreshArgs&) override; // compositionengine::Display overrides const std::optional<DisplayId>& getId() const override; Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/Output.h +2 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,8 @@ public: void beginFrame() override; void prepareFrame() override; void devOptRepaintFlash(const compositionengine::CompositionRefreshArgs&) override; bool composeSurfaces(const Region&, base::unique_fd*) override; void finishFrame(const compositionengine::CompositionRefreshArgs&) override; std::optional<base::unique_fd> composeSurfaces(const Region&) override; void postFramebuffer() override; // Testing Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/mock/Output.h +3 −1 Original line number Diff line number Diff line Loading @@ -80,7 +80,9 @@ public: MOCK_METHOD1(devOptRepaintFlash, void(const compositionengine::CompositionRefreshArgs&)); MOCK_METHOD2(composeSurfaces, bool(const Region&, base::unique_fd*)); MOCK_METHOD1(finishFrame, void(const compositionengine::CompositionRefreshArgs&)); MOCK_METHOD1(composeSurfaces, std::optional<base::unique_fd>(const Region&)); MOCK_CONST_METHOD0(getSkipColorTransform, bool()); MOCK_METHOD0(postFramebuffer, void()); Loading
services/surfaceflinger/CompositionEngine/src/Display.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ #include <android-base/stringprintf.h> #include <compositionengine/CompositionEngine.h> #include <compositionengine/CompositionRefreshArgs.h> #include <compositionengine/DisplayCreationArgs.h> #include <compositionengine/DisplaySurface.h> #include <compositionengine/impl/Display.h> Loading Loading @@ -259,4 +260,19 @@ void Display::setExpensiveRenderingExpected(bool enabled) { } } void Display::finishFrame(const compositionengine::CompositionRefreshArgs& refreshArgs) { // We only need to actually compose the display if: // 1) It is being handled by hardware composer, which may need this to // keep its virtual display state machine in sync, or // 2) There is work to be done (the dirty region isn't empty) if (!mId) { if (getDirtyRegion(refreshArgs.repaintEverything).isEmpty()) { ALOGV("Skipping display composition"); return; } } impl::Output::finishFrame(refreshArgs); } } // namespace android::compositionengine::impl