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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/containers/hash_tables.h" | 8 #include "base/containers/hash_tables.h" |
9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 render_pass_allocator_map_.set(surface_id, make_scoped_ptr(allocator)); | 84 render_pass_allocator_map_.set(surface_id, make_scoped_ptr(allocator)); |
85 } | 85 } |
86 allocator->AddKnownPass(surface_local_pass_id); | 86 allocator->AddKnownPass(surface_local_pass_id); |
87 return allocator->Remap(surface_local_pass_id); | 87 return allocator->Remap(surface_local_pass_id); |
88 } | 88 } |
89 | 89 |
90 int SurfaceAggregator::ChildIdForSurface(Surface* surface) { | 90 int SurfaceAggregator::ChildIdForSurface(Surface* surface) { |
91 SurfaceToResourceChildIdMap::iterator it = | 91 SurfaceToResourceChildIdMap::iterator it = |
92 surface_id_to_resource_child_id_.find(surface->surface_id()); | 92 surface_id_to_resource_child_id_.find(surface->surface_id()); |
93 if (it == surface_id_to_resource_child_id_.end()) { | 93 if (it == surface_id_to_resource_child_id_.end()) { |
94 int child_id = provider_->CreateChild( | 94 int child_id = |
95 base::Bind(&UnrefHelper, surface->factory()->AsWeakPtr())); | 95 provider_->CreateChild(base::Bind(&UnrefHelper, surface->factory())); |
96 surface_id_to_resource_child_id_[surface->surface_id()] = child_id; | 96 surface_id_to_resource_child_id_[surface->surface_id()] = child_id; |
97 return child_id; | 97 return child_id; |
98 } else { | 98 } else { |
99 return it->second; | 99 return it->second; |
100 } | 100 } |
101 } | 101 } |
102 | 102 |
103 static ResourceProvider::ResourceId ResourceRemapHelper( | 103 static ResourceProvider::ResourceId ResourceRemapHelper( |
104 bool* invalid_frame, | 104 bool* invalid_frame, |
105 const ResourceProvider::ResourceIdMap& child_to_parent_map, | 105 const ResourceProvider::ResourceIdMap& child_to_parent_map, |
(...skipping 14 matching lines...) Expand all Loading... |
120 | 120 |
121 bool SurfaceAggregator::TakeResources(Surface* surface, | 121 bool SurfaceAggregator::TakeResources(Surface* surface, |
122 const DelegatedFrameData* frame_data, | 122 const DelegatedFrameData* frame_data, |
123 RenderPassList* render_pass_list) { | 123 RenderPassList* render_pass_list) { |
124 RenderPass::CopyAll(frame_data->render_pass_list, render_pass_list); | 124 RenderPass::CopyAll(frame_data->render_pass_list, render_pass_list); |
125 if (!provider_) // TODO(jamesr): hack for unit tests that don't set up rp | 125 if (!provider_) // TODO(jamesr): hack for unit tests that don't set up rp |
126 return false; | 126 return false; |
127 | 127 |
128 int child_id = ChildIdForSurface(surface); | 128 int child_id = ChildIdForSurface(surface); |
129 provider_->ReceiveFromChild(child_id, frame_data->resource_list); | 129 provider_->ReceiveFromChild(child_id, frame_data->resource_list); |
130 surface->factory()->RefResources(frame_data->resource_list); | 130 if (surface->factory()) |
| 131 surface->factory()->RefResources(frame_data->resource_list); |
131 | 132 |
132 typedef ResourceProvider::ResourceIdArray IdArray; | 133 typedef ResourceProvider::ResourceIdArray IdArray; |
133 IdArray referenced_resources; | 134 IdArray referenced_resources; |
134 | 135 |
135 bool invalid_frame = false; | 136 bool invalid_frame = false; |
136 DrawQuad::ResourceIteratorCallback remap = | 137 DrawQuad::ResourceIteratorCallback remap = |
137 base::Bind(&ResourceRemapHelper, | 138 base::Bind(&ResourceRemapHelper, |
138 &invalid_frame, | 139 &invalid_frame, |
139 provider_->GetChildToParentMap(child_id), | 140 provider_->GetChildToParentMap(child_id), |
140 &referenced_resources); | 141 &referenced_resources); |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 surface->TakeLatencyInfo(&frame->metadata.latency_info); | 416 surface->TakeLatencyInfo(&frame->metadata.latency_info); |
416 } | 417 } |
417 | 418 |
418 // TODO(jamesr): Aggregate all resource references into the returned frame's | 419 // TODO(jamesr): Aggregate all resource references into the returned frame's |
419 // resource list. | 420 // resource list. |
420 | 421 |
421 return frame.Pass(); | 422 return frame.Pass(); |
422 } | 423 } |
423 | 424 |
424 } // namespace cc | 425 } // namespace cc |
OLD | NEW |