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

Commit 1cebfc7a authored by Anton Ivanov's avatar Anton Ivanov
Browse files

Remove spurious copies of QueuedTransactionState.

Bug: 356936695
Test: unit
Flag: EXEMPT refactor
Change-Id: I4fcd63548f140f69ca9608baa36c81545df6374e
parent 175ce9ec
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -40,8 +40,8 @@ void TransactionHandler::collectTransactions() {
        if (!maybeTransaction.has_value()) {
            break;
        }
        auto transaction = maybeTransaction.value();
        mPendingTransactionQueues[transaction.applyToken].emplace(std::move(transaction));
        const auto& token = maybeTransaction->applyToken;
        mPendingTransactionQueues[token].emplace(std::move(*maybeTransaction));
    }
}

+6 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ public:

struct QueuedTransactionState {
    QueuedTransactionState() = default;
    QueuedTransactionState(QueuedTransactionState&&) = default;

    QueuedTransactionState(const FrameTimelineInfo& frameTimelineInfo,
                           std::vector<ResolvedComposerState> composerStates,
@@ -148,6 +149,11 @@ struct QueuedTransactionState {
    std::vector<uint64_t> mergedTransactionIds;
    std::vector<gui::EarlyWakeupInfo> earlyWakeupInfos;
    ftl::Flags<adpf::Workload> workloadHint;

private:
    friend class TransactionTracingTest_addTransactions_Test;
    // Only accessed in tests.
    QueuedTransactionState(const QueuedTransactionState&) = default;
};

} // namespace android
+1 −1
Original line number Diff line number Diff line
@@ -5765,7 +5765,7 @@ void SurfaceFlinger::initializeDisplays() {
    }

    std::vector<QueuedTransactionState> transactions;
    transactions.emplace_back(state);
    transactions.emplace_back(std::move(state));

    {
        Mutex::Autolock lock(mStateLock);
+5 −5
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ public:
        std::vector<gui::EarlyWakeupInfo> earlyWakeupInfos;
    };

