Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3d6988c authored by Lloyd Pique's avatar Lloyd Pique
Browse files

SF: Move/Refactor doComposition and doDisplayComposition to CompositionEngine

Test: atest libsurfaceflinger_unittest libcompositionengine_test
Test: atest CtsColorModeTestCases
Test: atest CtsDisplayTestCases
Test: atest CtsGraphicsTestCases
Test: atest CtsUiRenderingTestCases
Test: atest CtsViewTestCases
Test: atest android.media.cts.EncodeVirtualDisplayWithCompositionTest
Bug: 121291683

Change-Id: I6c796ec613ce163764a403bcd669dab38300f437
parent f8cf14d4
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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;
+2 −1
Original line number Diff line number Diff line
@@ -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
+3 −1
Original line number Diff line number Diff line
@@ -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());
+16 −0
Original line number Diff line number Diff line
@@ -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>
@@ -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