Chromium Code Reviews| 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..a40246ec196bbe642064f6c84a6f7ec7500c7deb 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_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.
|
| // 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; |