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

Commit 441d5045 authored by Lloyd Pique's avatar Lloyd Pique
Browse files

SF: Move HWComposer ownership to CompositionEngine

Move ownership of the HWComposer pointer to CompositionEngine, and
introduce an abstract interface for HWComposer so that CompositionEngine
does not need to be linked against the implementation.

A future change will move the HWComposer and related implementation
details into a new "backend" library, and which point the
ComposionEngine library can depend on it.

A mock HWComposer is also introduced locally to the CompositionEngine
tests, but this too will be eventually moved to the backend.

Test: atest libsurfaceflinger_unittest libcompositionengine_test
Bug: 121291683
Change-Id: I49c6d8c9a83129c45a51dc5bed47f6a980f66eb0
parent 70d91368
Loading
Loading
Loading
Loading
+25 −0
Original line number Original line Diff line number Diff line
@@ -4,6 +4,30 @@ cc_defaults {
    cflags: [
    cflags: [
        "-DLOG_TAG=\"CompositionEngine\"",
        "-DLOG_TAG=\"CompositionEngine\"",
    ],
    ],
    shared_libs: [
        "android.hardware.graphics.allocator@2.0",
        "android.hardware.graphics.composer@2.1",
        "android.hardware.graphics.composer@2.2",
        "android.hardware.graphics.composer@2.3",
        "android.hardware.power@1.0",
        "android.hardware.power@1.3",
        "libbase",
        "libcutils",
        "libgui",
        "liblayers_proto",
        "liblog",
        "libtimestats_proto",
        "libui",
        "libutils",
    ],
    static_libs: [
        "libmath",
        "librenderengine",
        "libtrace_proto",
    ],
    header_libs: [
        "libsurfaceflinger_headers",
    ],
}
}


cc_library {
cc_library {
@@ -37,6 +61,7 @@ cc_test {
    defaults: ["libcompositionengine_defaults"],
    defaults: ["libcompositionengine_defaults"],
    srcs: [
    srcs: [
        "tests/CompositionEngineTest.cpp",
        "tests/CompositionEngineTest.cpp",
        "tests/MockHWComposer.cpp",
    ],
    ],
    static_libs: [
    static_libs: [
        "libcompositionengine",
        "libcompositionengine",
+5 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


#pragma once
#pragma once


#include <memory>

namespace android {
namespace android {


class HWComposer;
class HWComposer;
@@ -29,6 +31,9 @@ namespace compositionengine {
class CompositionEngine {
class CompositionEngine {
public:
public:
    virtual ~CompositionEngine();
    virtual ~CompositionEngine();

    virtual HWComposer& getHwComposer() const = 0;
    virtual void setHwComposer(std::unique_ptr<HWComposer>) = 0;
};
};


} // namespace compositionengine
} // namespace compositionengine
+6 −2
Original line number Original line Diff line number Diff line
@@ -16,8 +16,6 @@


#pragma once
#pragma once


#include <memory>

#include <compositionengine/CompositionEngine.h>
#include <compositionengine/CompositionEngine.h>


namespace android::compositionengine::impl {
namespace android::compositionengine::impl {
@@ -26,6 +24,12 @@ class CompositionEngine : public compositionengine::CompositionEngine {
public:
public:
    CompositionEngine();
    CompositionEngine();
    ~CompositionEngine() override;
    ~CompositionEngine() override;

    HWComposer& getHwComposer() const override;
    void setHwComposer(std::unique_ptr<HWComposer>) override;

private:
    std::unique_ptr<HWComposer> mHwComposer;
};
};


std::unique_ptr<compositionengine::CompositionEngine> createCompositionEngine();
std::unique_ptr<compositionengine::CompositionEngine> createCompositionEngine();
+5 −0
Original line number Original line Diff line number Diff line
@@ -19,12 +19,17 @@
#include <compositionengine/CompositionEngine.h>
#include <compositionengine/CompositionEngine.h>
#include <gmock/gmock.h>
#include <gmock/gmock.h>


#include "DisplayHardware/HWComposer.h"

namespace android::compositionengine::mock {
namespace android::compositionengine::mock {


class CompositionEngine : public compositionengine::CompositionEngine {
class CompositionEngine : public compositionengine::CompositionEngine {
public:
public:
    CompositionEngine();
    CompositionEngine();
    ~CompositionEngine() override;
    ~CompositionEngine() override;

    MOCK_CONST_METHOD0(getHwComposer, HWComposer&());
    MOCK_METHOD1(setHwComposer, void(std::unique_ptr<HWComposer>));
};
};


} // namespace android::compositionengine::mock
} // namespace android::compositionengine::mock
+10 −2
Original line number Original line Diff line number Diff line
@@ -14,10 +14,10 @@
 * limitations under the License.
 * limitations under the License.
 */
 */


#include <memory>

#include <compositionengine/impl/CompositionEngine.h>
#include <compositionengine/impl/CompositionEngine.h>


#include "DisplayHardware/HWComposer.h"

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


CompositionEngine::~CompositionEngine() = default;
CompositionEngine::~CompositionEngine() = default;
@@ -31,5 +31,13 @@ std::unique_ptr<compositionengine::CompositionEngine> createCompositionEngine()
CompositionEngine::CompositionEngine() = default;
CompositionEngine::CompositionEngine() = default;
CompositionEngine::~CompositionEngine() = default;
CompositionEngine::~CompositionEngine() = default;


HWComposer& CompositionEngine::getHwComposer() const {
    return *mHwComposer.get();
}

void CompositionEngine::setHwComposer(std::unique_ptr<HWComposer> hwComposer) {
    mHwComposer = std::move(hwComposer);
}

} // namespace impl
} // namespace impl
} // namespace android::compositionengine
} // namespace android::compositionengine
Loading