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 |