| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "cc/layers/delegated_renderer_layer_impl.h" | 5 #include "cc/layers/delegated_renderer_layer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 RenderPassList render_pass_list; | 118 RenderPassList render_pass_list; |
| 119 RenderPass::CopyAll(frame_data->render_pass_list, &render_pass_list); | 119 RenderPass::CopyAll(frame_data->render_pass_list, &render_pass_list); |
| 120 | 120 |
| 121 bool invalid_frame = false; | 121 bool invalid_frame = false; |
| 122 ResourceProvider::ResourceIdArray resources_in_frame; | 122 ResourceProvider::ResourceIdArray resources_in_frame; |
| 123 DrawQuad::ResourceIteratorCallback remap_resources_to_parent_callback = | 123 DrawQuad::ResourceIteratorCallback remap_resources_to_parent_callback = |
| 124 base::Bind(&ResourceRemapHelper, | 124 base::Bind(&ResourceRemapHelper, |
| 125 &invalid_frame, | 125 &invalid_frame, |
| 126 resource_map, | 126 resource_map, |
| 127 &resources_in_frame); | 127 &resources_in_frame); |
| 128 for (size_t i = 0; i < render_pass_list.size(); ++i) { | 128 for (const auto& pass : render_pass_list) { |
| 129 RenderPass* pass = render_pass_list[i]; | 129 for (const auto& quad : pass->quad_list) |
| 130 for (auto& quad : pass->quad_list) | 130 quad->IterateResources(remap_resources_to_parent_callback); |
| 131 quad.IterateResources(remap_resources_to_parent_callback); | |
| 132 } | 131 } |
| 133 | 132 |
| 134 if (invalid_frame) { | 133 if (invalid_frame) { |
| 135 // Declare we are still using the last frame's resources. | 134 // Declare we are still using the last frame's resources. |
| 136 resource_provider->DeclareUsedResourcesFromChild(child_id_, resources_); | 135 resource_provider->DeclareUsedResourcesFromChild(child_id_, resources_); |
| 137 return; | 136 return; |
| 138 } | 137 } |
| 139 | 138 |
| 140 // Declare we are using the new frame's resources. | 139 // Declare we are using the new frame's resources. |
| 141 resources_.swap(resources_in_frame); | 140 resources_.swap(resources_in_frame); |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 AppendQuadsData* append_quads_data, | 388 AppendQuadsData* append_quads_data, |
| 390 const RenderPass* delegated_render_pass, | 389 const RenderPass* delegated_render_pass, |
| 391 const gfx::Size& frame_size) const { | 390 const gfx::Size& frame_size) const { |
| 392 const SharedQuadState* delegated_shared_quad_state = nullptr; | 391 const SharedQuadState* delegated_shared_quad_state = nullptr; |
| 393 SharedQuadState* output_shared_quad_state = nullptr; | 392 SharedQuadState* output_shared_quad_state = nullptr; |
| 394 | 393 |
| 395 for (const auto& delegated_quad : delegated_render_pass->quad_list) { | 394 for (const auto& delegated_quad : delegated_render_pass->quad_list) { |
| 396 bool is_root_delegated_render_pass = | 395 bool is_root_delegated_render_pass = |
| 397 delegated_render_pass == render_passes_in_draw_order_.back(); | 396 delegated_render_pass == render_passes_in_draw_order_.back(); |
| 398 | 397 |
| 399 if (delegated_quad.shared_quad_state != delegated_shared_quad_state) { | 398 if (delegated_quad->shared_quad_state != delegated_shared_quad_state) { |
| 400 delegated_shared_quad_state = delegated_quad.shared_quad_state; | 399 delegated_shared_quad_state = delegated_quad->shared_quad_state; |
| 401 output_shared_quad_state = render_pass->CreateAndAppendSharedQuadState(); | 400 output_shared_quad_state = render_pass->CreateAndAppendSharedQuadState(); |
| 402 output_shared_quad_state->CopyFrom(delegated_shared_quad_state); | 401 output_shared_quad_state->CopyFrom(delegated_shared_quad_state); |
| 403 | 402 |
| 404 if (is_root_delegated_render_pass) { | 403 if (is_root_delegated_render_pass) { |
| 405 gfx::Transform delegated_frame_to_target_transform = draw_transform(); | 404 gfx::Transform delegated_frame_to_target_transform = draw_transform(); |
| 406 delegated_frame_to_target_transform.Scale(inverse_device_scale_factor_, | 405 delegated_frame_to_target_transform.Scale(inverse_device_scale_factor_, |
| 407 inverse_device_scale_factor_); | 406 inverse_device_scale_factor_); |
| 408 | 407 |
| 409 output_shared_quad_state->content_to_target_transform.ConcatTransform( | 408 output_shared_quad_state->content_to_target_transform.ConcatTransform( |
| 410 delegated_frame_to_target_transform); | 409 delegated_frame_to_target_transform); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 440 delegated_render_pass->transform_to_root_target); | 439 delegated_render_pass->transform_to_root_target); |
| 441 quad_content_to_delegated_target_space.ConcatTransform(draw_transform()); | 440 quad_content_to_delegated_target_space.ConcatTransform(draw_transform()); |
| 442 } | 441 } |
| 443 | 442 |
| 444 Occlusion occlusion_in_quad_space = | 443 Occlusion occlusion_in_quad_space = |
| 445 occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( | 444 occlusion_in_content_space.GetOcclusionWithGivenDrawTransform( |
| 446 quad_content_to_delegated_target_space); | 445 quad_content_to_delegated_target_space); |
| 447 | 446 |
| 448 gfx::Rect quad_visible_rect = | 447 gfx::Rect quad_visible_rect = |
| 449 occlusion_in_quad_space.GetUnoccludedContentRect( | 448 occlusion_in_quad_space.GetUnoccludedContentRect( |
| 450 delegated_quad.visible_rect); | 449 delegated_quad->visible_rect); |
| 451 | 450 |
| 452 if (quad_visible_rect.IsEmpty()) | 451 if (quad_visible_rect.IsEmpty()) |
| 453 continue; | 452 continue; |
| 454 | 453 |
| 455 if (delegated_quad.material != DrawQuad::RENDER_PASS) { | 454 if (delegated_quad->material != DrawQuad::RENDER_PASS) { |
| 456 DrawQuad* output_quad = render_pass->CopyFromAndAppendDrawQuad( | 455 DrawQuad* output_quad = render_pass->CopyFromAndAppendDrawQuad( |
| 457 &delegated_quad, output_shared_quad_state); | 456 delegated_quad, output_shared_quad_state); |
| 458 output_quad->visible_rect = quad_visible_rect; | 457 output_quad->visible_rect = quad_visible_rect; |
| 459 } else { | 458 } else { |
| 460 RenderPassId delegated_contributing_render_pass_id = | 459 RenderPassId delegated_contributing_render_pass_id = |
| 461 RenderPassDrawQuad::MaterialCast(&delegated_quad)->render_pass_id; | 460 RenderPassDrawQuad::MaterialCast(delegated_quad)->render_pass_id; |
| 462 RenderPassId output_contributing_render_pass_id(-1, -1); | 461 RenderPassId output_contributing_render_pass_id(-1, -1); |
| 463 | 462 |
| 464 bool present = | 463 bool present = |
| 465 ConvertDelegatedRenderPassId(delegated_contributing_render_pass_id, | 464 ConvertDelegatedRenderPassId(delegated_contributing_render_pass_id, |
| 466 &output_contributing_render_pass_id); | 465 &output_contributing_render_pass_id); |
| 467 | 466 |
| 468 // The frame may have a RenderPassDrawQuad that points to a RenderPass not | 467 // The frame may have a RenderPassDrawQuad that points to a RenderPass not |
| 469 // part of the frame. Just ignore these quads. | 468 // part of the frame. Just ignore these quads. |
| 470 if (present) { | 469 if (present) { |
| 471 DCHECK(output_contributing_render_pass_id != | 470 DCHECK(output_contributing_render_pass_id != |
| 472 append_quads_data->render_pass_id); | 471 append_quads_data->render_pass_id); |
| 473 | 472 |
| 474 RenderPassDrawQuad* output_quad = | 473 RenderPassDrawQuad* output_quad = |
| 475 render_pass->CopyFromAndAppendRenderPassDrawQuad( | 474 render_pass->CopyFromAndAppendRenderPassDrawQuad( |
| 476 RenderPassDrawQuad::MaterialCast(&delegated_quad), | 475 RenderPassDrawQuad::MaterialCast(delegated_quad), |
| 477 output_shared_quad_state, | 476 output_shared_quad_state, |
| 478 output_contributing_render_pass_id); | 477 output_contributing_render_pass_id); |
| 479 output_quad->visible_rect = quad_visible_rect; | 478 output_quad->visible_rect = quad_visible_rect; |
| 480 } | 479 } |
| 481 } | 480 } |
| 482 } | 481 } |
| 483 } | 482 } |
| 484 | 483 |
| 485 const char* DelegatedRendererLayerImpl::LayerTypeAsString() const { | 484 const char* DelegatedRendererLayerImpl::LayerTypeAsString() const { |
| 486 return "cc::DelegatedRendererLayerImpl"; | 485 return "cc::DelegatedRendererLayerImpl"; |
| 487 } | 486 } |
| 488 | 487 |
| 489 void DelegatedRendererLayerImpl::ClearChildId() { | 488 void DelegatedRendererLayerImpl::ClearChildId() { |
| 490 if (!child_id_) | 489 if (!child_id_) |
| 491 return; | 490 return; |
| 492 | 491 |
| 493 if (own_child_id_) { | 492 if (own_child_id_) { |
| 494 ResourceProvider* provider = layer_tree_impl()->resource_provider(); | 493 ResourceProvider* provider = layer_tree_impl()->resource_provider(); |
| 495 provider->DestroyChild(child_id_); | 494 provider->DestroyChild(child_id_); |
| 496 } | 495 } |
| 497 | 496 |
| 498 resources_.clear(); | 497 resources_.clear(); |
| 499 child_id_ = 0; | 498 child_id_ = 0; |
| 500 } | 499 } |
| 501 | 500 |
| 502 } // namespace cc | 501 } // namespace cc |
| OLD | NEW |