Loading services/surfaceflinger/FrontEnd/TransactionHandler.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -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)); } } Loading services/surfaceflinger/QueuedTransactionState.h +6 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public: struct QueuedTransactionState { QueuedTransactionState() = default; QueuedTransactionState(QueuedTransactionState&&) = default; QueuedTransactionState(const FrameTimelineInfo& frameTimelineInfo, std::vector<ResolvedComposerState> composerStates, Loading Loading @@ -152,6 +153,11 @@ struct QueuedTransactionState { std::vector<gui::EarlyWakeupInfo> earlyWakeupInfos; std::vector<gui::TransactionBarrier> transactionBarriers; ftl::Flags<adpf::Workload> workloadHint; private: friend class TransactionTracingTest_addTransactions_Test; // Only accessed in tests. QueuedTransactionState(const QueuedTransactionState&) = default; }; } // namespace android services/surfaceflinger/SurfaceFlinger.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading services/surfaceflinger/tests/unittests/TransactionApplicationTest.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -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()); Loading Loading @@ -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()); } Loading Loading @@ -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 { Loading services/surfaceflinger/tests/unittests/TransactionTracingTest.cpp +14 −10 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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(); } Loading @@ -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); Loading Loading @@ -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); } Loading @@ -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(); Loading Loading @@ -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); Loading @@ -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(); Loading Loading @@ -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(); } Loading Loading
services/surfaceflinger/FrontEnd/TransactionHandler.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -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)); } } Loading
services/surfaceflinger/QueuedTransactionState.h +6 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public: struct QueuedTransactionState { QueuedTransactionState() = default; QueuedTransactionState(QueuedTransactionState&&) = default; QueuedTransactionState(const FrameTimelineInfo& frameTimelineInfo, std::vector<ResolvedComposerState> composerStates, Loading Loading @@ -152,6 +153,11 @@ struct QueuedTransactionState { std::vector<gui::EarlyWakeupInfo> earlyWakeupInfos; std::vector<gui::TransactionBarrier> transactionBarriers; ftl::Flags<adpf::Workload> workloadHint; private: friend class TransactionTracingTest_addTransactions_Test; // Only accessed in tests. QueuedTransactionState(const QueuedTransactionState&) = default; }; } // namespace android
services/surfaceflinger/SurfaceFlinger.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
services/surfaceflinger/tests/unittests/TransactionApplicationTest.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -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()); Loading Loading @@ -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()); } Loading Loading @@ -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 { Loading
services/surfaceflinger/tests/unittests/TransactionTracingTest.cpp +14 −10 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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(); } Loading @@ -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); Loading Loading @@ -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); } Loading @@ -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(); Loading Loading @@ -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); Loading @@ -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(); Loading Loading @@ -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(); } Loading