| 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. |
| 342 if (render_frame_proxy_) { |
| 343 render_frame_proxy_->Send( |
| 344 new FrameHostMsg_SatisfySequence(host_routing_id_, sequence)); |
| 345 } else if (browser_plugin_.get()) { |
| 346 browser_plugin_->SendSatisfySequence(sequence); |
| 347 } |
| 326 | 348 |
| 327 CheckSizeAndAdjustLayerProperties(frame_size, scale_factor, | 349 CheckSizeAndAdjustLayerProperties(frame_size, scale_factor, |
| 328 surface_layer_.get()); | 350 surface_layer_.get()); |
| 329 } | 351 } |
| 330 | 352 |
| 331 void ChildFrameCompositingHelper::UpdateVisibility(bool visible) { | 353 void ChildFrameCompositingHelper::UpdateVisibility(bool visible) { |
| 332 if (delegated_layer_.get()) | 354 if (delegated_layer_.get()) |
| 333 delegated_layer_->SetIsDrawable(visible); | 355 delegated_layer_->SetIsDrawable(visible); |
| 334 if (surface_layer_.get()) | 356 if (surface_layer_.get()) |
| 335 surface_layer_->SetIsDrawable(visible); | 357 surface_layer_->SetIsDrawable(visible); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 357 | 379 |
| 358 void ChildFrameCompositingHelper::SetContentsOpaque(bool opaque) { | 380 void ChildFrameCompositingHelper::SetContentsOpaque(bool opaque) { |
| 359 opaque_ = opaque; | 381 opaque_ = opaque; |
| 360 if (delegated_layer_.get()) | 382 if (delegated_layer_.get()) |
| 361 delegated_layer_->SetContentsOpaque(opaque_); | 383 delegated_layer_->SetContentsOpaque(opaque_); |
| 362 if (surface_layer_.get()) | 384 if (surface_layer_.get()) |
| 363 surface_layer_->SetContentsOpaque(opaque_); | 385 surface_layer_->SetContentsOpaque(opaque_); |
| 364 } | 386 } |
| 365 | 387 |
| 366 } // namespace content | 388 } // namespace content |
| OLD | NEW |