OLD | NEW |
---|---|
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" |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
281 // static | 281 // static |
282 void ChildFrameCompositingHelper::RequireCallback( | 282 void ChildFrameCompositingHelper::RequireCallback( |
283 scoped_refptr<ThreadSafeSender> sender, | 283 scoped_refptr<ThreadSafeSender> sender, |
284 int host_routing_id, | 284 int host_routing_id, |
285 cc::SurfaceId id, | 285 cc::SurfaceId id, |
286 cc::SurfaceSequence sequence) { | 286 cc::SurfaceSequence sequence) { |
287 // This may be called on either the main or impl thread. | 287 // This may be called on either the main or impl thread. |
288 sender->Send(new FrameHostMsg_RequireSequence(host_routing_id, id, sequence)); | 288 sender->Send(new FrameHostMsg_RequireSequence(host_routing_id, id, sequence)); |
289 } | 289 } |
290 | 290 |
291 void ChildFrameCompositingHelper::RequireCallbackBrowserPlugin( | |
292 scoped_refptr<ThreadSafeSender> sender, | |
293 int host_routing_id, | |
294 int browser_plugin_instance_id, | |
295 cc::SurfaceId id, | |
296 cc::SurfaceSequence sequence) { | |
297 // This may be called on either the main or impl thread. | |
298 sender->Send(new BrowserPluginHostMsg_RequireSequence( | |
299 host_routing_id, browser_plugin_instance_id, id, sequence)); | |
300 } | |
301 | |
291 void ChildFrameCompositingHelper::OnSetSurface( | 302 void ChildFrameCompositingHelper::OnSetSurface( |
292 const cc::SurfaceId& surface_id, | 303 const cc::SurfaceId& surface_id, |
293 const gfx::Size& frame_size, | 304 const gfx::Size& frame_size, |
294 float scale_factor, | 305 float scale_factor, |
295 const cc::SurfaceSequence& sequence) { | 306 const cc::SurfaceSequence& sequence) { |
296 // Surface IDs and compositor frames should never be received | 307 // Surface IDs and compositor frames should never be received |
297 // interchangably. | 308 // interchangably. |
298 DCHECK(!delegated_layer_.get()); | 309 DCHECK(!delegated_layer_.get()); |
299 | 310 |
300 // Do nothing if we are getting destroyed. | 311 // Do nothing if we are getting destroyed. |
301 if (!background_layer_.get()) | 312 if (!background_layer_.get()) |
302 return; | 313 return; |
303 | 314 |
304 if (!surface_layer_.get()) { | 315 if (!surface_layer_.get()) { |
305 scoped_refptr<ThreadSafeSender> sender( | 316 scoped_refptr<ThreadSafeSender> sender( |
306 RenderThreadImpl::current()->thread_safe_sender()); | 317 RenderThreadImpl::current()->thread_safe_sender()); |
307 cc::SurfaceLayer::SatisfyCallback satisfy_callback = | 318 cc::SurfaceLayer::SatisfyCallback satisfy_callback = |
308 base::Bind(&ChildFrameCompositingHelper::SatisfyCallback, sender, | 319 base::Bind(&ChildFrameCompositingHelper::SatisfyCallback, sender, |
309 host_routing_id_); | 320 host_routing_id_); |
310 cc::SurfaceLayer::RequireCallback require_callback = | 321 cc::SurfaceLayer::RequireCallback require_callback = |
311 base::Bind(&ChildFrameCompositingHelper::RequireCallback, sender, | 322 render_frame_proxy_ |
312 host_routing_id_); | 323 ? base::Bind(&ChildFrameCompositingHelper::RequireCallback, sender, |
324 host_routing_id_) | |
325 : base::Bind( | |
326 &ChildFrameCompositingHelper::RequireCallbackBrowserPlugin, | |
327 sender, host_routing_id_, | |
328 browser_plugin_->browser_plugin_instance_id()); | |
313 surface_layer_ = | 329 surface_layer_ = |
314 cc::SurfaceLayer::Create(cc_blink::WebLayerImpl::LayerSettings(), | 330 cc::SurfaceLayer::Create(cc_blink::WebLayerImpl::LayerSettings(), |
315 satisfy_callback, require_callback); | 331 satisfy_callback, require_callback); |
316 } | 332 } |
317 surface_layer_->SetSurfaceId(surface_id, scale_factor, frame_size); | 333 surface_layer_->SetSurfaceId(surface_id, scale_factor, frame_size); |
318 UpdateVisibility(true); | 334 UpdateVisibility(true); |
319 SetContentsOpaque(opaque_); | 335 SetContentsOpaque(opaque_); |
320 background_layer_->AddChild(surface_layer_); | 336 background_layer_->AddChild(surface_layer_); |
321 | 337 |
322 // The RWHV creates a destruction dependency on the surface that needs to be | 338 // The RWHV creates a destruction dependency on the surface that needs to be |
323 // satisfied. | 339 // satisfied. Note: render_frame_proxy_ is null in the case our client is a |
324 render_frame_proxy_->Send( | 340 // BrowserPlugin; in this case the BrowserPlugin sends its own SatisfySequence |
325 new FrameHostMsg_SatisfySequence(host_routing_id_, sequence)); | 341 // message. |
kenrb
2015/06/10 20:43:39
This is okay, but is there a reason it is done by
wjmaclean
2015/06/10 21:05:02
I considered adding a new function in the BrowserP
| |
342 if (render_frame_proxy_) { | |
343 render_frame_proxy_->Send( | |
344 new FrameHostMsg_SatisfySequence(host_routing_id_, sequence)); | |
345 } | |
326 | 346 |
327 CheckSizeAndAdjustLayerProperties(frame_size, scale_factor, | 347 CheckSizeAndAdjustLayerProperties(frame_size, scale_factor, |
328 surface_layer_.get()); | 348 surface_layer_.get()); |
329 } | 349 } |
330 | 350 |
331 void ChildFrameCompositingHelper::UpdateVisibility(bool visible) { | 351 void ChildFrameCompositingHelper::UpdateVisibility(bool visible) { |
332 if (delegated_layer_.get()) | 352 if (delegated_layer_.get()) |
333 delegated_layer_->SetIsDrawable(visible); | 353 delegated_layer_->SetIsDrawable(visible); |
334 if (surface_layer_.get()) | 354 if (surface_layer_.get()) |
335 surface_layer_->SetIsDrawable(visible); | 355 surface_layer_->SetIsDrawable(visible); |
(...skipping 21 matching lines...) Expand all Loading... | |
357 | 377 |
358 void ChildFrameCompositingHelper::SetContentsOpaque(bool opaque) { | 378 void ChildFrameCompositingHelper::SetContentsOpaque(bool opaque) { |
359 opaque_ = opaque; | 379 opaque_ = opaque; |
360 if (delegated_layer_.get()) | 380 if (delegated_layer_.get()) |
361 delegated_layer_->SetContentsOpaque(opaque_); | 381 delegated_layer_->SetContentsOpaque(opaque_); |
362 if (surface_layer_.get()) | 382 if (surface_layer_.get()) |
363 surface_layer_->SetContentsOpaque(opaque_); | 383 surface_layer_->SetContentsOpaque(opaque_); |
364 } | 384 } |
365 | 385 |
366 } // namespace content | 386 } // namespace content |
OLD | NEW |