    void checkEqual(const TransactionState& info, QueuedTransactionState state) {
    void checkEqual(const TransactionState& info, const QueuedTransactionState& state) {
        EXPECT_EQ(0u, info.mComposerStates.size());
        EXPECT_EQ(0u, state.states.size());

@@ -189,7 +189,7 @@ public:
        mFlinger.flushTransactionQueues();

        // check that the transaction was applied.
        auto transactionQueue = mFlinger.getPendingTransactionQueue();
        const auto& transactionQueue = mFlinger.getPendingTransactionQueue();
        EXPECT_EQ(0u, transactionQueue.size());
    }

@@ -322,12 +322,12 @@ TEST_F(TransactionApplicationTest, ApplyTokensUseDifferentQueues) {
    mFlinger.setTransactionStateInternal(transaction1);
    mFlinger.setTransactionStateInternal(transaction2);
    mFlinger.flushTransactionQueues();
    auto transactionQueues = mFlinger.getPendingTransactionQueue();
    const auto& transactionQueues = mFlinger.getPendingTransactionQueue();

    // Transaction 1 is still in its queue.
    EXPECT_EQ(transactionQueues[applyToken1].size(), 1u);
    EXPECT_EQ(transactionQueues.at(applyToken1).size(), 1u);
    // Transaction 2 has been dequeued.
    EXPECT_EQ(transactionQueues[applyToken2].size(), 0u);
    EXPECT_FALSE(transactionQueues.contains(applyToken2));
}

class LatchUnsignaledTest : public TransactionApplicationTest {
+14 −10
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <layerproto/LayerProtoHeader.h>
#include "FrontEnd/LayerCreationArgs.h"
#include "FrontEnd/Update.h"
#include "QueuedTransactionState.h"
#include "Tracing/LayerTracing.h"
#include "Tracing/TransactionTracing.h"

@@ -55,7 +56,7 @@ protected:
        transaction.originPid = 2;
        mTracing.addQueuedTransaction(transaction);
        std::vector<QueuedTransactionState> transactions;
        update.transactions.emplace_back(transaction);
        update.transactions.emplace_back(std::move(transaction));
        mTracing.addCommittedTransactions(vsyncId, 0, update, {}, false);
        flush();
    }
@@ -67,7 +68,7 @@ protected:
        ASSERT_EQ(actualProto.transactions().size(),
                  static_cast<int32_t>(expectedTransactions.size()));
        for (uint32_t i = 0; i < expectedTransactions.size(); i++) {
            const auto expectedTransaction = expectedTransactions[i];
            const auto& expectedTransaction = expectedTransactions[i];
            const auto protoTransaction = actualProto.transactions(static_cast<int32_t>(i));
            EXPECT_EQ(protoTransaction.transaction_id(), expectedTransaction.id);
            EXPECT_EQ(protoTransaction.pid(), expectedTransaction.originPid);
@@ -99,7 +100,7 @@ TEST_F(TransactionTracingTest, addTransactions) {
        transaction.id = i;
        transaction.originPid = static_cast<int32_t>(i);
        transaction.mergedTransactionIds = std::vector<uint64_t>{i + 100, i + 102};
        transactions.emplace_back(transaction);
        transactions.emplace_back(QueuedTransactionState(transaction));
        mTracing.addQueuedTransaction(transaction);
    }

@@ -107,14 +108,17 @@ TEST_F(TransactionTracingTest, addTransactions) {
    // commits.
    int64_t firstTransactionSetVsyncId = 42;
    frontend::Update firstUpdate;
    firstUpdate.transactions =
            std::vector<QueuedTransactionState>(transactions.begin() + 50, transactions.end());
    for (auto it = transactions.begin() + 50; it < transactions.end(); ++it) {
        firstUpdate.transactions.emplace_back(QueuedTransactionState(*it));
    }
    mTracing.addCommittedTransactions(firstTransactionSetVsyncId, 0, firstUpdate, {}, false);

    int64_t secondTransactionSetVsyncId = 43;
    frontend::Update secondUpdate;
    secondUpdate.transactions =
            std::vector<QueuedTransactionState>(transactions.begin(), transactions.begin() + 50);
    for (auto it = transactions.begin(); it < transactions.begin() + 50; ++it) {
        secondUpdate.transactions.emplace_back(QueuedTransactionState(*it));
    }

    mTracing.addCommittedTransactions(secondTransactionSetVsyncId, 0, secondUpdate, {}, false);
    flush();

@@ -154,7 +158,7 @@ protected:
            transaction.states.emplace_back(childState);
            mTracing.addQueuedTransaction(transaction);

            update.transactions.emplace_back(transaction);
            update.transactions.emplace_back(std::move(transaction));
            VSYNC_ID_FIRST_LAYER_CHANGE = ++mVsyncId;
            mTracing.addCommittedTransactions(VSYNC_ID_FIRST_LAYER_CHANGE, 0, update, {}, false);

@@ -175,7 +179,7 @@ protected:
            mTracing.addQueuedTransaction(transaction);

            frontend::Update update;
            update.transactions.emplace_back(transaction);
            update.transactions.emplace_back(std::move(transaction));
            VSYNC_ID_SECOND_LAYER_CHANGE = ++mVsyncId;
            mTracing.addCommittedTransactions(VSYNC_ID_SECOND_LAYER_CHANGE, 0, update, {}, false);
            flush();
@@ -292,7 +296,7 @@ protected:
            transaction.states.emplace_back(mirrorState);
            mTracing.addQueuedTransaction(transaction);

            update.transactions.emplace_back(transaction);
            update.transactions.emplace_back(std::move(transaction));
            mTracing.addCommittedTransactions(mVsyncId, 0, update, {}, false);
            flush();
        }