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

Side by Side Diff: content/renderer/browser_plugin/browser_plugin_compositing_helper.cc

Issue 26023004: aura: Allow delegated frames to be used by more than one impl layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: frameprovider: are_layers_attached checks Created 7 years, 2 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 | Annotate | Revision Log
OLDNEW
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
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
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()) { 342
341 delegated_layer_ = cc::DelegatedRendererLayer::Create(NULL); 343 cc::DelegatedFrameData* frame_data = frame->delegated_frame_data.get();
344 if (!frame_data)
345 return;
346
347 DCHECK(!frame_data->render_pass_list.empty());
348 cc::RenderPass* root_pass = frame_data->render_pass_list.back();
349 gfx::Size frame_size = root_pass->output_rect.size();
350
351 if (!resource_collection_) {
352 resource_collection_ = new cc::DelegatedFrameResourceCollection;
353 // TODO(danakj): Could return resources sooner if we set a client here and
354 // listened for UnusedResourcesAreAvailable().
355 }
356 if (!frame_provider_.get() || frame_provider_->frame_size() != frame_size) {
357 frame_provider_ = new cc::DelegatedFrameProvider(
358 resource_collection_.get(), frame->delegated_frame_data.Pass());
359 if (delegated_layer_.get())
360 delegated_layer_->RemoveFromParent();
361 delegated_layer_ =
362 cc::DelegatedRendererLayer::Create(NULL, frame_provider_.get());
342 delegated_layer_->SetIsDrawable(true); 363 delegated_layer_->SetIsDrawable(true);
343 delegated_layer_->SetContentsOpaque(true); 364 delegated_layer_->SetContentsOpaque(true);
344
345 background_layer_->AddChild(delegated_layer_); 365 background_layer_->AddChild(delegated_layer_);
366 } else {
367 frame_provider_->SetFrameData(frame->delegated_frame_data.Pass());
346 } 368 }
347 369
348 cc::DelegatedFrameData *frame_data = frame->delegated_frame_data.get();
349 if (!frame_data)
350 return;
351
352 CheckSizeAndAdjustLayerBounds( 370 CheckSizeAndAdjustLayerBounds(
353 frame_data->render_pass_list.back()->output_rect.size(), 371 frame_data->render_pass_list.back()->output_rect.size(),
354 frame->metadata.device_scale_factor, 372 frame->metadata.device_scale_factor,
355 delegated_layer_.get()); 373 delegated_layer_.get());
356 374
357 delegated_layer_->SetFrameData(frame->delegated_frame_data.Pass());
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
OLDNEW
« no previous file with comments | « content/renderer/browser_plugin/browser_plugin_compositing_helper.h ('k') | ui/compositor/layer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698