概念:
Transaction机制作用是把App的window属性传递给display(保存在Surfaceflinger.layer的mDrawingState中,可以保证原子性)。例如:把App的TransactionCompletedListener等属性传递给的SurfaceFlinger(createLayer过程调用SurfaceComposerClient::apply方法可以实现)
TransactionCompletedListener保存到mCompletedTransactions中。然后在surfaceflinger在handleMessageInvalidate()中处理完transaction后调用TransactionCallbackInvoker的sendCallbacks()去回调TransactionCompletedListener的onTransactionCompleted()函数,通知blastbufferqueue release掉buffer
创建layer transaction流程:
SurfaceFlinger::createLayer(
SurfaceFlinger::addClientLayer
SurfaceFlinger::setTransactionState(->SurfaceFlinger::queueTransaction(state)
等待vsync刷新回调
SurfaceFlinger::onMessageInvalidate
{
refreshNeeded = handleMessageTransaction()
//flushTransactionQueues()+commit的目的是更新绘制状态mCurrentState->mDrawin