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

Side by Side Diff: content/renderer/child_frame_compositing_helper.cc

Issue 590523003: Remove some dead BrowserPlugin and OOPIF compositing code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 6 years, 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/child_frame_compositing_helper.h" 5 #include "content/renderer/child_frame_compositing_helper.h"
6 6
7 #include "cc/blink/web_layer_impl.h" 7 #include "cc/blink/web_layer_impl.h"
8 #include "cc/layers/delegated_frame_provider.h" 8 #include "cc/layers/delegated_frame_provider.h"
9 #include "cc/layers/delegated_frame_resource_collection.h" 9 #include "cc/layers/delegated_frame_resource_collection.h"
10 #include "cc/layers/delegated_renderer_layer.h" 10 #include "cc/layers/delegated_renderer_layer.h"
11 #include "cc/layers/solid_color_layer.h" 11 #include "cc/layers/solid_color_layer.h"
12 #include "cc/layers/texture_layer.h"
13 #include "cc/output/context_provider.h" 12 #include "cc/output/context_provider.h"
14 #include "cc/output/copy_output_request.h" 13 #include "cc/output/copy_output_request.h"
15 #include "cc/output/copy_output_result.h" 14 #include "cc/output/copy_output_result.h"
16 #include "cc/resources/single_release_callback.h" 15 #include "cc/resources/single_release_callback.h"
17 #include "content/common/browser_plugin/browser_plugin_messages.h" 16 #include "content/common/browser_plugin/browser_plugin_messages.h"
18 #include "content/common/frame_messages.h" 17 #include "content/common/frame_messages.h"
19 #include "content/common/gpu/client/context_provider_command_buffer.h" 18 #include "content/common/gpu/client/context_provider_command_buffer.h"
20 #include "content/renderer/browser_plugin/browser_plugin.h" 19 #include "content/renderer/browser_plugin/browser_plugin.h"
21 #include "content/renderer/browser_plugin/browser_plugin_manager.h" 20 #include "content/renderer/browser_plugin/browser_plugin_manager.h"
22 #include "content/renderer/render_frame_impl.h" 21 #include "content/renderer/render_frame_impl.h"
23 #include "content/renderer/render_frame_proxy.h" 22 #include "content/renderer/render_frame_proxy.h"
24 #include "content/renderer/render_thread_impl.h" 23 #include "content/renderer/render_thread_impl.h"
25 #include "skia/ext/image_operations.h" 24 #include "skia/ext/image_operations.h"
26 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
27 #include "third_party/WebKit/public/web/WebFrame.h" 25 #include "third_party/WebKit/public/web/WebFrame.h"
28 #include "third_party/WebKit/public/web/WebPluginContainer.h" 26 #include "third_party/WebKit/public/web/WebPluginContainer.h"
29 #include "third_party/khronos/GLES2/gl2.h" 27 #include "third_party/khronos/GLES2/gl2.h"
30 #include "ui/gfx/size_conversions.h" 28 #include "ui/gfx/size_conversions.h"
31 #include "ui/gfx/skia_util.h" 29 #include "ui/gfx/skia_util.h"
32 30
33 namespace content { 31 namespace content {
34 32
35 ChildFrameCompositingHelper::SwapBuffersInfo::SwapBuffersInfo()
36 : route_id(0),
37 output_surface_id(0),
38 host_id(0),
39 software_frame_id(0),
40 shared_memory(NULL) {}
41
42 ChildFrameCompositingHelper* 33 ChildFrameCompositingHelper*
43 ChildFrameCompositingHelper::CreateForBrowserPlugin( 34 ChildFrameCompositingHelper::CreateForBrowserPlugin(
44 const base::WeakPtr<BrowserPlugin>& browser_plugin) { 35 const base::WeakPtr<BrowserPlugin>& browser_plugin) {
45 return new ChildFrameCompositingHelper( 36 return new ChildFrameCompositingHelper(
46 browser_plugin, NULL, NULL, browser_plugin->render_view_routing_id()); 37 browser_plugin, NULL, NULL, browser_plugin->render_view_routing_id());
47 } 38 }
48 39
49 ChildFrameCompositingHelper* 40 ChildFrameCompositingHelper*
50 ChildFrameCompositingHelper::CreateForRenderFrameProxy( 41 ChildFrameCompositingHelper::CreateForRenderFrameProxy(
51 RenderFrameProxy* render_frame_proxy) { 42 RenderFrameProxy* render_frame_proxy) {
52 return new ChildFrameCompositingHelper(base::WeakPtr<BrowserPlugin>(), 43 return new ChildFrameCompositingHelper(base::WeakPtr<BrowserPlugin>(),
53 render_frame_proxy->web_frame(), 44 render_frame_proxy->web_frame(),
54 render_frame_proxy, 45 render_frame_proxy,
55 render_frame_proxy->routing_id()); 46 render_frame_proxy->routing_id());
56 } 47 }
57 48
58 ChildFrameCompositingHelper::ChildFrameCompositingHelper( 49 ChildFrameCompositingHelper::ChildFrameCompositingHelper(
59 const base::WeakPtr<BrowserPlugin>& browser_plugin, 50 const base::WeakPtr<BrowserPlugin>& browser_plugin,
60 blink::WebFrame* frame, 51 blink::WebFrame* frame,
61 RenderFrameProxy* render_frame_proxy, 52 RenderFrameProxy* render_frame_proxy,
62 int host_routing_id) 53 int host_routing_id)
63 : host_routing_id_(host_routing_id), 54 : host_routing_id_(host_routing_id),
64 last_route_id_(0), 55 last_route_id_(0),
65 last_output_surface_id_(0), 56 last_output_surface_id_(0),
66 last_host_id_(0), 57 last_host_id_(0),
67 last_mailbox_valid_(false),
68 ack_pending_(true), 58 ack_pending_(true),
69 software_ack_pending_(false),
70 opaque_(true), 59 opaque_(true),
71 browser_plugin_(browser_plugin), 60 browser_plugin_(browser_plugin),
72 render_frame_proxy_(render_frame_proxy), 61 render_frame_proxy_(render_frame_proxy),
73 frame_(frame) {} 62 frame_(frame) {}
74 63
75 ChildFrameCompositingHelper::~ChildFrameCompositingHelper() {} 64 ChildFrameCompositingHelper::~ChildFrameCompositingHelper() {}
76 65
77 BrowserPluginManager* ChildFrameCompositingHelper::GetBrowserPluginManager() { 66 BrowserPluginManager* ChildFrameCompositingHelper::GetBrowserPluginManager() {
78 if (!browser_plugin_) 67 if (!browser_plugin_)
79 return NULL; 68 return NULL;
(...skipping 22 matching lines...) Expand all
102 if (GetBrowserPluginManager()) { 91 if (GetBrowserPluginManager()) {
103 GetBrowserPluginManager()->Send( 92 GetBrowserPluginManager()->Send(
104 new BrowserPluginHostMsg_CompositorFrameSwappedACK( 93 new BrowserPluginHostMsg_CompositorFrameSwappedACK(
105 host_routing_id_, GetInstanceID(), params)); 94 host_routing_id_, GetInstanceID(), params));
106 } else if (render_frame_proxy_) { 95 } else if (render_frame_proxy_) {
107 render_frame_proxy_->Send( 96 render_frame_proxy_->Send(
108 new FrameHostMsg_CompositorFrameSwappedACK(host_routing_id_, params)); 97 new FrameHostMsg_CompositorFrameSwappedACK(host_routing_id_, params));
109 } 98 }
110 } 99 }
111 100
112 void ChildFrameCompositingHelper::SendBuffersSwappedACKToBrowser(
113 FrameHostMsg_BuffersSwappedACK_Params& params) {
114 // This function will be removed when BrowserPluginManager is removed and
115 // BrowserPlugin is modified to use a RenderFrame.
116 if (GetBrowserPluginManager()) {
117 GetBrowserPluginManager()->Send(new BrowserPluginHostMsg_BuffersSwappedACK(
118 host_routing_id_, params));
119 } else if (render_frame_proxy_) {
120 render_frame_proxy_->Send(
121 new FrameHostMsg_BuffersSwappedACK(host_routing_id_, params));
122 }
123 }
124
125 void ChildFrameCompositingHelper::SendReclaimCompositorResourcesToBrowser( 101 void ChildFrameCompositingHelper::SendReclaimCompositorResourcesToBrowser(
126 FrameHostMsg_ReclaimCompositorResources_Params& params) { 102 FrameHostMsg_ReclaimCompositorResources_Params& params) {
127 // This function will be removed when BrowserPluginManager is removed and 103 // This function will be removed when BrowserPluginManager is removed and
128 // BrowserPlugin is modified to use a RenderFrame. 104 // BrowserPlugin is modified to use a RenderFrame.
129 if (GetBrowserPluginManager()) { 105 if (GetBrowserPluginManager()) {
130 GetBrowserPluginManager()->Send( 106 GetBrowserPluginManager()->Send(
131 new BrowserPluginHostMsg_ReclaimCompositorResources( 107 new BrowserPluginHostMsg_ReclaimCompositorResources(
132 host_routing_id_, GetInstanceID(), params)); 108 host_routing_id_, GetInstanceID(), params));
133 } else if (render_frame_proxy_) { 109 } else if (render_frame_proxy_) {
134 render_frame_proxy_->Send( 110 render_frame_proxy_->Send(
(...skipping 10 matching lines...) Expand all
145 cc::CopyOutputRequest::CreateBitmapRequest(base::Bind( 121 cc::CopyOutputRequest::CreateBitmapRequest(base::Bind(
146 &ChildFrameCompositingHelper::CopyFromCompositingSurfaceHasResult, 122 &ChildFrameCompositingHelper::CopyFromCompositingSurfaceHasResult,
147 this, 123 this,
148 request_id, 124 request_id,
149 dest_size)); 125 dest_size));
150 request->set_area(source_rect); 126 request->set_area(source_rect);
151 background_layer_->RequestCopyOfOutput(request.Pass()); 127 background_layer_->RequestCopyOfOutput(request.Pass());
152 } 128 }
153 129
154 void ChildFrameCompositingHelper::DidCommitCompositorFrame() { 130 void ChildFrameCompositingHelper::DidCommitCompositorFrame() {
155 if (software_ack_pending_) {
156 FrameHostMsg_CompositorFrameSwappedACK_Params params;
157 params.producing_host_id = last_host_id_;
158 params.producing_route_id = last_route_id_;
159 params.output_surface_id = last_output_surface_id_;
160 if (!unacked_software_frames_.empty()) {
161 params.ack.last_software_frame_id = unacked_software_frames_.back();
162 unacked_software_frames_.pop_back();
163 }
164
165 SendCompositorFrameSwappedACKToBrowser(params);
166
167 software_ack_pending_ = false;
168 }
169 if (!resource_collection_.get() || !ack_pending_) 131 if (!resource_collection_.get() || !ack_pending_)
170 return; 132 return;
171 133
172 FrameHostMsg_CompositorFrameSwappedACK_Params params; 134 FrameHostMsg_CompositorFrameSwappedACK_Params params;
173 params.producing_host_id = last_host_id_; 135 params.producing_host_id = last_host_id_;
174 params.producing_route_id = last_route_id_; 136 params.producing_route_id = last_route_id_;
175 params.output_surface_id = last_output_surface_id_; 137 params.output_surface_id = last_output_surface_id_;
176 resource_collection_->TakeUnusedResourcesForChildCompositor( 138 resource_collection_->TakeUnusedResourcesForChildCompositor(
177 &params.ack.resources); 139 &params.ack.resources);
178 140
(...skipping 30 matching lines...) Expand all
209 gfx::Size device_scale_adjusted_size = gfx::ToFlooredSize( 171 gfx::Size device_scale_adjusted_size = gfx::ToFlooredSize(
210 gfx::ScaleSize(buffer_size_, 1.0f / device_scale_factor)); 172 gfx::ScaleSize(buffer_size_, 1.0f / device_scale_factor));
211 layer->SetBounds(device_scale_adjusted_size); 173 layer->SetBounds(device_scale_adjusted_size);
212 } 174 }
213 175
214 // Manually manage background layer for transparent webview. 176 // Manually manage background layer for transparent webview.
215 if (!opaque_) 177 if (!opaque_)
216 background_layer_->SetIsDrawable(false); 178 background_layer_->SetIsDrawable(false);
217 } 179 }
218 180
219 void ChildFrameCompositingHelper::MailboxReleased(SwapBuffersInfo mailbox,
220 uint32 sync_point,
221 bool lost_resource) {
222 if (mailbox.type == SOFTWARE_COMPOSITOR_FRAME) {
223 delete mailbox.shared_memory;
224 mailbox.shared_memory = NULL;
225 } else if (lost_resource) {
226 // Reset mailbox's name if the resource was lost.
227 mailbox.name.SetZero();
228 }
229
230 // This means the GPU process crashed or guest crashed.
231 if (last_host_id_ != mailbox.host_id ||
232 last_output_surface_id_ != mailbox.output_surface_id ||
233 last_route_id_ != mailbox.route_id)
234 return;
235
236 if (mailbox.type == SOFTWARE_COMPOSITOR_FRAME)
237 unacked_software_frames_.push_back(mailbox.software_frame_id);
238
239 // We need to send an ACK to for every buffer sent to us.
240 // However, if a buffer is freed up from
241 // the compositor in cases like switching back to SW mode without a new
242 // buffer arriving, no ACK is needed.
243 if (!ack_pending_) {
244 last_mailbox_valid_ = false;
245 return;
246 }
247 ack_pending_ = false;
248 switch (mailbox.type) {
249 case TEXTURE_IMAGE_TRANSPORT: {
250 FrameHostMsg_BuffersSwappedACK_Params params;
251 params.gpu_host_id = mailbox.host_id;
252 params.gpu_route_id = mailbox.route_id;
253 params.mailbox = mailbox.name;
254 params.sync_point = sync_point;
255 SendBuffersSwappedACKToBrowser(params);
256 break;
257 }
258 case GL_COMPOSITOR_FRAME: {
259 FrameHostMsg_CompositorFrameSwappedACK_Params params;
260 params.producing_host_id = mailbox.host_id;
261 params.producing_route_id = mailbox.route_id;
262 params.output_surface_id = mailbox.output_surface_id;
263 params.ack.gl_frame_data.reset(new cc::GLFrameData());
264 params.ack.gl_frame_data->mailbox = mailbox.name;
265 params.ack.gl_frame_data->size = mailbox.size;
266 params.ack.gl_frame_data->sync_point = sync_point;
267 SendCompositorFrameSwappedACKToBrowser(params);
268 break;
269 }
270 case SOFTWARE_COMPOSITOR_FRAME:
271 break;
272 }
273 }
274
275 void ChildFrameCompositingHelper::OnContainerDestroy() { 181 void ChildFrameCompositingHelper::OnContainerDestroy() {
276 if (GetContainer()) 182 if (GetContainer())
277 GetContainer()->setWebLayer(NULL); 183 GetContainer()->setWebLayer(NULL);
278 184
279 if (resource_collection_.get()) 185 if (resource_collection_.get())
280 resource_collection_->SetClient(NULL); 186 resource_collection_->SetClient(NULL);
281 187
282 ack_pending_ = false; 188 ack_pending_ = false;
283 software_ack_pending_ = false;
284 resource_collection_ = NULL; 189 resource_collection_ = NULL;
285 frame_provider_ = NULL; 190 frame_provider_ = NULL;
286 texture_layer_ = NULL;
287 delegated_layer_ = NULL; 191 delegated_layer_ = NULL;
288 background_layer_ = NULL; 192 background_layer_ = NULL;
289 web_layer_.reset(); 193 web_layer_.reset();
290 } 194 }
291 195
292 void ChildFrameCompositingHelper::ChildFrameGone() { 196 void ChildFrameCompositingHelper::ChildFrameGone() {
293 background_layer_->SetBackgroundColor(SkColorSetARGBInline(255, 0, 128, 0)); 197 background_layer_->SetBackgroundColor(SkColorSetARGBInline(255, 0, 128, 0));
294 background_layer_->RemoveAllChildren(); 198 background_layer_->RemoveAllChildren();
295 background_layer_->SetIsDrawable(true); 199 background_layer_->SetIsDrawable(true);
296 background_layer_->SetContentsOpaque(true); 200 background_layer_->SetContentsOpaque(true);
297 } 201 }
298 202
299 void ChildFrameCompositingHelper::OnBuffersSwappedPrivate(
300 const SwapBuffersInfo& mailbox,
301 uint32 sync_point,
302 float device_scale_factor) {
303 DCHECK(!delegated_layer_.get());
304 // If these mismatch, we are either just starting up, GPU process crashed or
305 // guest renderer crashed.
306 // In this case, we are communicating with a new image transport
307 // surface and must ACK with the new ID's and an empty mailbox.
308 if (last_route_id_ != mailbox.route_id ||
309 last_output_surface_id_ != mailbox.output_surface_id ||
310 last_host_id_ != mailbox.host_id)
311 last_mailbox_valid_ = false;
312
313 last_route_id_ = mailbox.route_id;
314 last_output_surface_id_ = mailbox.output_surface_id;
315 last_host_id_ = mailbox.host_id;
316
317 ack_pending_ = true;
318 // Browser plugin getting destroyed, do a fast ACK.
319 if (!background_layer_.get()) {
320 MailboxReleased(mailbox, sync_point, false);
321 return;
322 }
323
324 if (!texture_layer_.get()) {
325 texture_layer_ = cc::TextureLayer::CreateForMailbox(NULL);
326 texture_layer_->SetIsDrawable(true);
327 SetContentsOpaque(opaque_);
328
329 background_layer_->AddChild(texture_layer_);
330 }
331
332 // The size of browser plugin container is not always equal to the size
333 // of the buffer that arrives here. This could be for a number of reasons,
334 // including autosize and a resize in progress.
335 // During resize, the container size changes first and then some time
336 // later, a new buffer with updated size will arrive. During this process,
337 // we need to make sure that things are still displayed pixel perfect.
338 // We accomplish this by modifying bounds of the texture layer only
339 // when a new buffer arrives.
340 // Visually, this will either display a smaller part of the buffer
341 // or introduce a gutter around it.
342 CheckSizeAndAdjustLayerProperties(
343 mailbox.size, device_scale_factor, texture_layer_.get());
344
345 bool is_software_frame = mailbox.type == SOFTWARE_COMPOSITOR_FRAME;
346 bool current_mailbox_valid = is_software_frame ? mailbox.shared_memory != NULL
347 : !mailbox.name.IsZero();
348 if (!is_software_frame && !last_mailbox_valid_) {
349 SwapBuffersInfo empty_info = mailbox;
350 empty_info.name.SetZero();
351 MailboxReleased(empty_info, 0, false);
352 if (!current_mailbox_valid)
353 return;
354 }
355
356 cc::TextureMailbox texture_mailbox;
357 scoped_ptr<cc::SingleReleaseCallback> release_callback;
358 if (current_mailbox_valid) {
359 release_callback =
360 cc::SingleReleaseCallback::Create(
361 base::Bind(&ChildFrameCompositingHelper::MailboxReleased,
362 scoped_refptr<ChildFrameCompositingHelper>(this),
363 mailbox)).Pass();
364 if (is_software_frame) {
365 texture_mailbox = cc::TextureMailbox(mailbox.shared_memory, mailbox.size);
366 } else {
367 texture_mailbox =
368 cc::TextureMailbox(mailbox.name, GL_TEXTURE_2D, sync_point);
369 }
370 }
371
372 texture_layer_->SetFlipped(!is_software_frame);
373 texture_layer_->SetTextureMailbox(texture_mailbox, release_callback.Pass());
374 texture_layer_->SetNeedsDisplay();
375 last_mailbox_valid_ = current_mailbox_valid;
376 }
377
378 void ChildFrameCompositingHelper::OnBuffersSwapped(
379 const gfx::Size& size,
380 const gpu::Mailbox& mailbox,
381 int gpu_route_id,
382 int gpu_host_id,
383 float device_scale_factor) {
384 SwapBuffersInfo swap_info;
385 swap_info.name = mailbox;
386 swap_info.type = TEXTURE_IMAGE_TRANSPORT;
387 swap_info.size = size;
388 swap_info.route_id = gpu_route_id;
389 swap_info.output_surface_id = 0;
390 swap_info.host_id = gpu_host_id;
391 OnBuffersSwappedPrivate(swap_info, 0, device_scale_factor);
392 }
393
394 void ChildFrameCompositingHelper::OnCompositorFrameSwapped( 203 void ChildFrameCompositingHelper::OnCompositorFrameSwapped(
395 scoped_ptr<cc::CompositorFrame> frame, 204 scoped_ptr<cc::CompositorFrame> frame,
396 int route_id, 205 int route_id,
397 uint32 output_surface_id, 206 uint32 output_surface_id,
398 int host_id, 207 int host_id,
399 base::SharedMemoryHandle handle) { 208 base::SharedMemoryHandle handle) {
400
401 if (frame->gl_frame_data) {
402 SwapBuffersInfo swap_info;
403 swap_info.name = frame->gl_frame_data->mailbox;
404 swap_info.type = GL_COMPOSITOR_FRAME;
405 swap_info.size = frame->gl_frame_data->size;
406 swap_info.route_id = route_id;
407 swap_info.output_surface_id = output_surface_id;
408 swap_info.host_id = host_id;
409 OnBuffersSwappedPrivate(swap_info,
410 frame->gl_frame_data->sync_point,
411 frame->metadata.device_scale_factor);
412 return;
413 }
414
415 if (frame->software_frame_data) {
416 cc::SoftwareFrameData* frame_data = frame->software_frame_data.get();
417
418 SwapBuffersInfo swap_info;
419 swap_info.type = SOFTWARE_COMPOSITOR_FRAME;
420 swap_info.size = frame_data->size;
421 swap_info.route_id = route_id;
422 swap_info.output_surface_id = output_surface_id;
423 swap_info.host_id = host_id;
424 swap_info.software_frame_id = frame_data->id;
425
426 scoped_ptr<base::SharedMemory> shared_memory(
427 new base::SharedMemory(handle, true));
428 const size_t size_in_bytes = 4 * frame_data->size.GetArea();
429 if (!shared_memory->Map(size_in_bytes)) {
430 LOG(ERROR) << "Failed to map shared memory of size " << size_in_bytes;
431 // Send ACK right away.
432 software_ack_pending_ = true;
433 MailboxReleased(swap_info, 0, false);
434 DidCommitCompositorFrame();
435 return;
436 }
437
438 swap_info.shared_memory = shared_memory.release();
439 OnBuffersSwappedPrivate(swap_info, 0, frame->metadata.device_scale_factor);
440 software_ack_pending_ = true;
441 last_route_id_ = route_id;
442 last_output_surface_id_ = output_surface_id;
443 last_host_id_ = host_id;
444 return;
445 }
446
447 DCHECK(!texture_layer_.get());
448
449 cc::DelegatedFrameData* frame_data = frame->delegated_frame_data.get(); 209 cc::DelegatedFrameData* frame_data = frame->delegated_frame_data.get();
450 // Do nothing if we are getting destroyed or have no frame data. 210 // Do nothing if we are getting destroyed or have no frame data.
451 if (!frame_data || !background_layer_.get()) 211 if (!frame_data || !background_layer_.get())
452 return; 212 return;
453 213
454 DCHECK(!frame_data->render_pass_list.empty()); 214 DCHECK(!frame_data->render_pass_list.empty());
455 cc::RenderPass* root_pass = frame_data->render_pass_list.back(); 215 cc::RenderPass* root_pass = frame_data->render_pass_list.back();
456 gfx::Size frame_size = root_pass->output_rect.size(); 216 gfx::Size frame_size = root_pass->output_rect.size();
457 217
458 if (last_route_id_ != route_id || 218 if (last_route_id_ != route_id ||
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 260
501 CheckSizeAndAdjustLayerProperties( 261 CheckSizeAndAdjustLayerProperties(
502 frame_data->render_pass_list.back()->output_rect.size(), 262 frame_data->render_pass_list.back()->output_rect.size(),
503 frame->metadata.device_scale_factor, 263 frame->metadata.device_scale_factor,
504 delegated_layer_.get()); 264 delegated_layer_.get());
505 265
506 ack_pending_ = true; 266 ack_pending_ = true;
507 } 267 }
508 268
509 void ChildFrameCompositingHelper::UpdateVisibility(bool visible) { 269 void ChildFrameCompositingHelper::UpdateVisibility(bool visible) {
510 if (texture_layer_.get())
511 texture_layer_->SetIsDrawable(visible);
512 if (delegated_layer_.get()) 270 if (delegated_layer_.get())
513 delegated_layer_->SetIsDrawable(visible); 271 delegated_layer_->SetIsDrawable(visible);
514 } 272 }
515 273
516 void ChildFrameCompositingHelper::UnusedResourcesAreAvailable() { 274 void ChildFrameCompositingHelper::UnusedResourcesAreAvailable() {
517 if (ack_pending_) 275 if (ack_pending_)
518 return; 276 return;
519 277
520 SendReturnedDelegatedResources(); 278 SendReturnedDelegatedResources();
521 } 279 }
522 280
523 void ChildFrameCompositingHelper::SendReturnedDelegatedResources() { 281 void ChildFrameCompositingHelper::SendReturnedDelegatedResources() {
524 FrameHostMsg_ReclaimCompositorResources_Params params; 282 FrameHostMsg_ReclaimCompositorResources_Params params;
525 if (resource_collection_.get()) 283 if (resource_collection_.get())
526 resource_collection_->TakeUnusedResourcesForChildCompositor( 284 resource_collection_->TakeUnusedResourcesForChildCompositor(
527 &params.ack.resources); 285 &params.ack.resources);
528 DCHECK(!params.ack.resources.empty()); 286 DCHECK(!params.ack.resources.empty());
529 287
530 params.route_id = last_route_id_; 288 params.route_id = last_route_id_;
531 params.output_surface_id = last_output_surface_id_; 289 params.output_surface_id = last_output_surface_id_;
532 params.renderer_host_id = last_host_id_; 290 params.renderer_host_id = last_host_id_;
533 SendReclaimCompositorResourcesToBrowser(params); 291 SendReclaimCompositorResourcesToBrowser(params);
534 } 292 }
535 293
536 void ChildFrameCompositingHelper::SetContentsOpaque(bool opaque) { 294 void ChildFrameCompositingHelper::SetContentsOpaque(bool opaque) {
537 opaque_ = opaque; 295 opaque_ = opaque;
538
539 if (texture_layer_.get())
540 texture_layer_->SetContentsOpaque(opaque_);
541 if (delegated_layer_.get()) 296 if (delegated_layer_.get())
542 delegated_layer_->SetContentsOpaque(opaque_); 297 delegated_layer_->SetContentsOpaque(opaque_);
543 } 298 }
544 299
545 void ChildFrameCompositingHelper::CopyFromCompositingSurfaceHasResult( 300 void ChildFrameCompositingHelper::CopyFromCompositingSurfaceHasResult(
546 int request_id, 301 int request_id,
547 gfx::Size dest_size, 302 gfx::Size dest_size,
548 scoped_ptr<cc::CopyOutputResult> result) { 303 scoped_ptr<cc::CopyOutputResult> result) {
549 scoped_ptr<SkBitmap> bitmap; 304 scoped_ptr<SkBitmap> bitmap;
550 if (result && result->HasBitmap() && !result->size().IsEmpty()) 305 if (result && result->HasBitmap() && !result->size().IsEmpty())
551 bitmap = result->TakeBitmap(); 306 bitmap = result->TakeBitmap();
552 307
553 SkBitmap resized_bitmap; 308 SkBitmap resized_bitmap;
554 if (bitmap) { 309 if (bitmap) {
555 resized_bitmap = 310 resized_bitmap =
556 skia::ImageOperations::Resize(*bitmap, 311 skia::ImageOperations::Resize(*bitmap,
557 skia::ImageOperations::RESIZE_BEST, 312 skia::ImageOperations::RESIZE_BEST,
558 dest_size.width(), 313 dest_size.width(),
559 dest_size.height()); 314 dest_size.height());
560 } 315 }
561 if (GetBrowserPluginManager()) { 316 if (GetBrowserPluginManager()) {
562 GetBrowserPluginManager()->Send( 317 GetBrowserPluginManager()->Send(
563 new BrowserPluginHostMsg_CopyFromCompositingSurfaceAck( 318 new BrowserPluginHostMsg_CopyFromCompositingSurfaceAck(
564 host_routing_id_, GetInstanceID(), request_id, resized_bitmap)); 319 host_routing_id_, GetInstanceID(), request_id, resized_bitmap));
565 } 320 }
566 } 321 }
567 322
568 } // namespace content 323 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/child_frame_compositing_helper.h ('k') | content/renderer/render_frame_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698