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

Commit c099400b authored by Leon Scroggins III's avatar Leon Scroggins III Committed by Alec Mouri
Browse files

Output::presentFrameAndReleaseLayers: flush pending commands for OFF displays

Most work from this method can be skipped if the display is not enabled.
However, uncaching buffers should still occur. If the display is
disabled and there are buffers to uncache, still flush pending commands.
They should only contain commands that are meaningful for a disabled
display, like bufferSlotsToClear.

Bug: 330806421
Test: libcompositionengine_test
Flag: flush_buffer_slots_to_uncache
Change-Id: I7baa3e76af86329fb266395e63e92a0ba38967f4
(cherry picked from commit a3ba7fa4)
Merged-In: I7baa3e76af86329fb266395e63e92a0ba38967f4
parent 3b468eca
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -306,7 +306,7 @@ protected:
    virtual void finishFrame(GpuCompositionResult&&) = 0;
    virtual void finishFrame(GpuCompositionResult&&) = 0;
    virtual std::optional<base::unique_fd> composeSurfaces(
    virtual std::optional<base::unique_fd> composeSurfaces(
            const Region&, std::shared_ptr<renderengine::ExternalTexture>, base::unique_fd&) = 0;
            const Region&, std::shared_ptr<renderengine::ExternalTexture>, base::unique_fd&) = 0;
    virtual void presentFrameAndReleaseLayers() = 0;
    virtual void presentFrameAndReleaseLayers(bool flushEvenWhenDisabled) = 0;
    virtual void renderCachedSets(const CompositionRefreshArgs&) = 0;
    virtual void renderCachedSets(const CompositionRefreshArgs&) = 0;
    virtual bool chooseCompositionStrategy(
    virtual bool chooseCompositionStrategy(
            std::optional<android::HWComposer::DeviceRequestedChanges>*) = 0;
            std::optional<android::HWComposer::DeviceRequestedChanges>*) = 0;
@@ -314,6 +314,7 @@ protected:
            const std::optional<android::HWComposer::DeviceRequestedChanges>& changes) = 0;
            const std::optional<android::HWComposer::DeviceRequestedChanges>& changes) = 0;
    virtual bool getSkipColorTransform() const = 0;
    virtual bool getSkipColorTransform() const = 0;
    virtual FrameFences presentFrame() = 0;
    virtual FrameFences presentFrame() = 0;
    virtual void executeCommands() = 0;
    virtual std::vector<LayerFE::LayerSettings> generateClientCompositionRequests(
    virtual std::vector<LayerFE::LayerSettings> generateClientCompositionRequests(
            bool supportsProtectedContent, ui::Dataspace outputDataspace,
            bool supportsProtectedContent, ui::Dataspace outputDataspace,
            std::vector<LayerFE*> &outLayerRef) = 0;
            std::vector<LayerFE*> &outLayerRef) = 0;
+1 −0
Original line number Original line Diff line number Diff line
@@ -60,6 +60,7 @@ public:
    void applyCompositionStrategy(const std::optional<DeviceRequestedChanges>&) override;
    void applyCompositionStrategy(const std::optional<DeviceRequestedChanges>&) override;
    bool getSkipColorTransform() const override;
    bool getSkipColorTransform() const override;
    compositionengine::Output::FrameFences presentFrame() override;
    compositionengine::Output::FrameFences presentFrame() override;
    void executeCommands() override;
    void setExpensiveRenderingExpected(bool) override;
    void setExpensiveRenderingExpected(bool) override;
    void finishFrame(GpuCompositionResult&&) override;
    void finishFrame(GpuCompositionResult&&) override;
    bool supportsOffloadPresent() const override;
    bool supportsOffloadPresent() const override;
+4 −2
Original line number Original line Diff line number Diff line
@@ -104,7 +104,7 @@ public:
    std::optional<base::unique_fd> composeSurfaces(const Region&,
    std::optional<base::unique_fd> composeSurfaces(const Region&,
                                                   std::shared_ptr<renderengine::ExternalTexture>,
                                                   std::shared_ptr<renderengine::ExternalTexture>,
                                                   base::unique_fd&) override;
                                                   base::unique_fd&) override;
    void presentFrameAndReleaseLayers() override;
    void presentFrameAndReleaseLayers(bool flushEvenWhenDisabled) override;
    void renderCachedSets(const CompositionRefreshArgs&) override;
    void renderCachedSets(const CompositionRefreshArgs&) override;
    void cacheClientCompositionRequests(uint32_t) override;
    void cacheClientCompositionRequests(uint32_t) override;
    bool canPredictCompositionStrategy(const CompositionRefreshArgs&) override;
    bool canPredictCompositionStrategy(const CompositionRefreshArgs&) override;
