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

Unified Diff: cc/layers/delegated_renderer_layer_impl.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl.h ('k') | cc/resources/resource_provider.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layers/delegated_renderer_layer_impl.cc
diff --git a/cc/layers/delegated_renderer_layer_impl.cc b/cc/layers/delegated_renderer_layer_impl.cc
index 34a1cd86755949fbe946dba7057a7fc647aba072..35bd0b7f1b3c5cea768fb98e345e52dc556941ca 100644
--- a/cc/layers/delegated_renderer_layer_impl.cc
+++ b/cc/layers/delegated_renderer_layer_impl.cc
@@ -33,9 +33,7 @@ DelegatedRendererLayerImpl::~DelegatedRendererLayerImpl() {
ClearChildId();
}
-bool DelegatedRendererLayerImpl::HasDelegatedContent() const {
- return !render_passes_in_draw_order_.empty();
-}
+bool DelegatedRendererLayerImpl::HasDelegatedContent() const { return true; }
bool DelegatedRendererLayerImpl::HasContributingDelegatedRenderPasses() const {
// The root RenderPass for the layer is merged with its target
@@ -101,14 +99,13 @@ void DelegatedRendererLayerImpl::CreateChildIdIfNeeded(
}
void DelegatedRendererLayerImpl::SetFrameData(
- scoped_ptr<DelegatedFrameData> frame_data,
+ const DelegatedFrameData* frame_data,
gfx::RectF damage_in_frame) {
- DCHECK(frame_data);
DCHECK(child_id_) << "CreateChildIdIfNeeded must be called first.";
-
+ DCHECK(frame_data);
+ DCHECK(!frame_data->render_pass_list.empty());
// A frame with an empty root render pass is invalid.
- DCHECK(frame_data->render_pass_list.empty() ||
- !frame_data->render_pass_list.back()->output_rect.IsEmpty());
+ DCHECK(!frame_data->render_pass_list.back()->output_rect.IsEmpty());
ResourceProvider* resource_provider = layer_tree_impl()->resource_provider();
const ResourceProvider::ResourceIdMap& resource_map =
@@ -116,6 +113,9 @@ void DelegatedRendererLayerImpl::SetFrameData(
resource_provider->ReceiveFromChild(child_id_, frame_data->resource_list);
+ ScopedPtrVector<RenderPass> render_pass_list;
+ RenderPass::CopyAll(frame_data->render_pass_list, &render_pass_list);
+
bool invalid_frame = false;
ResourceProvider::ResourceIdArray resources_in_frame;
DrawQuad::ResourceIteratorCallback remap_resources_to_parent_callback =
@@ -123,8 +123,8 @@ void DelegatedRendererLayerImpl::SetFrameData(
&invalid_frame,
resource_map,
&resources_in_frame);
- for (size_t i = 0; i < frame_data->render_pass_list.size(); ++i) {
- RenderPass* pass = frame_data->render_pass_list[i];
+ for (size_t i = 0; i < render_pass_list.size(); ++i) {
+ RenderPass* pass = render_pass_list[i];
for (size_t j = 0; j < pass->quad_list.size(); ++j) {
DrawQuad* quad = pass->quad_list[j];
quad->IterateResources(remap_resources_to_parent_callback);
@@ -143,18 +143,13 @@ void DelegatedRendererLayerImpl::SetFrameData(
// Display size is already set so we can compute what the damage rect
// will be in layer space.
- if (!frame_data->render_pass_list.empty()) {
- RenderPass* new_root_pass = frame_data->render_pass_list.back();
- gfx::RectF damage_in_layer = MathUtil::MapClippedRect(
- DelegatedFrameToLayerSpaceTransform(
- new_root_pass->output_rect.size()),
- damage_in_frame);
- set_update_rect(gfx::UnionRects(update_rect(), damage_in_layer));
- }
+ RenderPass* new_root_pass = render_pass_list.back();
+ gfx::Size frame_size = new_root_pass->output_rect.size();
+ gfx::RectF damage_in_layer = MathUtil::MapClippedRect(
+ DelegatedFrameToLayerSpaceTransform(frame_size), damage_in_frame);
+ set_update_rect(gfx::UnionRects(update_rect(), damage_in_layer));
- // Save the remapped quads on the layer. This steals the quads and render
- // passes from the frame_data.
- SetRenderPasses(&frame_data->render_pass_list);
+ SetRenderPasses(&render_pass_list);
have_render_passes_to_push_ = true;
}
@@ -184,7 +179,6 @@ void DelegatedRendererLayerImpl::SetRenderPasses(
}
void DelegatedRendererLayerImpl::ClearRenderPasses() {
- // TODO(danakj): Release the resources back to the nested compositor.
render_passes_index_by_id_.clear();
render_passes_in_draw_order_.clear();
}
@@ -271,6 +265,7 @@ void DelegatedRendererLayerImpl::AppendQuads(
AppendQuadsData* append_quads_data) {
AppendRainbowDebugBorder(quad_sink, append_quads_data);
+ // This list will be empty after a lost context until a new frame arrives.
if (render_passes_in_draw_order_.empty())
return;
« no previous file with comments | « cc/layers/delegated_renderer_layer_impl.h ('k') | cc/resources/resource_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698