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