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

Commit 269dc4d2 authored by Dan Stoza's avatar Dan Stoza Committed by Ady Abraham
Browse files

SF: Add initial Planner infrastructure

Adds infrastructure for the SF Planner, which will support layer
caching/flattening and composition strategy prediction.

Bug: 158790260
Test: atest libcompositionengine_test libsurfaceflinger_unittest
Change-Id: I0d3027cea073fe25f269f3d5e83fe621dfbe7b2b
parent 9c87defd
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -84,7 +84,7 @@ constexpr auto flag_name() {
template <typename F>
template <typename F>
constexpr std::optional<std::string_view> flag_name(F flag) {
constexpr std::optional<std::string_view> flag_name(F flag) {
    using U = std::underlying_type_t<F>;
    using U = std::underlying_type_t<F>;
    auto idx = __builtin_ctzl(static_cast<U>(flag));
    auto idx = static_cast<size_t>(__builtin_ctzl(static_cast<U>(flag)));
    return details::flag_names<F>[idx];
    return details::flag_names<F>[idx];
}
}


+3 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ cc_defaults {
        "liblog",
        "liblog",
        "libnativewindow",
        "libnativewindow",
        "libprotobuf-cpp-lite",
        "libprotobuf-cpp-lite",
        "libSurfaceFlingerProp",
        "libtimestats",
        "libtimestats",
        "libui",
        "libui",
        "libutils",
        "libutils",
@@ -51,6 +52,8 @@ cc_library {
    name: "libcompositionengine",
    name: "libcompositionengine",
    defaults: ["libcompositionengine_defaults"],
    defaults: ["libcompositionengine_defaults"],
    srcs: [
    srcs: [
        "src/planner/LayerState.cpp",
        "src/planner/Planner.cpp",
        "src/ClientCompositionRequestCache.cpp",
        "src/ClientCompositionRequestCache.cpp",
        "src/CompositionEngine.cpp",
        "src/CompositionEngine.cpp",
        "src/Display.cpp",
        "src/Display.cpp",
+3 −0
Original line number Original line Diff line number Diff line
@@ -135,6 +135,9 @@ public:


    // Gets some kind of identifier for the layer for debug purposes.
    // Gets some kind of identifier for the layer for debug purposes.
    virtual const char* getDebugName() const = 0;
    virtual const char* getDebugName() const = 0;

    // Gets the sequence number: a serial number that uniquely identifies a Layer
    virtual int32_t getSequence() const = 0;
};
};


// TODO(b/121291683): Specialize std::hash<> for sp<T> so these and others can
// TODO(b/121291683): Specialize std::hash<> for sp<T> so these and others can
+7 −1
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@
#include <ui/Region.h>
#include <ui/Region.h>
#include <ui/Transform.h>
#include <ui/Transform.h>
#include <utils/StrongPointer.h>
#include <utils/StrongPointer.h>
#include <utils/Vector.h>


#include "DisplayHardware/DisplayIdentification.h"
#include "DisplayHardware/DisplayIdentification.h"


@@ -183,6 +184,9 @@ public:
    // Outputs a string with a state dump
    // Outputs a string with a state dump
    virtual void dump(std::string&) const = 0;
    virtual void dump(std::string&) const = 0;


    // Outputs planner information
    virtual void dumpPlannerInfo(const Vector<String16>& args, std::string&) const = 0;

    // Gets the debug name for the output
    // Gets the debug name for the output
    virtual const std::string& getName() const = 0;
    virtual const std::string& getName() const = 0;


@@ -264,7 +268,9 @@ protected:
    virtual void ensureOutputLayerIfVisible(sp<LayerFE>&, CoverageState&) = 0;
    virtual void ensureOutputLayerIfVisible(sp<LayerFE>&, CoverageState&) = 0;
    virtual void setReleasedLayers(const CompositionRefreshArgs&) = 0;
    virtual void setReleasedLayers(const CompositionRefreshArgs&) = 0;


    virtual void updateAndWriteCompositionState(const CompositionRefreshArgs&) = 0;
    virtual void updateCompositionState(const CompositionRefreshArgs&) = 0;
    virtual void planComposition() = 0;
    virtual void writeCompositionState(const CompositionRefreshArgs&) = 0;
    virtual void setColorTransform(const CompositionRefreshArgs&) = 0;
    virtual void setColorTransform(const CompositionRefreshArgs&) = 0;
    virtual void updateColorProfile(const CompositionRefreshArgs&) = 0;
    virtual void updateColorProfile(const CompositionRefreshArgs&) = 0;
    virtual void beginFrame() = 0;
    virtual void beginFrame() = 0;
+10 −1
Original line number Original line Diff line number Diff line
@@ -28,10 +28,15 @@


namespace android::compositionengine::impl {
namespace android::compositionengine::impl {


namespace planner {
class Planner;
} // namespace planner

// The implementation class contains the common implementation, but does not
// The implementation class contains the common implementation, but does not
// actually contain the final output state.
// actually contain the final output state.
class Output : public virtual compositionengine::Output {
class Output : public virtual compositionengine::Output {
public:
public:
    Output();
    ~Output() override;
    ~Output() override;


    // compositionengine::Output overrides
    // compositionengine::Output overrides
@@ -48,6 +53,7 @@ public:
    void setColorProfile(const ColorProfile&) override;
    void setColorProfile(const ColorProfile&) override;


    void dump(std::string&) const override;
    void dump(std::string&) const override;
    void dumpPlannerInfo(const Vector<String16>& args, std::string&) const override;


    const std::string& getName() const override;
    const std::string& getName() const override;
    void setName(const std::string&) override;
    void setName(const std::string&) override;
@@ -77,7 +83,9 @@ public:
    void setReleasedLayers(const compositionengine::CompositionRefreshArgs&) override;
    void setReleasedLayers(const compositionengine::CompositionRefreshArgs&) override;


    void updateLayerStateFromFE(const CompositionRefreshArgs&) const override;
    void updateLayerStateFromFE(const CompositionRefreshArgs&) const override;
    void updateAndWriteCompositionState(const compositionengine::CompositionRefreshArgs&) override;
    void updateCompositionState(const compositionengine::CompositionRefreshArgs&) override;
    void planComposition() override;
    void writeCompositionState(const compositionengine::CompositionRefreshArgs&) override;
    void updateColorProfile(const compositionengine::CompositionRefreshArgs&) override;
    void updateColorProfile(const compositionengine::CompositionRefreshArgs&) override;
    void beginFrame() override;
    void beginFrame() override;
    void prepareFrame() override;
    void prepareFrame() override;
@@ -130,6 +138,7 @@ private:
    ReleasedLayers mReleasedLayers;
    ReleasedLayers mReleasedLayers;
    OutputLayer* mLayerRequestingBackgroundBlur = nullptr;
    OutputLayer* mLayerRequestingBackgroundBlur = nullptr;
    std::unique_ptr<ClientCompositionRequestCache> mClientCompositionRequestCache;
    std::unique_ptr<ClientCompositionRequestCache> mClientCompositionRequestCache;
    std::unique_ptr<planner::Planner> mPlanner;
};
};


// This template factory function standardizes the implementation details of the
// This template factory function standardizes the implementation details of the
Loading