Chromium Code Reviews| Index: cc/surfaces/surface_aggregator.cc |
| diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc |
| index db1366da53cac0239eb0d95bb097ebc17893b0e7..1d1ea7a42cafad0418d9d9b5715eb6a88c3b67d8 100644 |
| --- a/cc/surfaces/surface_aggregator.cc |
| +++ b/cc/surfaces/surface_aggregator.cc |
| @@ -144,8 +144,7 @@ int SurfaceAggregator::RemapPassId(int surface_local_pass_id, |
| } |
| int SurfaceAggregator::ChildIdForSurface(Surface* surface) { |
| - SurfaceToResourceChildIdMap::iterator it = |
| - surface_id_to_resource_child_id_.find(surface->surface_id()); |
| + auto it = surface_id_to_resource_child_id_.find(surface->surface_id()); |
| if (it == surface_id_to_resource_child_id_.end()) { |
| int child_id = |
| provider_->CreateChild(base::Bind(&UnrefHelper, surface->factory())); |
| @@ -239,7 +238,7 @@ void SurfaceAggregator::HandleSurfaceQuad( |
| return; |
| } |
| - SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first; |
| + auto it = referenced_surfaces_.insert(surface_id).first; |
| // TODO(vmpstr): provider check is a hack for unittests that don't set up a |
| // resource provider. |
| ResourceProvider::ResourceIdMap empty_map; |
| @@ -568,8 +567,7 @@ void SurfaceAggregator::ProcessAddedAndRemovedSurfaces() { |
| for (const auto& surface : previous_contained_surfaces_) { |
| if (!contained_surfaces_.count(surface.first)) { |
| // Release resources of removed surface. |
| - SurfaceToResourceChildIdMap::iterator it = |
| - surface_id_to_resource_child_id_.find(surface.first); |
| + auto it = surface_id_to_resource_child_id_.find(surface.first); |
| if (it != surface_id_to_resource_child_id_.end()) { |
| provider_->DestroyChild(it->second); |
| surface_id_to_resource_child_id_.erase(it); |
| @@ -653,13 +651,18 @@ gfx::Rect SurfaceAggregator::PrewalkTree(const SurfaceId& surface_id, |
| }; |
| std::vector<SurfaceInfo> child_surfaces; |
| - std::unordered_set<int> pixel_moving_background_filter_passes; |
| + // This data is created once and typically small or empty. Collect all items |
| + // and pass to a flat_vector to sort once. |
| + std::vector<int> pixel_moving_background_filter_passes_data; |
| for (const auto& render_pass : frame.render_pass_list) { |
| if (render_pass->background_filters.HasFilterThatMovesPixels()) { |
| - pixel_moving_background_filter_passes.insert( |
| + pixel_moving_background_filter_passes_data.push_back( |
| RemapPassId(render_pass->id, surface_id)); |
| } |
| } |
| + base::flat_set<int> pixel_moving_background_filter_passes( |
| + std::move(pixel_moving_background_filter_passes_data), |
| + base::KEEP_FIRST_OF_DUPES); |
| for (const auto& render_pass : base::Reversed(frame.render_pass_list)) { |
| int remapped_pass_id = RemapPassId(render_pass->id, surface_id); |
| @@ -726,8 +729,7 @@ gfx::Rect SurfaceAggregator::PrewalkTree(const SurfaceId& surface_id, |
| // Avoid infinite recursion by adding current surface to |
| // referenced_surfaces_. |
| - SurfaceSet::iterator it = |
| - referenced_surfaces_.insert(surface->surface_id()).first; |
| + referenced_surfaces_.insert(surface->surface_id()); |
| for (const auto& surface_info : child_surfaces) { |
| gfx::Rect surface_damage = |
| PrewalkTree(surface_info.id, surface_info.has_moved_pixels, |
| @@ -767,7 +769,7 @@ gfx::Rect SurfaceAggregator::PrewalkTree(const SurfaceId& surface_id, |
| } |
| } |
| - referenced_surfaces_.erase(it); |
| + referenced_surfaces_.erase(referenced_surfaces_.find(surface->surface_id())); |
|
brettw
2017/04/17 21:10:08
This changed because the set is mutated in between
|
| if (!damage_rect.IsEmpty() && frame.metadata.may_contain_video) |
| result->may_contain_video = true; |
| return damage_rect; |
| @@ -808,7 +810,7 @@ void SurfaceAggregator::CopyUndrawnSurfaces(PrewalkResult* prewalk_result) { |
| } |
| } |
| } else { |
| - SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first; |
| + auto it = referenced_surfaces_.insert(surface_id).first; |
| CopyPasses(frame, surface); |
| referenced_surfaces_.erase(it); |
| } |
| @@ -858,7 +860,7 @@ CompositorFrame SurfaceAggregator::Aggregate(const SurfaceId& surface_id) { |
| frame.metadata.may_contain_video = prewalk_result.may_contain_video; |
| CopyUndrawnSurfaces(&prewalk_result); |
| - SurfaceSet::iterator it = referenced_surfaces_.insert(surface_id).first; |
| + auto it = referenced_surfaces_.insert(surface_id).first; |
| CopyPasses(root_surface_frame, surface); |
| referenced_surfaces_.erase(it); |
| AddColorConversionPass(); |
| @@ -912,8 +914,7 @@ CompositorFrame SurfaceAggregator::Aggregate(const SurfaceId& surface_id) { |
| } |
| void SurfaceAggregator::ReleaseResources(const SurfaceId& surface_id) { |
| - SurfaceToResourceChildIdMap::iterator it = |
| - surface_id_to_resource_child_id_.find(surface_id); |
| + auto it = surface_id_to_resource_child_id_.find(surface_id); |
| if (it != surface_id_to_resource_child_id_.end()) { |
| provider_->DestroyChild(it->second); |
| surface_id_to_resource_child_id_.erase(it); |