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

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: nits 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()) {
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());
356 351
357 delegated_layer_->SetFrameData(frame->delegated_frame_data.Pass()); 352 DCHECK_NE(0u, frame_data->render_pass_list.size());
piman 2013/10/04 23:42:25 nit: DCHECK(!frame_data->render_pass_list.empty())
danakj 2013/10/07 21:57:39 Done.
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 // TODO(danakj): Could return resources sooner if we gave a client here and
358 // listened for UnusedResourcesAreAvailable().
359 resource_collection_.reset(new cc::DelegatedFrameResourceCollection(NULL));
360 }
361 if (!frame_provider_ || frame_provider_->frame_size() != frame_size) {
362 frame_provider_.reset(new cc::DelegatedFrameProvider(
363 resource_collection_.get(), frame->delegated_frame_data.Pass()));
364 delegated_layer_ =
365 cc::DelegatedRendererLayer::Create(NULL, frame_provider_.get());
366 delegated_layer_->SetIsDrawable(true);
367 delegated_layer_->SetContentsOpaque(true);
368 background_layer_->AddChild(delegated_layer_);
369 } else {
370 frame_provider_->SetFrameData(frame->delegated_frame_data.Pass());
371 }
372
358 last_route_id_ = route_id; 373 last_route_id_ = route_id;
359 last_output_surface_id_ = output_surface_id; 374 last_output_surface_id_ = output_surface_id;
360 last_host_id_ = host_id; 375 last_host_id_ = host_id;
361 ack_pending_ = true; 376 ack_pending_ = true;
362 } 377 }
363 378
364 void BrowserPluginCompositingHelper::UpdateVisibility(bool visible) { 379 void BrowserPluginCompositingHelper::UpdateVisibility(bool visible) {
365 if (texture_layer_.get()) 380 if (texture_layer_.get())
366 texture_layer_->SetIsDrawable(visible); 381 texture_layer_->SetIsDrawable(visible);
367 if (delegated_layer_.get()) 382 if (delegated_layer_.get())
368 delegated_layer_->SetIsDrawable(visible); 383 delegated_layer_->SetIsDrawable(visible);
369 } 384 }
370 385
371 } // namespace content 386 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698