@@ -123,7 +123,8 @@ public:
    virtual std::future<bool> chooseCompositionStrategyAsync(
    virtual std::future<bool> chooseCompositionStrategyAsync(
            std::optional<android::HWComposer::DeviceRequestedChanges>*);
            std::optional<android::HWComposer::DeviceRequestedChanges>*);
    virtual void resetCompositionStrategy();
    virtual void resetCompositionStrategy();
    virtual ftl::Future<std::monostate> presentFrameAndReleaseLayersAsync();
    virtual ftl::Future<std::monostate> presentFrameAndReleaseLayersAsync(
            bool flushEvenWhenDisabled);


protected:
protected:
    std::unique_ptr<compositionengine::OutputLayer> createOutputLayer(const sp<LayerFE>&) const;
    std::unique_ptr<compositionengine::OutputLayer> createOutputLayer(const sp<LayerFE>&) const;
@@ -137,6 +138,7 @@ protected:
    void applyCompositionStrategy(const std::optional<DeviceRequestedChanges>&) override{};
    void applyCompositionStrategy(const std::optional<DeviceRequestedChanges>&) override{};
    bool getSkipColorTransform() const override;
    bool getSkipColorTransform() const override;
    compositionengine::Output::FrameFences presentFrame() override;
    compositionengine::Output::FrameFences presentFrame() override;
    void executeCommands() override {}
    virtual renderengine::DisplaySettings generateClientCompositionDisplaySettings(
    virtual renderengine::DisplaySettings generateClientCompositionDisplaySettings(
            const std::shared_ptr<renderengine::ExternalTexture>& buffer) const;
            const std::shared_ptr<renderengine::ExternalTexture>& buffer) const;
    std::vector<LayerFE::LayerSettings> generateClientCompositionRequests(
    std::vector<LayerFE::LayerSettings> generateClientCompositionRequests(
+2 −1
Original line number Original line Diff line number Diff line
@@ -121,9 +121,10 @@ public:
                                                base::unique_fd&));
                                                base::unique_fd&));
    MOCK_CONST_METHOD0(getSkipColorTransform, bool());
    MOCK_CONST_METHOD0(getSkipColorTransform, bool());


    MOCK_METHOD0(presentFrameAndReleaseLayers, void());
    MOCK_METHOD(void, presentFrameAndReleaseLayers, (bool flushEvenWhenDisabled));
    MOCK_METHOD1(renderCachedSets, void(const CompositionRefreshArgs&));
    MOCK_METHOD1(renderCachedSets, void(const CompositionRefreshArgs&));
    MOCK_METHOD0(presentFrame, compositionengine::Output::FrameFences());
    MOCK_METHOD0(presentFrame, compositionengine::Output::FrameFences());
    MOCK_METHOD(void, executeCommands, ());


    MOCK_METHOD3(generateClientCompositionRequests,
    MOCK_METHOD3(generateClientCompositionRequests,
                 std::vector<LayerFE::LayerSettings>(bool, ui::Dataspace, std::vector<compositionengine::LayerFE*>&));
                 std::vector<LayerFE::LayerSettings>(bool, ui::Dataspace, std::vector<compositionengine::LayerFE*>&));
+9 −0
Original line number Original line Diff line number Diff line
@@ -365,6 +365,15 @@ void Display::applyClientTargetRequests(const ClientTargetProperty& clientTarget
            static_cast<ui::PixelFormat>(clientTargetProperty.clientTargetProperty.pixelFormat));
            static_cast<ui::PixelFormat>(clientTargetProperty.clientTargetProperty.pixelFormat));
}
}


void Display::executeCommands() {
    const auto halDisplayIdOpt = HalDisplayId::tryCast(mId);
    if (mIsDisconnected || !halDisplayIdOpt) {
        return;
    }

    getCompositionEngine().getHwComposer().executeCommands(*halDisplayIdOpt);
}

compositionengine::Output::FrameFences Display::presentFrame() {
compositionengine::Output::FrameFences Display::presentFrame() {
    auto fences = impl::Output::presentFrame();
    auto fences = impl::Output::presentFrame();


Loading