| 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_manager.h" | 5 #include "cc/surfaces/surface_manager.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 DCHECK_EQ(registered_sources_.size(), 0u); | 44 DCHECK_EQ(registered_sources_.size(), 0u); |
| 45 } | 45 } |
| 46 | 46 |
| 47 void SurfaceManager::RegisterSurface(Surface* surface) { | 47 void SurfaceManager::RegisterSurface(Surface* surface) { |
| 48 DCHECK(thread_checker_.CalledOnValidThread()); | 48 DCHECK(thread_checker_.CalledOnValidThread()); |
| 49 DCHECK(surface); | 49 DCHECK(surface); |
| 50 DCHECK(!surface_map_.count(surface->surface_id())); | 50 DCHECK(!surface_map_.count(surface->surface_id())); |
| 51 surface_map_[surface->surface_id()] = surface; | 51 surface_map_[surface->surface_id()] = surface; |
| 52 } | 52 } |
| 53 | 53 |
| 54 void SurfaceManager::DeregisterSurface(SurfaceId surface_id) { | 54 void SurfaceManager::DeregisterSurface(const SurfaceId& surface_id) { |
| 55 DCHECK(thread_checker_.CalledOnValidThread()); | 55 DCHECK(thread_checker_.CalledOnValidThread()); |
| 56 SurfaceMap::iterator it = surface_map_.find(surface_id); | 56 SurfaceMap::iterator it = surface_map_.find(surface_id); |
| 57 DCHECK(it != surface_map_.end()); | 57 DCHECK(it != surface_map_.end()); |
| 58 surface_map_.erase(it); | 58 surface_map_.erase(it); |
| 59 } | 59 } |
| 60 | 60 |
| 61 void SurfaceManager::Destroy(std::unique_ptr<Surface> surface) { | 61 void SurfaceManager::Destroy(std::unique_ptr<Surface> surface) { |
| 62 DCHECK(thread_checker_.CalledOnValidThread()); | 62 DCHECK(thread_checker_.CalledOnValidThread()); |
| 63 surface->set_destroyed(true); | 63 surface->set_destroyed(true); |
| 64 surfaces_to_destroy_.push_back(std::move(surface)); | 64 surfaces_to_destroy_.push_back(std::move(surface)); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 live_surfaces.push_back(map_entry.first); | 105 live_surfaces.push_back(map_entry.first); |
| 106 } | 106 } |
| 107 } | 107 } |
| 108 | 108 |
| 109 // Mark all surfaces reachable from live surfaces by adding them to | 109 // Mark all surfaces reachable from live surfaces by adding them to |
| 110 // live_surfaces and live_surfaces_set. | 110 // live_surfaces and live_surfaces_set. |
| 111 for (size_t i = 0; i < live_surfaces.size(); i++) { | 111 for (size_t i = 0; i < live_surfaces.size(); i++) { |
| 112 Surface* surf = surface_map_[live_surfaces[i]]; | 112 Surface* surf = surface_map_[live_surfaces[i]]; |
| 113 DCHECK(surf); | 113 DCHECK(surf); |
| 114 | 114 |
| 115 for (SurfaceId id : surf->referenced_surfaces()) { | 115 for (const SurfaceId& id : surf->referenced_surfaces()) { |
| 116 if (live_surfaces_set.count(id)) | 116 if (live_surfaces_set.count(id)) |
| 117 continue; | 117 continue; |
| 118 | 118 |
| 119 Surface* surf2 = GetSurfaceForId(id); | 119 Surface* surf2 = GetSurfaceForId(id); |
| 120 if (surf2) { | 120 if (surf2) { |
| 121 live_surfaces.push_back(id); | 121 live_surfaces.push_back(id); |
| 122 live_surfaces_set.insert(id); | 122 live_surfaces_set.insert(id); |
| 123 } | 123 } |
| 124 } | 124 } |
| 125 } | 125 } |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 BeginFrameSource* parent_source = iter->second.source; | 324 BeginFrameSource* parent_source = iter->second.source; |
| 325 if (!parent_source) | 325 if (!parent_source) |
| 326 return; | 326 return; |
| 327 | 327 |
| 328 // TODO(enne): these walks could be done in one step. | 328 // TODO(enne): these walks could be done in one step. |
| 329 RecursivelyDetachBeginFrameSource(child_namespace, parent_source); | 329 RecursivelyDetachBeginFrameSource(child_namespace, parent_source); |
| 330 for (auto source_iter : registered_sources_) | 330 for (auto source_iter : registered_sources_) |
| 331 RecursivelyAttachBeginFrameSource(source_iter.second, source_iter.first); | 331 RecursivelyAttachBeginFrameSource(source_iter.second, source_iter.first); |
| 332 } | 332 } |
| 333 | 333 |
| 334 Surface* SurfaceManager::GetSurfaceForId(SurfaceId surface_id) { | 334 Surface* SurfaceManager::GetSurfaceForId(const SurfaceId& surface_id) { |
| 335 DCHECK(thread_checker_.CalledOnValidThread()); | 335 DCHECK(thread_checker_.CalledOnValidThread()); |
| 336 SurfaceMap::iterator it = surface_map_.find(surface_id); | 336 SurfaceMap::iterator it = surface_map_.find(surface_id); |
| 337 if (it == surface_map_.end()) | 337 if (it == surface_map_.end()) |
| 338 return NULL; | 338 return NULL; |
| 339 return it->second; | 339 return it->second; |
| 340 } | 340 } |
| 341 | 341 |
| 342 bool SurfaceManager::SurfaceModified(SurfaceId surface_id) { | 342 bool SurfaceManager::SurfaceModified(const SurfaceId& surface_id) { |
| 343 CHECK(thread_checker_.CalledOnValidThread()); | 343 CHECK(thread_checker_.CalledOnValidThread()); |
| 344 bool changed = false; | 344 bool changed = false; |
| 345 FOR_EACH_OBSERVER(SurfaceDamageObserver, observer_list_, | 345 FOR_EACH_OBSERVER(SurfaceDamageObserver, observer_list_, |
| 346 OnSurfaceDamaged(surface_id, &changed)); | 346 OnSurfaceDamaged(surface_id, &changed)); |
| 347 return changed; | 347 return changed; |
| 348 } | 348 } |
| 349 | 349 |
| 350 } // namespace cc | 350 } // namespace cc |
| OLD | NEW |