15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CC_SURFACES_SURFACE_MANAGER_H_ 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CC_SURFACES_SURFACE_MANAGER_H_ 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/containers/hash_tables.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/macros.h" 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/observer_list.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/threading/thread_checker.h" 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "cc/surfaces/surface_damage_observer.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "cc/surfaces/surface_id.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/surfaces/surfaces_export.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace cc { 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CompositorFrame; 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Surface; 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CC_SURFACES_EXPORT SurfaceManager { 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SurfaceManager(); 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~SurfaceManager(); 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void RegisterSurface(Surface* surface); 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void DeregisterSurface(SurfaceId surface_id); 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Surface* GetSurfaceForId(SurfaceId surface_id); 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void AddObserver(SurfaceDamageObserver* obs) { 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) observer_list_.AddObserver(obs); 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void RemoveObserver(SurfaceDamageObserver* obs) { 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) observer_list_.RemoveObserver(obs); 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void SurfaceModified(SurfaceId surface_id); 3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef base::hash_map<SurfaceId, Surface*> SurfaceMap; 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SurfaceMap surface_map_; 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ObserverList<SurfaceDamageObserver> observer_list_; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ThreadChecker thread_checker_; 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SurfaceManager); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace cc 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // CC_SURFACES_SURFACE_MANAGER_H_ 52