Skip to content

Commit 3f0c723

Browse files
committed
Rename TransactionState to QueuedTransactionState
Clean up some of the logic tracking transaction state on the client. This will help with some of the upcoming optimizations, remove some duplicate parceling code and clean up the interface into SF. Flag: EXEMPT refactor Bug: 385156191 Test: presubmit Change-Id: I701138535000af921e8e026855cd420ff5c8aeea
1 parent def8ff1 commit 3f0c723

22 files changed

Lines changed: 161 additions & 155 deletions

services/surfaceflinger/FrontEnd/LayerLifecycleManager.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,8 @@ void LayerLifecycleManager::onHandlesDestroyed(
182182
}
183183
}
184184

185-
void LayerLifecycleManager::applyTransactions(const std::vector<TransactionState>& transactions,
186-
bool ignoreUnknownLayers) {
185+
void LayerLifecycleManager::applyTransactions(
186+
const std::vector<QueuedTransactionState>& transactions, bool ignoreUnknownLayers) {
187187
for (const auto& transaction : transactions) {
188188
for (const auto& resolvedComposerState : transaction.states) {
189189
const auto& clientState = resolvedComposerState.state;

services/surfaceflinger/FrontEnd/LayerLifecycleManager.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
#pragma once
1818

19+
#include "QueuedTransactionState.h"
1920
#include "RequestedLayerState.h"
20-
#include "TransactionState.h"
2121

2222
namespace android::surfaceflinger::frontend {
2323

@@ -43,7 +43,8 @@ class LayerLifecycleManager {
4343
// the layers it is unreachable. When using the LayerLifecycleManager for layer trace
4444
// generation we may encounter layers which are known because we don't have an explicit
4545
// lifecycle. Ignore these errors while we have to interop with legacy.
46-
void applyTransactions(const std::vector<TransactionState>&, bool ignoreUnknownLayers = false);
46+
void applyTransactions(const std::vector<QueuedTransactionState>&,
47+
bool ignoreUnknownLayers = false);
4748
// Ignore unknown handles when iteroping with legacy front end. In the old world, we
4849
// would create child layers which are not necessary with the new front end. This means
4950
// we will get notified for handle changes that don't exist in the new front end.

services/surfaceflinger/FrontEnd/RequestedLayerState.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#include "Scheduler/LayerInfo.h"
2424

2525
#include "LayerCreationArgs.h"
26-
#include "TransactionState.h"
26+
#include "QueuedTransactionState.h"
2727

2828
namespace android::surfaceflinger::frontend {
2929
using namespace ftl::flag_operators;

services/surfaceflinger/FrontEnd/TransactionHandler.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
namespace android::surfaceflinger::frontend {
3030

31-
void TransactionHandler::queueTransaction(TransactionState&& state) {
31+
void TransactionHandler::queueTransaction(QueuedTransactionState&& state) {
3232
mLocklessTransactionQueue.push(std::move(state));
3333
mPendingTransactionCount.fetch_add(1);
3434
SFTRACE_INT("TransactionQueue", static_cast<int>(mPendingTransactionCount.load()));
@@ -45,9 +45,9 @@ void TransactionHandler::collectTransactions() {
4545
}
4646
}
4747

48-
std::vector<TransactionState> TransactionHandler::flushTransactions() {
48+
std::vector<QueuedTransactionState> TransactionHandler::flushTransactions() {
4949
// Collect transaction that are ready to be applied.
50-
std::vector<TransactionState> transactions;
50+
std::vector<QueuedTransactionState> transactions;
5151
TransactionFlushState flushState;
5252
flushState.queueProcessTime = systemTime();
5353
// Transactions with a buffer pending on a barrier may be on a different applyToken
@@ -76,7 +76,7 @@ std::vector<TransactionState> TransactionHandler::flushTransactions() {
7676
}
7777

7878
void TransactionHandler::applyUnsignaledBufferTransaction(
79-
std::vector<TransactionState>& transactions, TransactionFlushState& flushState) {
79+
std::vector<QueuedTransactionState>& transactions, TransactionFlushState& flushState) {
8080
if (!flushState.queueWithUnsignaledBuffer) {
8181
return;
8282
}
@@ -98,9 +98,9 @@ void TransactionHandler::applyUnsignaledBufferTransaction(
9898
}
9999
}
100100

101-
void TransactionHandler::popTransactionFromPending(std::vector<TransactionState>& transactions,
102-
TransactionFlushState& flushState,
103-
std::queue<TransactionState>& queue) {
101+
void TransactionHandler::popTransactionFromPending(
102+
std::vector<QueuedTransactionState>& transactions, TransactionFlushState& flushState,
103+
std::queue<QueuedTransactionState>& queue) {
104104
auto& transaction = queue.front();
105105
// Transaction is ready move it from the pending queue.
106106
flushState.firstTransaction = false;
@@ -146,8 +146,8 @@ TransactionHandler::TransactionReadiness TransactionHandler::applyFilters(
146146
return ready;
147147
}
148148

149-
int TransactionHandler::flushPendingTransactionQueues(std::vector<TransactionState>& transactions,
150-
TransactionFlushState& flushState) {
149+
int TransactionHandler::flushPendingTransactionQueues(
150+
std::vector<QueuedTransactionState>& transactions, TransactionFlushState& flushState) {
151151
int transactionsPendingBarrier = 0;
152152
auto it = mPendingTransactionQueues.begin();
153153
while (it != mPendingTransactionQueues.end()) {

services/surfaceflinger/FrontEnd/TransactionHandler.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#include <vector>
2323

2424
#include <LocklessQueue.h>
25-
#include <TransactionState.h>
25+
#include <QueuedTransactionState.h>
2626
#include <android-base/thread_annotations.h>
2727
#include <ftl/small_map.h>
2828
#include <ftl/small_vector.h>
@@ -35,7 +35,7 @@ namespace surfaceflinger::frontend {
3535
class TransactionHandler {
3636
public:
3737
struct TransactionFlushState {
38-
TransactionState* transaction;
38+
QueuedTransactionState* transaction;
3939
bool firstTransaction = true;
4040
nsecs_t queueProcessTime = 0;
4141
// Layer handles that have transactions with buffers that are ready to be applied.
@@ -61,9 +61,9 @@ class TransactionHandler {
6161
bool hasPendingTransactions();
6262
// Moves transactions from the lockless queue.
6363
void collectTransactions();
64-
std::vector<TransactionState> flushTransactions();
64+
std::vector<QueuedTransactionState> flushTransactions();
6565
void addTransactionReadyFilter(TransactionFilter&&);
66-
void queueTransaction(TransactionState&&);
66+
void queueTransaction(QueuedTransactionState&&);
6767

6868
struct StalledTransactionInfo {
6969
pid_t pid;
@@ -81,14 +81,15 @@ class TransactionHandler {
8181
// For unit tests
8282
friend class ::android::TestableSurfaceFlinger;
8383

84-
int flushPendingTransactionQueues(std::vector<TransactionState>&, TransactionFlushState&);
85-
void applyUnsignaledBufferTransaction(std::vector<TransactionState>&, TransactionFlushState&);
86-
void popTransactionFromPending(std::vector<TransactionState>&, TransactionFlushState&,
87-
std::queue<TransactionState>&);
84+
int flushPendingTransactionQueues(std::vector<QueuedTransactionState>&, TransactionFlushState&);
85+
void applyUnsignaledBufferTransaction(std::vector<QueuedTransactionState>&,
86+
TransactionFlushState&);
87+
void popTransactionFromPending(std::vector<QueuedTransactionState>&, TransactionFlushState&,
88+
std::queue<QueuedTransactionState>&);
8889
TransactionReadiness applyFilters(TransactionFlushState&);
89-
std::unordered_map<sp<IBinder>, std::queue<TransactionState>, IListenerHash>
90+
std::unordered_map<sp<IBinder>, std::queue<QueuedTransactionState>, IListenerHash>
9091
mPendingTransactionQueues;
91-
LocklessQueue<TransactionState> mLocklessTransactionQueue;
92+
LocklessQueue<QueuedTransactionState> mLocklessTransactionQueue;
9293
std::atomic<size_t> mPendingTransactionCount = 0;
9394
ftl::SmallVector<TransactionFilter, 2> mTransactionReadyFilters;
9495

services/surfaceflinger/FrontEnd/Update.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@
1919
#include <gui/DisplayInfo.h>
2020

2121
#include "FrontEnd/LayerCreationArgs.h"
22+
#include "QueuedTransactionState.h"
2223
#include "RequestedLayerState.h"
23-
#include "TransactionState.h"
2424

2525
namespace android::surfaceflinger::frontend {
2626

2727
// Atomic set of changes affecting layer state. These changes are queued in binder threads and
2828
// applied every vsync.
2929
struct Update {
30-
std::vector<TransactionState> transactions;
30+
std::vector<QueuedTransactionState> transactions;
3131
std::vector<sp<Layer>> legacyLayers;
3232
std::vector<std::unique_ptr<frontend::RequestedLayerState>> newLayers;
3333
std::vector<LayerCreationArgs> layerCreationArgs;

services/surfaceflinger/TransactionState.h renamed to services/surfaceflinger/QueuedTransactionState.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@
1616

1717
#pragma once
1818

19-
#include <condition_variable>
2019
#include <memory>
21-
#include <mutex>
2220
#include <vector>
2321
#include "FrontEnd/LayerCreationArgs.h"
2422
#include "renderengine/ExternalTexture.h"
@@ -47,18 +45,20 @@ class ResolvedComposerState : public ComposerState {
4745
uint32_t touchCropId = UNASSIGNED_LAYER_ID;
4846
};
4947

50-
struct TransactionState {
51-
TransactionState() = default;
48+
struct QueuedTransactionState {
49+
QueuedTransactionState() = default;
5250

53-
TransactionState(const FrameTimelineInfo& frameTimelineInfo,
54-
std::vector<ResolvedComposerState>& composerStates,
55-
const Vector<DisplayState>& displayStates, uint32_t transactionFlags,
56-
const sp<IBinder>& applyToken, const InputWindowCommands& inputWindowCommands,
57-
int64_t desiredPresentTime, bool isAutoTimestamp,
58-
std::vector<uint64_t> uncacheBufferIds, int64_t postTime,
59-
bool hasListenerCallbacks, std::vector<ListenerCallbacks> listenerCallbacks,
60-
int originPid, int originUid, uint64_t transactionId,
61-
std::vector<uint64_t> mergedTransactionIds)
51+
QueuedTransactionState(const FrameTimelineInfo& frameTimelineInfo,
52+
std::vector<ResolvedComposerState>& composerStates,
53+
const Vector<DisplayState>& displayStates, uint32_t transactionFlags,
54+
const sp<IBinder>& applyToken,
55+
const InputWindowCommands& inputWindowCommands,
56+
int64_t desiredPresentTime, bool isAutoTimestamp,
57+
std::vector<uint64_t> uncacheBufferIds, int64_t postTime,
58+
bool hasListenerCallbacks,
59+
std::vector<ListenerCallbacks> listenerCallbacks, int originPid,
60+
int originUid, uint64_t transactionId,
61+
std::vector<uint64_t> mergedTransactionIds)
6262
: frameTimelineInfo(frameTimelineInfo),
6363
states(std::move(composerStates)),
6464
displays(displayStates),

services/surfaceflinger/SurfaceFlinger.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4774,16 +4774,16 @@ void SurfaceFlinger::addTransactionReadyFilters() {
47744774
// For tests only
47754775
bool SurfaceFlinger::flushTransactionQueues() {
47764776
mTransactionHandler.collectTransactions();
4777-
std::vector<TransactionState> transactions = mTransactionHandler.flushTransactions();
4777+
std::vector<QueuedTransactionState> transactions = mTransactionHandler.flushTransactions();
47784778
return applyTransactions(transactions);
47794779
}
47804780

4781-
bool SurfaceFlinger::applyTransactions(std::vector<TransactionState>& transactions) {
4781+
bool SurfaceFlinger::applyTransactions(std::vector<QueuedTransactionState>& transactions) {
47824782
Mutex::Autolock lock(mStateLock);
47834783
return applyTransactionsLocked(transactions);
47844784
}
47854785

4786-
bool SurfaceFlinger::applyTransactionsLocked(std::vector<TransactionState>& transactions) {
4786+
bool SurfaceFlinger::applyTransactionsLocked(std::vector<QueuedTransactionState>& transactions) {
47874787
bool needsTraversal = false;
47884788
// Now apply all transactions.
47894789
for (auto& transaction : transactions) {
@@ -4944,22 +4944,22 @@ status_t SurfaceFlinger::setTransactionState(
49444944
}
49454945
}
49464946

4947-
TransactionState state{frameTimelineInfo,
4948-
resolvedStates,
4949-
displays,
4950-
flags,
4951-
applyToken,
4952-
std::move(inputWindowCommands),
4953-
desiredPresentTime,
4954-
isAutoTimestamp,
4955-
std::move(uncacheBufferIds),
4956-
postTime,
4957-
hasListenerCallbacks,
4958-
listenerCallbacks,
4959-
originPid,
4960-
originUid,
4961-
transactionId,
4962-
mergedTransactionIds};
4947+
QueuedTransactionState state{frameTimelineInfo,
4948+
resolvedStates,
4949+
displays,
4950+
flags,
4951+
applyToken,
4952+
std::move(inputWindowCommands),
4953+
desiredPresentTime,
4954+
isAutoTimestamp,
4955+
std::move(uncacheBufferIds),
4956+
postTime,
4957+
hasListenerCallbacks,
4958+
listenerCallbacks,
4959+
originPid,
4960+
originUid,
4961+
transactionId,
4962+
mergedTransactionIds};
49634963

49644964
if (mTransactionTracing) {
49654965
mTransactionTracing->addQueuedTransaction(state);
@@ -5044,7 +5044,7 @@ bool SurfaceFlinger::applyTransactionState(const FrameTimelineInfo& frameTimelin
50445044
}
50455045

50465046
bool SurfaceFlinger::applyAndCommitDisplayTransactionStatesLocked(
5047-
std::vector<TransactionState>& transactions) {
5047+
std::vector<QueuedTransactionState>& transactions) {
50485048
bool needsTraversal = false;
50495049
uint32_t transactionFlags = 0;
50505050
for (auto& transaction : transactions) {
@@ -5438,7 +5438,7 @@ void SurfaceFlinger::onHandleDestroyed(sp<Layer>& layer, uint32_t layerId) {
54385438
}
54395439

54405440
void SurfaceFlinger::initializeDisplays() {
5441-
TransactionState state;
5441+
QueuedTransactionState state;
54425442
state.inputWindowCommands = mInputWindowCommands;
54435443
const nsecs_t now = systemTime();
54445444
state.desiredPresentTime = now;
@@ -5453,7 +5453,7 @@ void SurfaceFlinger::initializeDisplays() {
54535453
state.displays.push(DisplayState(display.token(), ui::LayerStack::fromValue(layerStack++)));
54545454
}
54555455

5456-
std::vector<TransactionState> transactions;
5456+
std::vector<QueuedTransactionState> transactions;
54575457
transactions.emplace_back(state);
54585458

54595459
{

services/surfaceflinger/SurfaceFlinger.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
#include "LayerVector.h"
8888
#include "MutexUtils.h"
8989
#include "PowerAdvisor/PowerAdvisor.h"
90+
#include "QueuedTransactionState.h"
9091
#include "Scheduler/ISchedulerCallback.h"
9192
#include "Scheduler/RefreshRateSelector.h"
9293
#include "Scheduler/Scheduler.h"
@@ -95,7 +96,6 @@
9596
#include "Tracing/LayerTracing.h"
9697
#include "Tracing/TransactionTracing.h"
9798
#include "TransactionCallbackInvoker.h"
98-
#include "TransactionState.h"
9999
#include "Utils/OnceFuture.h"
100100

101101
#include <algorithm>
@@ -803,8 +803,9 @@ class SurfaceFlinger : public BnSurfaceComposer,
803803
// For test only
804804
bool flushTransactionQueues() REQUIRES(kMainThreadContext);
805805

806-
bool applyTransactions(std::vector<TransactionState>&) REQUIRES(kMainThreadContext);
807-
bool applyAndCommitDisplayTransactionStatesLocked(std::vector<TransactionState>& transactions)
806+
bool applyTransactions(std::vector<QueuedTransactionState>&) REQUIRES(kMainThreadContext);
807+
bool applyAndCommitDisplayTransactionStatesLocked(
808+
std::vector<QueuedTransactionState>& transactions)
808809
REQUIRES(kMainThreadContext, mStateLock);
809810

810811
// Returns true if there is at least one transaction that needs to be flushed
@@ -833,7 +834,7 @@ class SurfaceFlinger : public BnSurfaceComposer,
833834

834835
static LatchUnsignaledConfig getLatchUnsignaledConfig();
835836
bool shouldLatchUnsignaled(const layer_state_t&, size_t numStates, bool firstTransaction) const;
836-
bool applyTransactionsLocked(std::vector<TransactionState>& transactions)
837+
bool applyTransactionsLocked(std::vector<QueuedTransactionState>& transactions)
837838
REQUIRES(mStateLock, kMainThreadContext);
838839
uint32_t setDisplayStateLocked(const DisplayState& s) REQUIRES(mStateLock);
839840
uint32_t addInputWindowCommands(const InputWindowCommands& inputWindowCommands)

services/surfaceflinger/Tracing/TransactionProtoParser.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
#include "FrontEnd/LayerCreationArgs.h"
2222
#include "LayerProtoHelper.h"
23+
#include "QueuedTransactionState.h"
2324
#include "TransactionProtoParser.h"
24-
#include "TransactionState.h"
2525
#include "gui/LayerState.h"
2626

2727
namespace android::surfaceflinger {
@@ -51,7 +51,8 @@ class FakeExternalTexture : public renderengine::ExternalTexture {
5151
~FakeExternalTexture() = default;
5252
};
5353

54-
perfetto::protos::TransactionState TransactionProtoParser::toProto(const TransactionState& t) {
54+
perfetto::protos::TransactionState TransactionProtoParser::toProto(
55+
const QueuedTransactionState& t) {
5556
perfetto::protos::TransactionState proto;
5657
proto.set_pid(t.originPid);
5758
proto.set_uid(t.originUid);
@@ -300,9 +301,9 @@ perfetto::protos::LayerCreationArgs TransactionProtoParser::toProto(const LayerC
300301
return proto;
301302
}
302303

303-
TransactionState TransactionProtoParser::fromProto(
304+
QueuedTransactionState TransactionProtoParser::fromProto(
304305
const perfetto::protos::TransactionState& proto) {
305-
TransactionState t;
306+
QueuedTransactionState t;
306307
t.originPid = proto.pid();
307308
t.originUid = proto.uid();
308309
t.frameTimelineInfo.vsyncId = proto.vsync_id();

0 commit comments

Comments
 (0)