Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/surfaces/surface_aggregator.h" | 5 #include "cc/surfaces/surface_aggregator.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 | 10 |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 218 const RenderPass& source = *referenced_passes[j]; | 218 const RenderPass& source = *referenced_passes[j]; |
| 219 | 219 |
| 220 size_t sqs_size = source.shared_quad_state_list.size(); | 220 size_t sqs_size = source.shared_quad_state_list.size(); |
| 221 size_t dq_size = source.quad_list.size(); | 221 size_t dq_size = source.quad_list.size(); |
| 222 std::unique_ptr<RenderPass> copy_pass( | 222 std::unique_ptr<RenderPass> copy_pass( |
| 223 RenderPass::Create(sqs_size, dq_size)); | 223 RenderPass::Create(sqs_size, dq_size)); |
| 224 | 224 |
| 225 RenderPassId remapped_pass_id = RemapPassId(source.id, surface_id); | 225 RenderPassId remapped_pass_id = RemapPassId(source.id, surface_id); |
| 226 | 226 |
| 227 copy_pass->SetAll(remapped_pass_id, source.output_rect, source.output_rect, | 227 copy_pass->SetAll(remapped_pass_id, source.output_rect, source.output_rect, |
| 228 source.transform_to_root_target, | 228 source.transform_to_root_target, source.filters, |
| 229 source.background_filters, | |
| 229 source.has_transparent_background); | 230 source.has_transparent_background); |
| 230 | 231 |
| 231 MoveMatchingRequests(source.id, ©_requests, ©_pass->copy_requests); | 232 MoveMatchingRequests(source.id, ©_requests, ©_pass->copy_requests); |
| 232 | 233 |
| 233 // Contributing passes aggregated in to the pass list need to take the | 234 // Contributing passes aggregated in to the pass list need to take the |
| 234 // transform of the surface quad into account to update their transform to | 235 // transform of the surface quad into account to update their transform to |
| 235 // the root surface. | 236 // the root surface. |
| 236 copy_pass->transform_to_root_target.ConcatTransform( | 237 copy_pass->transform_to_root_target.ConcatTransform( |
| 237 surface_quad->shared_quad_state->quad_to_target_transform); | 238 surface_quad->shared_quad_state->quad_to_target_transform); |
| 238 copy_pass->transform_to_root_target.ConcatTransform(target_transform); | 239 copy_pass->transform_to_root_target.ConcatTransform(target_transform); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 287 RenderPassId remapped_pass_id = RemapPassId(last_pass.id, surface_id); | 288 RenderPassId remapped_pass_id = RemapPassId(last_pass.id, surface_id); |
| 288 | 289 |
| 289 SharedQuadState* shared_quad_state = | 290 SharedQuadState* shared_quad_state = |
| 290 CopySharedQuadState(surface_quad->shared_quad_state, target_transform, | 291 CopySharedQuadState(surface_quad->shared_quad_state, target_transform, |
| 291 clip_rect, dest_pass); | 292 clip_rect, dest_pass); |
| 292 | 293 |
| 293 RenderPassDrawQuad* quad = | 294 RenderPassDrawQuad* quad = |
| 294 dest_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); | 295 dest_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); |
| 295 quad->SetNew(shared_quad_state, surface_quad->rect, | 296 quad->SetNew(shared_quad_state, surface_quad->rect, |
| 296 surface_quad->visible_rect, remapped_pass_id, 0, | 297 surface_quad->visible_rect, remapped_pass_id, 0, |
| 297 gfx::Vector2dF(), gfx::Size(), FilterOperations(), | 298 gfx::Vector2dF(), gfx::Size(), gfx::Vector2dF(), |
| 298 gfx::Vector2dF(), gfx::PointF(), FilterOperations()); | 299 gfx::PointF()); |
| 299 } | 300 } |
| 300 | 301 |
| 301 referenced_surfaces_.erase(it); | 302 referenced_surfaces_.erase(it); |
| 302 } | 303 } |
| 303 | 304 |
| 304 SharedQuadState* SurfaceAggregator::CopySharedQuadState( | 305 SharedQuadState* SurfaceAggregator::CopySharedQuadState( |
| 305 const SharedQuadState* source_sqs, | 306 const SharedQuadState* source_sqs, |
| 306 const gfx::Transform& target_transform, | 307 const gfx::Transform& target_transform, |
| 307 const ClipData& clip_rect, | 308 const ClipData& clip_rect, |
| 308 RenderPass* dest_render_pass) { | 309 RenderPass* dest_render_pass) { |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 485 size_t dq_size = source.quad_list.size(); | 486 size_t dq_size = source.quad_list.size(); |
| 486 std::unique_ptr<RenderPass> copy_pass( | 487 std::unique_ptr<RenderPass> copy_pass( |
| 487 RenderPass::Create(sqs_size, dq_size)); | 488 RenderPass::Create(sqs_size, dq_size)); |
| 488 | 489 |
| 489 MoveMatchingRequests(source.id, ©_requests, ©_pass->copy_requests); | 490 MoveMatchingRequests(source.id, ©_requests, ©_pass->copy_requests); |
| 490 | 491 |
| 491 RenderPassId remapped_pass_id = | 492 RenderPassId remapped_pass_id = |
| 492 RemapPassId(source.id, surface->surface_id()); | 493 RemapPassId(source.id, surface->surface_id()); |
| 493 | 494 |
| 494 copy_pass->SetAll(remapped_pass_id, source.output_rect, source.output_rect, | 495 copy_pass->SetAll(remapped_pass_id, source.output_rect, source.output_rect, |
| 495 source.transform_to_root_target, | 496 source.transform_to_root_target, source.filters, |
| 497 source.background_filters, | |
| 496 source.has_transparent_background); | 498 source.has_transparent_background); |
| 497 | 499 |
| 498 CopyQuadsToPass(source.quad_list, source.shared_quad_state_list, | 500 CopyQuadsToPass(source.quad_list, source.shared_quad_state_list, |
| 499 child_to_parent_map, gfx::Transform(), ClipData(), | 501 child_to_parent_map, gfx::Transform(), ClipData(), |
| 500 copy_pass.get(), surface->surface_id()); | 502 copy_pass.get(), surface->surface_id()); |
| 501 if (!copy_request_passes_.count(remapped_pass_id) && | 503 if (!copy_request_passes_.count(remapped_pass_id) && |
| 502 !moved_pixel_passes_.count(remapped_pass_id)) { | 504 !moved_pixel_passes_.count(remapped_pass_id)) { |
| 503 gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization); | 505 gfx::Transform inverse_transform(gfx::Transform::kSkipInitialization); |
| 504 if (copy_pass->transform_to_root_target.GetInverse(&inverse_transform)) { | 506 if (copy_pass->transform_to_root_target.GetInverse(&inverse_transform)) { |
| 505 gfx::Rect damage_rect_in_render_pass_space = | 507 gfx::Rect damage_rect_in_render_pass_space = |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 586 } | 588 } |
| 587 | 589 |
| 588 struct SurfaceInfo { | 590 struct SurfaceInfo { |
| 589 SurfaceId id; | 591 SurfaceId id; |
| 590 bool has_moved_pixels; | 592 bool has_moved_pixels; |
| 591 RenderPassId parent_pass; | 593 RenderPassId parent_pass; |
| 592 gfx::Transform target_to_surface_transform; | 594 gfx::Transform target_to_surface_transform; |
| 593 }; | 595 }; |
| 594 std::vector<SurfaceInfo> child_surfaces; | 596 std::vector<SurfaceInfo> child_surfaces; |
| 595 | 597 |
| 598 std::unordered_set<RenderPassId, RenderPassIdHash> pixel_moving_filter_passes; | |
| 599 std::unordered_set<RenderPassId, RenderPassIdHash> | |
| 600 pixel_moving_background_filter_passes; | |
| 601 for (const auto& render_pass : frame.render_pass_list) { | |
| 602 if (render_pass->filters.HasFilterThatMovesPixels()) { | |
| 603 pixel_moving_filter_passes.insert( | |
| 604 RemapPassId(render_pass->id, surface_id)); | |
|
jbauman
2016/12/07 01:15:47
I don't think you need this - I think you can just
ajuma
2016/12/13 15:08:11
Done.
| |
| 605 } | |
| 606 if (render_pass->background_filters.HasFilterThatMovesPixels()) { | |
| 607 pixel_moving_background_filter_passes.insert( | |
| 608 RemapPassId(render_pass->id, surface_id)); | |
| 609 } | |
| 610 } | |
| 611 | |
| 596 for (const auto& render_pass : base::Reversed(frame.render_pass_list)) { | 612 for (const auto& render_pass : base::Reversed(frame.render_pass_list)) { |
| 597 RenderPassId remapped_pass_id = RemapPassId(render_pass->id, surface_id); | 613 RenderPassId remapped_pass_id = RemapPassId(render_pass->id, surface_id); |
| 598 bool in_moved_pixel_pass = !!moved_pixel_passes_.count(remapped_pass_id); | 614 bool in_moved_pixel_pass = !!moved_pixel_passes_.count(remapped_pass_id); |
|
danakj
2016/12/01 01:50:46
This variable shadows the outer one with same name
ajuma
2016/12/13 15:08:11
Renamed the outer one to |in_moved_pixel_surface|.
| |
| 599 for (auto* quad : render_pass->quad_list) { | 615 for (auto* quad : render_pass->quad_list) { |
| 600 if (quad->material == DrawQuad::SURFACE_CONTENT) { | 616 if (quad->material == DrawQuad::SURFACE_CONTENT) { |
| 601 const SurfaceDrawQuad* surface_quad = | 617 const SurfaceDrawQuad* surface_quad = |
| 602 SurfaceDrawQuad::MaterialCast(quad); | 618 SurfaceDrawQuad::MaterialCast(quad); |
| 603 gfx::Transform target_to_surface_transform( | 619 gfx::Transform target_to_surface_transform( |
| 604 render_pass->transform_to_root_target, | 620 render_pass->transform_to_root_target, |
| 605 surface_quad->shared_quad_state->quad_to_target_transform); | 621 surface_quad->shared_quad_state->quad_to_target_transform); |
| 606 child_surfaces.push_back( | 622 child_surfaces.push_back( |
| 607 SurfaceInfo{surface_quad->surface_id, in_moved_pixel_pass, | 623 SurfaceInfo{surface_quad->surface_id, in_moved_pixel_pass, |
|
danakj
2016/12/01 01:50:46
aside.. this should use () not {} for the construc
ajuma
2016/12/13 15:08:11
Changed to using emplace_back.
danakj
2016/12/14 23:23:57
So uh, I guess that was ok cuz it was struct init
| |
| 608 remapped_pass_id, target_to_surface_transform}); | 624 remapped_pass_id, target_to_surface_transform}); |
| 609 } else if (quad->material == DrawQuad::RENDER_PASS) { | 625 } else if (quad->material == DrawQuad::RENDER_PASS) { |
| 610 const RenderPassDrawQuad* render_pass_quad = | 626 const RenderPassDrawQuad* render_pass_quad = |
| 611 RenderPassDrawQuad::MaterialCast(quad); | 627 RenderPassDrawQuad::MaterialCast(quad); |
| 612 if (in_moved_pixel_pass || | 628 if (in_moved_pixel_pass || |
| 613 render_pass_quad->filters.HasFilterThatMovesPixels()) { | 629 pixel_moving_filter_passes.count( |
|
danakj
2016/12/01 01:50:46
I think this bit doesn't need to be in per-quad co
ajuma
2016/12/13 15:08:11
Done.
| |
| 630 render_pass_quad->render_pass_id)) { | |
| 614 moved_pixel_passes_.insert( | 631 moved_pixel_passes_.insert( |
| 615 RemapPassId(render_pass_quad->render_pass_id, surface_id)); | 632 RemapPassId(render_pass_quad->render_pass_id, surface_id)); |
| 616 } | 633 } |
| 617 if (render_pass_quad->background_filters.HasFilterThatMovesPixels()) { | 634 if (pixel_moving_background_filter_passes.count( |
| 635 render_pass_quad->render_pass_id)) { | |
| 618 in_moved_pixel_pass = true; | 636 in_moved_pixel_pass = true; |
| 619 } | 637 } |
| 620 render_pass_dependencies_[remapped_pass_id].insert( | 638 render_pass_dependencies_[remapped_pass_id].insert( |
| 621 RemapPassId(render_pass_quad->render_pass_id, surface_id)); | 639 RemapPassId(render_pass_quad->render_pass_id, surface_id)); |
| 622 } | 640 } |
| 623 | 641 |
| 624 if (!provider_) | 642 if (!provider_) |
| 625 continue; | 643 continue; |
| 626 for (ResourceId resource_id : quad->resources) { | 644 for (ResourceId resource_id : quad->resources) { |
| 627 if (!child_to_parent_map.count(resource_id)) { | 645 if (!child_to_parent_map.count(resource_id)) { |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 827 | 845 |
| 828 void SurfaceAggregator::SetFullDamageForSurface(const SurfaceId& surface_id) { | 846 void SurfaceAggregator::SetFullDamageForSurface(const SurfaceId& surface_id) { |
| 829 auto it = previous_contained_surfaces_.find(surface_id); | 847 auto it = previous_contained_surfaces_.find(surface_id); |
| 830 if (it == previous_contained_surfaces_.end()) | 848 if (it == previous_contained_surfaces_.end()) |
| 831 return; | 849 return; |
| 832 // Set the last drawn index as 0 to ensure full damage next time it's drawn. | 850 // Set the last drawn index as 0 to ensure full damage next time it's drawn. |
| 833 it->second = 0; | 851 it->second = 0; |
| 834 } | 852 } |
| 835 | 853 |
| 836 } // namespace cc | 854 } // namespace cc |
| OLD | NEW |