Chromium Code Reviews| Index: content/renderer/gpu/renderer_compositor_frame_sink.cc |
| diff --git a/content/renderer/gpu/renderer_compositor_frame_sink.cc b/content/renderer/gpu/renderer_compositor_frame_sink.cc |
| index 39d110095b06863794d33c8741f0854a801c16eb..007372bdc031d5554b91410ee2261de81bec3c7a 100644 |
| --- a/content/renderer/gpu/renderer_compositor_frame_sink.cc |
| +++ b/content/renderer/gpu/renderer_compositor_frame_sink.cc |
| @@ -49,7 +49,8 @@ RendererCompositorFrameSink::RendererCompositorFrameSink( |
| synthetic_begin_frame_source_ |
| ? nullptr |
| : base::MakeUnique<cc::ExternalBeginFrameSource>(this)), |
| - routing_id_(routing_id) { |
| + routing_id_(routing_id), |
| + last_used_frame_token_(compositor_frame_sink_id << 28) { |
|
Fady Samuel
2017/03/31 16:45:14
I'd rather FrameToken be a struct with two ints li
Saman Sami
2017/04/03 19:22:28
What should those two ints be called? Frame token
|
| DCHECK(compositor_frame_sink_filter_); |
| DCHECK(frame_swap_message_queue_); |
| DCHECK(message_sender_); |
| @@ -73,7 +74,8 @@ RendererCompositorFrameSink::RendererCompositorFrameSink( |
| synthetic_begin_frame_source_ |
| ? nullptr |
| : base::MakeUnique<cc::ExternalBeginFrameSource>(this)), |
| - routing_id_(routing_id) { |
| + routing_id_(routing_id), |
| + last_used_frame_token_(compositor_frame_sink_id << 28) { |
| DCHECK(compositor_frame_sink_filter_); |
| DCHECK(frame_swap_message_queue_); |
| DCHECK(message_sender_); |
| @@ -130,18 +132,27 @@ void RendererCompositorFrameSink::SubmitCompositorFrame( |
| if (ShouldAllocateNewLocalSurfaceId(frame)) |
| local_surface_id_ = id_allocator_.GenerateId(); |
| UpdateFrameData(frame); |
| + |
| { |
| std::unique_ptr<FrameSwapMessageQueue::SendMessageScope> |
| send_message_scope = |
| frame_swap_message_queue_->AcquireSendMessageScope(); |
| std::vector<std::unique_ptr<IPC::Message>> messages; |
| - std::vector<IPC::Message> messages_to_deliver_with_frame; |
| frame_swap_message_queue_->DrainMessages(&messages); |
| - FrameSwapMessageQueue::TransferMessages(&messages, |
| - &messages_to_deliver_with_frame); |
| - Send(new ViewHostMsg_SwapCompositorFrame( |
| - routing_id_, compositor_frame_sink_id_, local_surface_id_, frame, |
| - messages_to_deliver_with_frame)); |
| + std::vector<IPC::Message> messages_to_send; |
| + std::vector<IPC::Message> dummy; |
| + FrameSwapMessageQueue::TransferMessages(&messages, &messages_to_send); |
| + uint32_t frame_token = 0; |
| + if (!messages_to_send.empty()) |
| + frame_token = ++last_used_frame_token_; |
| + frame.metadata.frame_token = frame_token; |
| + Send(new ViewHostMsg_SwapCompositorFrame(routing_id_, |
| + compositor_frame_sink_id_, |
| + local_surface_id_, frame, dummy)); |
| + if (frame_token) { |
| + Send(new ViewHostMsg_FrameSwapMessages(routing_id_, frame_token, |
| + messages_to_send)); |
| + } |
| // ~send_message_scope. |
| } |
| } |