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

Commit 3535efc0 authored by Mark Yacoub's avatar Mark Yacoub
Browse files

Fix: Extend VTS to support multiple display if available.

This fixes I65d7fae47d486121b047a7c888db11c4842b4640

Fix:
Extend writers and readers to be unique per display at all stages
including teardown.
Fix an unexplicit use of DisplayWrapper

Bug: b/391347760, b/355482219
Test: atest VtsHalGraphicsComposer3_TargetTest on CF, AL and Comet
Flag: TEST_ONLY
Change-Id: I93694c65fd6a55fd95080afc5138ea060ab85160
parent 5c79dab7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -297,7 +297,8 @@ class ComposerClientWriter final {

    DisplayCommand& getDisplayCommand(int64_t display) {
        if (!mDisplayCommand.has_value() || mDisplayCommand->display != display) {
            LOG_ALWAYS_FATAL_IF(display != mDisplay);
            LOG_ALWAYS_FATAL_IF(display != mDisplay, "Expected display %" PRId64 ", got %" PRId64,
                                mDisplay, display);
            flushLayerCommand();
            flushDisplayCommand();
            mDisplayCommand.emplace();
+8 −3
Original line number Diff line number Diff line
@@ -62,8 +62,9 @@ ScopedAStatus ComposerClientWrapper::createClient() {
    return mComposerClient->registerCallback(mComposerCallback);
}

bool ComposerClientWrapper::tearDown(ComposerClientWriter* writer) {
    return verifyComposerCallbackParams() && destroyAllLayers(writer);
bool ComposerClientWrapper::tearDown(
        std::unordered_map<int64_t, ComposerClientWriter*> displayWriters) {
    return verifyComposerCallbackParams() && destroyAllLayers(displayWriters);
}

std::pair<ScopedAStatus, int32_t> ComposerClientWrapper::getInterfaceVersion() const {
@@ -663,12 +664,16 @@ bool ComposerClientWrapper::getDisplayConfigurationSupported() const {
    return interfaceVersion >= 3;
}

bool ComposerClientWrapper::destroyAllLayers(ComposerClientWriter* writer) {
bool ComposerClientWrapper::destroyAllLayers(
        std::unordered_map<int64_t, ComposerClientWriter*> displayWriters) {
    std::unordered_map<int64_t, DisplayResource> physicalDisplays;
    while (!mDisplayResources.empty()) {
        const auto& it = mDisplayResources.begin();
        const auto& [display, resource] = *it;

        ComposerClientWriter* writer =
                displayWriters.count(display) > 0 ? displayWriters.at(display) : nullptr;

        while (!resource.layers.empty()) {
            auto layer = *resource.layers.begin();
            const auto status = destroyLayer(display, layer, writer);
+3 −3
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ class ComposerClientWrapper {

    ScopedAStatus createClient();

    bool tearDown(ComposerClientWriter*);
    bool tearDown(std::unordered_map<int64_t, ComposerClientWriter*> displayWriters);

    std::pair<ScopedAStatus, int32_t> getInterfaceVersion() const;

@@ -218,7 +218,7 @@ class ComposerClientWrapper {

    void removeLayerFromDisplayResources(int64_t display, int64_t layer);

    bool destroyAllLayers(ComposerClientWriter*);
    bool destroyAllLayers(std::unordered_map<int64_t, ComposerClientWriter*> displayWriters);

    bool verifyComposerCallbackParams();

@@ -242,7 +242,7 @@ class ComposerClientWrapper {

class DisplayWrapper {
  public:
    DisplayWrapper(int64_t displayId)
    explicit DisplayWrapper(int64_t displayId)
        : mDisplayId(displayId), mDisplayWidth(0), mDisplayHeight(0) {}

    int64_t getDisplayId() const { return mDisplayId; }
+3 −1
Original line number Diff line number Diff line
@@ -92,7 +92,9 @@ class GraphicsCompositionTestBase : public ::testing::Test {
    void TearDown() override {
        ASSERT_FALSE(mDisplays.empty());
        ASSERT_TRUE(mComposerClient->setPowerMode(getPrimaryDisplayId(), PowerMode::OFF).isOk());
        ASSERT_TRUE(mComposerClient->tearDown(mWriter.get()));
        std::unordered_map<int64_t, ComposerClientWriter*> displayWriters;
        displayWriters.emplace(getPrimaryDisplayId(), mWriter.get());
        ASSERT_TRUE(mComposerClient->tearDown(displayWriters));
        mComposerClient.reset();
        const auto errors = mReader.takeErrors();
        ASSERT_TRUE(mReader.takeErrors().empty());