bool SurfaceFlinger::handleMessageTransaction() {
ATRACE_CALL();
if (getTransactionFlags(eTransactionFlushNeeded)) {
flushTransactionQueues();
}
uint32_t transactionFlags = peekTransactionFlags();
bool runHandleTransaction =
((transactionFlags & (~eTransactionFlushNeeded)) != 0) || mForceTraversal;
if (runHandleTransaction) {
handleTransaction(eTransactionMask);
}
if (transactionFlushNeeded()) {
setTransactionFlags(eTransactionFlushNeeded);
}
return runHandleTransaction;
}
mTransactionFlags
中包含 eTransactionFlushNeeded
,则调用 SurfaceFlinger::flushTransactionQueues()。eTransactionFlushNeeded
是在 SurfaceFlinger::queueTransaction() 中设置的。runHandleTransaction
表示除了 eTransactionFlushNeeded
还设置了其他的 flag,或设置了 traversal。runHandleTransaction
是 true,则调用 SurfaceFlinger::handleTransaction()。transactionFlushNeeded()
返回 true,即 mPendingTransactionQueues
或 mTransactionQueue
不空,则设置 eTransactionFlushNeeded
。Android 13 上与 SurfaceFlinger::onMessageInvalidate() 合并,并改名为 commit()
。