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

Commit 3eb1b21a authored by Lloyd Pique's avatar Lloyd Pique
Browse files

SF: Move/Refactor calculateWorkingSet to CompositionEngine

The functionality is made part of CompositionEngine::present()

Test: atest libsurfaceflinger_unittest libcompositionengine_test
Bug: 121291683
Change-Id: I0eb74f9fe8421468fbc1048aec23d7c91ce4f302
parent d7b429f6
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <compositionengine/Display.h>
#include <compositionengine/Layer.h>
#include <compositionengine/OutputColorSetting.h>
#include <math/mat4.h>

namespace android::compositionengine {

@@ -52,6 +53,16 @@ struct CompositionRefreshArgs {
    // Forces a color mode on the outputs being refreshed
    ui::ColorMode forceOutputColorMode{ui::ColorMode::NATIVE};

    // If true, there was a geometry update this frame
    bool updatingGeometryThisFrame{false};

    // The color matrix to use for this
    // frame. Only set if the color transform is changing this frame.
    std::optional<mat4> colorTransformMatrix;

    // If true, client composition is always used.
    bool devOptForceClientComposition{false};

    // If set, causes the dirty regions to flash with the delay
    std::optional<std::chrono::microseconds> devOptFlashDirtyRegionsDelay;
};
+13 −9
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@
#include <string>
#include <unordered_map>

#include <math/mat4.h>
#include <renderengine/LayerSettings.h>
#include <ui/Fence.h>
#include <ui/GraphicTypes.h>
@@ -44,6 +43,7 @@ class RenderSurface;
class OutputLayer;

struct CompositionRefreshArgs;
struct LayerFECompositionState;

namespace impl {
struct OutputCompositionState;
@@ -56,6 +56,7 @@ class Output {
public:
    using OutputLayers = std::vector<std::unique_ptr<compositionengine::OutputLayer>>;
    using ReleasedLayers = std::vector<wp<LayerFE>>;
    using UniqueFELayerStateMap = std::unordered_map<LayerFE*, LayerFECompositionState*>;

    struct FrameFences {
        sp<Fence> presentFence{Fence::NO_FENCE};
@@ -90,9 +91,6 @@ public:
    // belongsInOutput for full details.
    virtual void setLayerStackFilter(uint32_t layerStackId, bool isInternal) = 0;

    // Sets the color transform matrix to use
    virtual void setColorTransform(const mat4&) = 0;

    // Sets the output color mode
    virtual void setColorProfile(const ColorProfile&) = 0;

@@ -159,20 +157,26 @@ public:
    // Takes (moves) the set of layers being released this frame.
    virtual ReleasedLayers takeReleasedLayers() = 0;

    // Prepare the output, updating the OutputLayers used in the output
    virtual void prepare(CompositionRefreshArgs&) = 0;

    // Presents the output, finalizing all composition details
    virtual void present(const compositionengine::CompositionRefreshArgs&) = 0;
    virtual void present(const CompositionRefreshArgs&) = 0;

    // Updates the color mode used on this output
    virtual void updateColorProfile(const CompositionRefreshArgs&) = 0;
    // Latches the front-end layer state for each output layer
    virtual void updateLayerStateFromFE(const CompositionRefreshArgs&) const = 0;

protected:
    virtual void setDisplayColorProfile(std::unique_ptr<DisplayColorProfile>) = 0;
    virtual void setRenderSurface(std::unique_ptr<RenderSurface>) = 0;

    virtual void updateAndWriteCompositionState(const CompositionRefreshArgs&) = 0;
    virtual void setColorTransform(const CompositionRefreshArgs&) = 0;
    virtual void updateColorProfile(const CompositionRefreshArgs&) = 0;
    virtual void beginFrame() = 0;
    virtual void prepareFrame() = 0;
    virtual void devOptRepaintFlash(const compositionengine::CompositionRefreshArgs&) = 0;
    virtual void finishFrame(const compositionengine::CompositionRefreshArgs&) = 0;
    virtual void devOptRepaintFlash(const CompositionRefreshArgs&) = 0;
    virtual void finishFrame(const CompositionRefreshArgs&) = 0;
    virtual std::optional<base::unique_fd> composeSurfaces(const Region&) = 0;
    virtual void postFramebuffer() = 0;
    virtual void chooseCompositionStrategy() = 0;
+2 −0
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ public:

    void preComposition(CompositionRefreshArgs&) override;

    void updateLayerStateFromFE(CompositionRefreshArgs& args);

    // Testing
    void setNeedsAnotherUpdateForTest(bool);

+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ public:

    // compositionengine::Output overrides
    void dump(std::string&) const override;
    void setColorTransform(const mat4&) override;
    void setColorTransform(const compositionengine::CompositionRefreshArgs&) override;
    void setColorProfile(const ColorProfile&) override;
    void chooseCompositionStrategy() override;
    bool getSkipColorTransform() const override;
+4 −2
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ public:
    void setBounds(const ui::Size&) override;
    void setLayerStackFilter(uint32_t layerStackId, bool isInternal) override;

    void setColorTransform(const mat4&) override;
    void setColorTransform(const compositionengine::CompositionRefreshArgs&) override;
    void setColorProfile(const ColorProfile&) override;

    void dump(std::string&) const override;
@@ -75,10 +75,12 @@ public:
    void setReleasedLayers(ReleasedLayers&&) override;
    ReleasedLayers takeReleasedLayers() override;

    void prepare(compositionengine::CompositionRefreshArgs&) override;
    void present(const compositionengine::CompositionRefreshArgs&) override;

    void updateLayerStateFromFE(const CompositionRefreshArgs&) const override;
    void updateAndWriteCompositionState(const compositionengine::CompositionRefreshArgs&) override;
    void updateColorProfile(const compositionengine::CompositionRefreshArgs&) override;

    void beginFrame() override;
    void prepareFrame() override;
    void devOptRepaintFlash(const compositionengine::CompositionRefreshArgs&) override;
Loading