Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: content/renderer/gpu/renderer_compositor_frame_sink.cc

Issue 2728183002: RendererCompositorFrameSink should handle local surface id allocation (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 111
112 cc::CompositorFrameSink::DetachFromClient(); 112 cc::CompositorFrameSink::DetachFromClient();
113 bound_ = false; 113 bound_ = false;
114 } 114 }
115 115
116 void RendererCompositorFrameSink::SubmitCompositorFrame( 116 void RendererCompositorFrameSink::SubmitCompositorFrame(
117 cc::CompositorFrame frame) { 117 cc::CompositorFrame frame) {
118 // We should only submit CompositorFrames with valid BeginFrameAcks. 118 // We should only submit CompositorFrames with valid BeginFrameAcks.
119 DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, 119 DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber,
120 frame.metadata.begin_frame_ack.sequence_number); 120 frame.metadata.begin_frame_ack.sequence_number);
121 if (ShouldAllocateNewLocalSurfaceId(frame))
122 local_surface_id_ = id_allocator_.GenerateId();
123 UpdateFrameData(frame);
121 { 124 {
122 std::unique_ptr<FrameSwapMessageQueue::SendMessageScope> 125 std::unique_ptr<FrameSwapMessageQueue::SendMessageScope>
123 send_message_scope = 126 send_message_scope =
124 frame_swap_message_queue_->AcquireSendMessageScope(); 127 frame_swap_message_queue_->AcquireSendMessageScope();
125 std::vector<std::unique_ptr<IPC::Message>> messages; 128 std::vector<std::unique_ptr<IPC::Message>> messages;
126 std::vector<IPC::Message> messages_to_deliver_with_frame; 129 std::vector<IPC::Message> messages_to_deliver_with_frame;
127 frame_swap_message_queue_->DrainMessages(&messages); 130 frame_swap_message_queue_->DrainMessages(&messages);
128 FrameSwapMessageQueue::TransferMessages(&messages, 131 FrameSwapMessageQueue::TransferMessages(&messages,
129 &messages_to_deliver_with_frame); 132 &messages_to_deliver_with_frame);
130 Send(new ViewHostMsg_SwapCompositorFrame(routing_id_, 133 Send(new ViewHostMsg_SwapCompositorFrame(
131 compositor_frame_sink_id_, frame, 134 routing_id_, compositor_frame_sink_id_, local_surface_id_, frame,
132 messages_to_deliver_with_frame)); 135 messages_to_deliver_with_frame));
133 // ~send_message_scope. 136 // ~send_message_scope.
134 } 137 }
135 } 138 }
136 139
137 void RendererCompositorFrameSink::OnMessageReceived( 140 void RendererCompositorFrameSink::OnMessageReceived(
138 const IPC::Message& message) { 141 const IPC::Message& message) {
139 DCHECK(thread_checker_.CalledOnValidThread()); 142 DCHECK(thread_checker_.CalledOnValidThread());
140 IPC_BEGIN_MESSAGE_MAP(RendererCompositorFrameSink, message) 143 IPC_BEGIN_MESSAGE_MAP(RendererCompositorFrameSink, message)
141 IPC_MESSAGE_HANDLER(ViewMsg_ReclaimCompositorResources, 144 IPC_MESSAGE_HANDLER(ViewMsg_ReclaimCompositorResources,
142 OnReclaimCompositorResources); 145 OnReclaimCompositorResources);
(...skipping 10 matching lines...) Expand all
153 return; 156 return;
154 client_->ReclaimResources(resources); 157 client_->ReclaimResources(resources);
155 if (is_swap_ack) 158 if (is_swap_ack)
156 client_->DidReceiveCompositorFrameAck(); 159 client_->DidReceiveCompositorFrameAck();
157 } 160 }
158 161
159 bool RendererCompositorFrameSink::Send(IPC::Message* message) { 162 bool RendererCompositorFrameSink::Send(IPC::Message* message) {
160 return message_sender_->Send(message); 163 return message_sender_->Send(message);
161 } 164 }
162 165
166 bool RendererCompositorFrameSink::ShouldAllocateNewLocalSurfaceId(
167 const cc::CompositorFrame& frame) {
168 cc::RenderPass* root_pass = frame.render_pass_list.back().get();
169 gfx::Size frame_size = root_pass->output_rect.size();
170
171 // Once the proposal in crbug.com/689754 is implemented, the LocalSurfaceId
172 // allocation logic will be unified across all platforms.
173 return !local_surface_id_.is_valid() ||
174 current_frame_data_.device_scale_factor !=
175 frame.metadata.device_scale_factor ||
176 #ifdef OS_ANDROID
177 current_frame_data_.top_controls_height !=
178 frame.metadata.top_controls_height ||
179 current_frame_data_.top_controls_shown_ratio !=
180 frame.metadata.top_controls_shown_ratio ||
181 current_frame_data_.bottom_controls_height !=
182 frame.metadata.bottom_controls_height ||
183 current_frame_data_.bottom_controls_shown_ratio !=
184 frame.metadata.bottom_controls_shown_ratio ||
185 current_frame_data_.viewport_selection != frame.metadata.selection ||
186 current_frame_data_.has_transparent_background !=
187 root_pass->has_transparent_background ||
188 #endif
189 current_frame_data_.frame_size != frame_size;
190 }
191
192 void RendererCompositorFrameSink::UpdateFrameData(
193 const cc::CompositorFrame& frame) {
194 cc::RenderPass* root_pass = frame.render_pass_list.back().get();
195 gfx::Size frame_size = root_pass->output_rect.size();
196
197 current_frame_data_.frame_size = frame_size;
198 current_frame_data_.device_scale_factor = frame.metadata.device_scale_factor;
199 #ifdef OS_ANDROID
200 current_frame_data_.top_controls_height = frame.metadata.top_controls_height;
201 current_frame_data_.top_controls_shown_ratio =
202 frame.metadata.top_controls_shown_ratio;
203 current_frame_data_.bottom_controls_height =
204 frame.metadata.bottom_controls_height;
205 current_frame_data_.bottom_controls_shown_ratio =
206 frame.metadata.bottom_controls_shown_ratio;
207 current_frame_data_.viewport_selection = frame.metadata.selection;
208 current_frame_data_.has_transparent_background =
209 root_pass->has_transparent_background;
210 #endif
211 }
212
163 } // namespace content 213 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/gpu/renderer_compositor_frame_sink.h ('k') | content/test/test_render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698