bool LayerTransactionChild::RecvParentAsyncMessage(const mozilla::layers::AsyncParentMessageData& aMessage) { switch (aMessage.type()) { case AsyncParentMessageData::TOpDeliverFence: { const OpDeliverFence& op = aMessage.get_OpDeliverFence(); FenceHandle fence = op.fence(); PTextureChild* child = op.textureChild(); RefPtr<TextureClient> texture = TextureClient::AsTextureClient(child); if (texture) { texture->SetReleaseFenceHandle(fence); } if (mForwarder) { mForwarder->HoldTransactionsToRespond(op.transactionId()); } else { // Send back a response. InfallibleTArray<AsyncChildMessageData> replies; replies.AppendElement(OpReplyDeliverFence(op.transactionId())); SendChildAsyncMessages(replies); } break; } default: NS_ERROR("unknown AsyncParentMessageData type"); return false; } return true; }
void ImageBridgeChild::SendFenceHandle(AsyncTransactionTracker* aTracker, PTextureChild* aTexture, const FenceHandle& aFence) { HoldUntilComplete(aTracker); InfallibleTArray<AsyncChildMessageData> messages; messages.AppendElement(OpDeliverFenceFromChild(aTracker->GetId(), nullptr, aTexture, FenceHandleFromChild(aFence))); SendChildAsyncMessages(messages); }
bool LayerTransactionChild::RecvParentAsyncMessages(InfallibleTArray<AsyncParentMessageData>&& aMessages) { for (AsyncParentMessageArray::index_type i = 0; i < aMessages.Length(); ++i) { const AsyncParentMessageData& message = aMessages[i]; switch (message.type()) { case AsyncParentMessageData::TOpDeliverFence: { const OpDeliverFence& op = message.get_OpDeliverFence(); FenceHandle fence = op.fence(); PTextureChild* child = op.textureChild(); RefPtr<TextureClient> texture = TextureClient::AsTextureClient(child); if (texture) { texture->SetReleaseFenceHandle(fence); } if (mForwarder) { mForwarder->HoldTransactionsToRespond(op.transactionId()); } else { // Send back a response. InfallibleTArray<AsyncChildMessageData> replies; replies.AppendElement(OpReplyDeliverFence(op.transactionId())); SendChildAsyncMessages(replies); } break; } case AsyncParentMessageData::TOpReplyDeliverFence: { const OpReplyDeliverFence& op = message.get_OpReplyDeliverFence(); TransactionCompleteted(op.transactionId()); break; } default: NS_ERROR("unknown AsyncParentMessageData type"); return false; } } return true; }