OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/gpu/renderer_compositor_frame_sink.h" | 5 #include "content/renderer/gpu/renderer_compositor_frame_sink.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 namespace content { | 27 namespace content { |
28 | 28 |
29 RendererCompositorFrameSink::RendererCompositorFrameSink( | 29 RendererCompositorFrameSink::RendererCompositorFrameSink( |
30 int32_t routing_id, | 30 int32_t routing_id, |
31 uint32_t compositor_frame_sink_id, | 31 uint32_t compositor_frame_sink_id, |
32 std::unique_ptr<cc::BeginFrameSource> begin_frame_source, | 32 std::unique_ptr<cc::BeginFrameSource> begin_frame_source, |
33 scoped_refptr<cc::ContextProvider> context_provider, | 33 scoped_refptr<cc::ContextProvider> context_provider, |
34 scoped_refptr<cc::ContextProvider> worker_context_provider, | 34 scoped_refptr<cc::ContextProvider> worker_context_provider, |
35 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue) | 35 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue) |
36 : CompositorFrameSink(std::move(context_provider), | 36 : CompositorFrameSink(std::move(context_provider), |
37 std::move(worker_context_provider), | 37 std::move(worker_context_provider)), |
38 nullptr), | |
39 compositor_frame_sink_id_(compositor_frame_sink_id), | 38 compositor_frame_sink_id_(compositor_frame_sink_id), |
40 compositor_frame_sink_filter_( | 39 compositor_frame_sink_filter_( |
41 RenderThreadImpl::current()->compositor_message_filter()), | 40 RenderThreadImpl::current()->compositor_message_filter()), |
42 message_sender_(RenderThreadImpl::current()->sync_message_filter()), | 41 message_sender_(RenderThreadImpl::current()->sync_message_filter()), |
43 frame_swap_message_queue_(swap_frame_message_queue), | 42 frame_swap_message_queue_(swap_frame_message_queue), |
44 begin_frame_source_(std::move(begin_frame_source)), | 43 begin_frame_source_(std::move(begin_frame_source)), |
45 routing_id_(routing_id) { | 44 routing_id_(routing_id) { |
46 DCHECK(compositor_frame_sink_filter_); | 45 DCHECK(compositor_frame_sink_filter_); |
47 DCHECK(frame_swap_message_queue_); | 46 DCHECK(frame_swap_message_queue_); |
48 DCHECK(message_sender_); | 47 DCHECK(message_sender_); |
49 DCHECK(begin_frame_source_); | 48 DCHECK(begin_frame_source_); |
50 capabilities_.delegated_rendering = true; | |
51 } | 49 } |
52 | 50 |
53 RendererCompositorFrameSink::RendererCompositorFrameSink( | 51 RendererCompositorFrameSink::RendererCompositorFrameSink( |
54 int32_t routing_id, | 52 int32_t routing_id, |
55 uint32_t compositor_frame_sink_id, | 53 uint32_t compositor_frame_sink_id, |
56 std::unique_ptr<cc::BeginFrameSource> begin_frame_source, | 54 std::unique_ptr<cc::BeginFrameSource> begin_frame_source, |
57 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider, | 55 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider, |
58 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue) | 56 scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue) |
59 : CompositorFrameSink(std::move(vulkan_context_provider)), | 57 : CompositorFrameSink(std::move(vulkan_context_provider)), |
60 compositor_frame_sink_id_(compositor_frame_sink_id), | 58 compositor_frame_sink_id_(compositor_frame_sink_id), |
61 compositor_frame_sink_filter_( | 59 compositor_frame_sink_filter_( |
62 RenderThreadImpl::current()->compositor_message_filter()), | 60 RenderThreadImpl::current()->compositor_message_filter()), |
63 message_sender_(RenderThreadImpl::current()->sync_message_filter()), | 61 message_sender_(RenderThreadImpl::current()->sync_message_filter()), |
64 frame_swap_message_queue_(swap_frame_message_queue), | 62 frame_swap_message_queue_(swap_frame_message_queue), |
65 begin_frame_source_(std::move(begin_frame_source)), | 63 begin_frame_source_(std::move(begin_frame_source)), |
66 routing_id_(routing_id) { | 64 routing_id_(routing_id) { |
67 DCHECK(compositor_frame_sink_filter_); | 65 DCHECK(compositor_frame_sink_filter_); |
68 DCHECK(frame_swap_message_queue_); | 66 DCHECK(frame_swap_message_queue_); |
69 DCHECK(message_sender_); | 67 DCHECK(message_sender_); |
70 DCHECK(begin_frame_source_); | 68 DCHECK(begin_frame_source_); |
71 capabilities_.delegated_rendering = true; | |
72 } | 69 } |
73 | 70 |
74 RendererCompositorFrameSink::~RendererCompositorFrameSink() = default; | 71 RendererCompositorFrameSink::~RendererCompositorFrameSink() = default; |
75 | 72 |
76 bool RendererCompositorFrameSink::BindToClient( | 73 bool RendererCompositorFrameSink::BindToClient( |
77 cc::CompositorFrameSinkClient* client) { | 74 cc::CompositorFrameSinkClient* client) { |
78 if (!cc::CompositorFrameSink::BindToClient(client)) | 75 if (!cc::CompositorFrameSink::BindToClient(client)) |
79 return false; | 76 return false; |
80 | 77 |
81 DCHECK(begin_frame_source_); | 78 DCHECK(begin_frame_source_); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 frame_swap_message_queue_->DrainMessages(&messages); | 113 frame_swap_message_queue_->DrainMessages(&messages); |
117 FrameSwapMessageQueue::TransferMessages(&messages, | 114 FrameSwapMessageQueue::TransferMessages(&messages, |
118 &messages_to_deliver_with_frame); | 115 &messages_to_deliver_with_frame); |
119 Send(new ViewHostMsg_SwapCompositorFrame(routing_id_, | 116 Send(new ViewHostMsg_SwapCompositorFrame(routing_id_, |
120 compositor_frame_sink_id_, frame, | 117 compositor_frame_sink_id_, frame, |
121 messages_to_deliver_with_frame)); | 118 messages_to_deliver_with_frame)); |
122 // ~send_message_scope. | 119 // ~send_message_scope. |
123 } | 120 } |
124 } | 121 } |
125 | 122 |
126 void RendererCompositorFrameSink::BindFramebuffer() { | |
127 // This is a delegating output surface, no framebuffer/direct drawing support. | |
128 NOTREACHED(); | |
129 } | |
130 | |
131 uint32_t RendererCompositorFrameSink::GetFramebufferCopyTextureFormat() { | |
132 // This is a delegating output surface, no framebuffer/direct drawing support. | |
133 NOTREACHED(); | |
134 return 0; | |
135 } | |
136 | |
137 void RendererCompositorFrameSink::OnMessageReceived( | 123 void RendererCompositorFrameSink::OnMessageReceived( |
138 const IPC::Message& message) { | 124 const IPC::Message& message) { |
139 DCHECK(client_thread_checker_.CalledOnValidThread()); | 125 DCHECK(client_thread_checker_.CalledOnValidThread()); |
140 if (!HasClient()) | 126 if (!HasClient()) |
141 return; | 127 return; |
142 IPC_BEGIN_MESSAGE_MAP(RendererCompositorFrameSink, message) | 128 IPC_BEGIN_MESSAGE_MAP(RendererCompositorFrameSink, message) |
143 IPC_MESSAGE_HANDLER(ViewMsg_ReclaimCompositorResources, | 129 IPC_MESSAGE_HANDLER(ViewMsg_ReclaimCompositorResources, |
144 OnReclaimCompositorResources); | 130 OnReclaimCompositorResources); |
145 IPC_END_MESSAGE_MAP() | 131 IPC_END_MESSAGE_MAP() |
146 } | 132 } |
147 | 133 |
148 void RendererCompositorFrameSink::OnReclaimCompositorResources( | 134 void RendererCompositorFrameSink::OnReclaimCompositorResources( |
149 uint32_t compositor_frame_sink_id, | 135 uint32_t compositor_frame_sink_id, |
150 bool is_swap_ack, | 136 bool is_swap_ack, |
151 const cc::ReturnedResourceArray& resources) { | 137 const cc::ReturnedResourceArray& resources) { |
152 // Ignore message if it's a stale one coming from a different output surface | 138 // Ignore message if it's a stale one coming from a different output surface |
153 // (e.g. after a lost context). | 139 // (e.g. after a lost context). |
154 if (compositor_frame_sink_id != compositor_frame_sink_id_) | 140 if (compositor_frame_sink_id != compositor_frame_sink_id_) |
155 return; | 141 return; |
156 client_->ReclaimResources(resources); | 142 client_->ReclaimResources(resources); |
157 if (is_swap_ack) | 143 if (is_swap_ack) |
158 client_->DidSwapBuffersComplete(); | 144 client_->DidSwapBuffersComplete(); |
159 } | 145 } |
160 | 146 |
161 bool RendererCompositorFrameSink::Send(IPC::Message* message) { | 147 bool RendererCompositorFrameSink::Send(IPC::Message* message) { |
162 return message_sender_->Send(message); | 148 return message_sender_->Send(message); |
163 } | 149 } |
164 | 150 |
165 } // namespace content | 151 } // namespace content |
OLD | NEW |