Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/browser_plugin/browser_plugin_compositing_helper.h" | 5 #include "content/renderer/browser_plugin/browser_plugin_compositing_helper.h" |
| 6 | 6 |
| 7 #include "cc/layers/delegated_frame_provider.h" | |
| 8 #include "cc/layers/delegated_frame_resource_collection.h" | |
| 7 #include "cc/layers/delegated_renderer_layer.h" | 9 #include "cc/layers/delegated_renderer_layer.h" |
| 8 #include "cc/layers/solid_color_layer.h" | 10 #include "cc/layers/solid_color_layer.h" |
| 9 #include "cc/layers/texture_layer.h" | 11 #include "cc/layers/texture_layer.h" |
| 10 #include "cc/output/context_provider.h" | 12 #include "cc/output/context_provider.h" |
| 11 #include "cc/resources/single_release_callback.h" | 13 #include "cc/resources/single_release_callback.h" |
| 12 #include "content/common/browser_plugin/browser_plugin_messages.h" | 14 #include "content/common/browser_plugin/browser_plugin_messages.h" |
| 13 #include "content/common/gpu/client/context_provider_command_buffer.h" | 15 #include "content/common/gpu/client/context_provider_command_buffer.h" |
| 14 #include "content/renderer/browser_plugin/browser_plugin_manager.h" | 16 #include "content/renderer/browser_plugin/browser_plugin_manager.h" |
| 15 #include "content/renderer/render_thread_impl.h" | 17 #include "content/renderer/render_thread_impl.h" |
| 16 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" | 18 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 61 new BrowserPluginHostMsg_CompositorFrameACK( | 63 new BrowserPluginHostMsg_CompositorFrameACK( |
| 62 host_routing_id_, | 64 host_routing_id_, |
| 63 instance_id_, | 65 instance_id_, |
| 64 last_route_id_, | 66 last_route_id_, |
| 65 last_output_surface_id_, | 67 last_output_surface_id_, |
| 66 last_host_id_, | 68 last_host_id_, |
| 67 ack)); | 69 ack)); |
| 68 | 70 |
| 69 software_ack_pending_ = false; | 71 software_ack_pending_ = false; |
| 70 } | 72 } |
| 71 if (!delegated_layer_.get() || !ack_pending_) | 73 if (!resource_collection_.get() || !ack_pending_) |
| 72 return; | 74 return; |
| 73 | 75 |
| 74 cc::CompositorFrameAck ack; | 76 cc::CompositorFrameAck ack; |
| 75 delegated_layer_->TakeUnusedResourcesForChildCompositor(&ack.resources); | 77 resource_collection_->TakeUnusedResourcesForChildCompositor(&ack.resources); |
| 76 | 78 |
| 77 browser_plugin_manager_->Send( | 79 browser_plugin_manager_->Send( |
| 78 new BrowserPluginHostMsg_CompositorFrameACK( | 80 new BrowserPluginHostMsg_CompositorFrameACK( |
| 79 host_routing_id_, | 81 host_routing_id_, |
| 80 instance_id_, | 82 instance_id_, |
| 81 last_route_id_, | 83 last_route_id_, |
| 82 last_output_surface_id_, | 84 last_output_surface_id_, |
| 83 last_host_id_, | 85 last_host_id_, |
| 84 ack)); | 86 ack)); |
| 85 | 87 |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 330 OnBuffersSwappedPrivate(swap_info, 0, | 332 OnBuffersSwappedPrivate(swap_info, 0, |
| 331 frame->metadata.device_scale_factor); | 333 frame->metadata.device_scale_factor); |
| 332 software_ack_pending_ = true; | 334 software_ack_pending_ = true; |
| 333 last_route_id_ = route_id; | 335 last_route_id_ = route_id; |
| 334 last_output_surface_id_ = output_surface_id; | 336 last_output_surface_id_ = output_surface_id; |
| 335 last_host_id_ = host_id; | 337 last_host_id_ = host_id; |
| 336 return; | 338 return; |
| 337 } | 339 } |
| 338 | 340 |
| 339 DCHECK(!texture_layer_.get()); | 341 DCHECK(!texture_layer_.get()); |
| 340 if (!delegated_layer_.get()) { | |
| 341 delegated_layer_ = cc::DelegatedRendererLayer::Create(NULL); | |
| 342 delegated_layer_->SetIsDrawable(true); | |
| 343 delegated_layer_->SetContentsOpaque(true); | |
| 344 | 342 |
| 345 background_layer_->AddChild(delegated_layer_); | 343 cc::DelegatedFrameData* frame_data = frame->delegated_frame_data.get(); |
| 346 } | |
| 347 | |
| 348 cc::DelegatedFrameData *frame_data = frame->delegated_frame_data.get(); | |
| 349 if (!frame_data) | 344 if (!frame_data) |
| 350 return; | 345 return; |
| 351 | 346 |
| 352 CheckSizeAndAdjustLayerBounds( | 347 CheckSizeAndAdjustLayerBounds( |
| 353 frame_data->render_pass_list.back()->output_rect.size(), | 348 frame_data->render_pass_list.back()->output_rect.size(), |
| 354 frame->metadata.device_scale_factor, | 349 frame->metadata.device_scale_factor, |
| 355 delegated_layer_.get()); | 350 delegated_layer_.get()); |
|
alexst (slow to review)
2013/10/04 23:32:44
One more comment, this is trouble here. delegated_
danakj
2013/10/07 21:57:40
Ah, sorry my bad. I've moved this down.
| |
| 356 | 351 |
| 357 delegated_layer_->SetFrameData(frame->delegated_frame_data.Pass()); | 352 DCHECK_NE(0u, frame_data->render_pass_list.size()); |
| 353 cc::RenderPass* root_pass = frame_data->render_pass_list.back(); | |
| 354 gfx::Size frame_size = root_pass->output_rect.size(); | |
| 355 | |
| 356 if (!resource_collection_) { | |
| 357 resource_collection_ = new cc::DelegatedFrameResourceCollection; | |
| 358 // TODO(danakj): Could return resources sooner if we set a client here and | |
| 359 // listened for UnusedResourcesAreAvailable(). | |
| 360 } | |
| 361 if (!frame_provider_.get() || frame_provider_->frame_size() != frame_size) { | |
| 362 frame_provider_ = new cc::DelegatedFrameProvider( | |
| 363 resource_collection_.get(), frame->delegated_frame_data.Pass()); | |
| 364 if (delegated_layer_.get()) | |
| 365 delegated_layer_->RemoveFromParent(); | |
| 366 delegated_layer_ = | |
| 367 cc::DelegatedRendererLayer::Create(NULL, frame_provider_.get()); | |
| 368 delegated_layer_->SetIsDrawable(true); | |
| 369 delegated_layer_->SetContentsOpaque(true); | |
| 370 background_layer_->AddChild(delegated_layer_); | |
| 371 } else { | |
| 372 frame_provider_->SetFrameData(frame->delegated_frame_data.Pass()); | |
| 373 } | |
| 374 | |
| 358 last_route_id_ = route_id; | 375 last_route_id_ = route_id; |
| 359 last_output_surface_id_ = output_surface_id; | 376 last_output_surface_id_ = output_surface_id; |
| 360 last_host_id_ = host_id; | 377 last_host_id_ = host_id; |
| 361 ack_pending_ = true; | 378 ack_pending_ = true; |
| 362 } | 379 } |
| 363 | 380 |
| 364 void BrowserPluginCompositingHelper::UpdateVisibility(bool visible) { | 381 void BrowserPluginCompositingHelper::UpdateVisibility(bool visible) { |
| 365 if (texture_layer_.get()) | 382 if (texture_layer_.get()) |
| 366 texture_layer_->SetIsDrawable(visible); | 383 texture_layer_->SetIsDrawable(visible); |
| 367 if (delegated_layer_.get()) | 384 if (delegated_layer_.get()) |
| 368 delegated_layer_->SetIsDrawable(visible); | 385 delegated_layer_->SetIsDrawable(visible); |
| 369 } | 386 } |
| 370 | 387 |
| 371 } // namespace content | 388 } // namespace content |
| OLD | NEW |