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 3 // found in the LICENSE file. 4 5 #ifndef CC_SURFACES_SURFACE_MANAGER_H_ 6 #define CC_SURFACES_SURFACE_MANAGER_H_ 7 8 #include "base/containers/hash_tables.h" 9 #include "base/macros.h" 10 #include "base/observer_list.h" 11 #include "base/threading/thread_checker.h" 12 #include "cc/surfaces/surface_damage_observer.h" 13 #include "cc/surfaces/surface_id.h" 14 #include "cc/surfaces/surfaces_export.h" 15 16 namespace cc { 17 class CompositorFrame; 18 class Surface; 19 20 class CC_SURFACES_EXPORT SurfaceManager { 21 public: 22 SurfaceManager(); 23 ~SurfaceManager(); 24 25 void RegisterSurface(Surface* surface); 26 void DeregisterSurface(SurfaceId surface_id); 27 28 Surface* GetSurfaceForId(SurfaceId surface_id); 29 AddObserver(SurfaceDamageObserver * obs)30 void AddObserver(SurfaceDamageObserver* obs) { 31 observer_list_.AddObserver(obs); 32 } 33 RemoveObserver(SurfaceDamageObserver * obs)34 void RemoveObserver(SurfaceDamageObserver* obs) { 35 observer_list_.RemoveObserver(obs); 36 } 37 38 void SurfaceModified(SurfaceId surface_id); 39 40 private: 41 typedef base::hash_map<SurfaceId, Surface*> SurfaceMap; 42 SurfaceMap surface_map_; 43 ObserverList<SurfaceDamageObserver> observer_list_; 44 base::ThreadChecker thread_checker_; 45 46 DISALLOW_COPY_AND_ASSIGN(SurfaceManager); 47 }; 48 49 } // namespace cc 50 51 #endif // CC_SURFACES_SURFACE_MANAGER_H_ 52