Index: cc/surfaces/surface_manager.h |
diff --git a/cc/surfaces/surface_manager.h b/cc/surfaces/surface_manager.h |
index 7515be51fdaf2d9dac42cc388447428f4fb5bfb8..fa6b9299a2111a639f2be4ca0ab3aa72ab78a77c 100644 |
--- a/cc/surfaces/surface_manager.h |
+++ b/cc/surfaces/surface_manager.h |
@@ -5,12 +5,17 @@ |
#ifndef CC_SURFACES_SURFACE_MANAGER_H_ |
#define CC_SURFACES_SURFACE_MANAGER_H_ |
+#include <list> |
+#include <set> |
+#include <vector> |
+ |
#include "base/containers/hash_tables.h" |
#include "base/macros.h" |
#include "base/observer_list.h" |
#include "base/threading/thread_checker.h" |
#include "cc/surfaces/surface_damage_observer.h" |
#include "cc/surfaces/surface_id.h" |
+#include "cc/surfaces/surface_sequence.h" |
#include "cc/surfaces/surfaces_export.h" |
namespace cc { |
@@ -25,6 +30,10 @@ class CC_SURFACES_EXPORT SurfaceManager { |
void RegisterSurface(Surface* surface); |
void DeregisterSurface(SurfaceId surface_id); |
+ // Destroy the Surface once a set of sequence numbers has been satisfied. |
+ void DestroyOnSequence(scoped_ptr<Surface> surface, |
+ const std::set<SurfaceSequence>& dependency_set); |
+ |
Surface* GetSurfaceForId(SurfaceId surface_id); |
void AddObserver(SurfaceDamageObserver* obs) { |
@@ -37,12 +46,27 @@ class CC_SURFACES_EXPORT SurfaceManager { |
void SurfaceModified(SurfaceId surface_id); |
+ // A frame for a surface satisfies a set of sequence numbers. |
+ void DidSatisfySequences(SurfaceId id, std::vector<uint32_t>* sequence); |
+ |
private: |
+ void SearchForSatisfaction(); |
+ |
typedef base::hash_map<SurfaceId, Surface*> SurfaceMap; |
SurfaceMap surface_map_; |
ObserverList<SurfaceDamageObserver> observer_list_; |
base::ThreadChecker thread_checker_; |
+ // List of surfaces to be destroyed, along with what sequences they're still |
+ // waiting on. |
+ typedef std::list<std::pair<Surface*, std::set<SurfaceSequence> > > |
+ SurfaceDestroyList; |
+ SurfaceDestroyList surfaces_to_destroy_; |
+ |
+ // Set of SurfaceSequences that have been satisfied by a frame but not yet |
+ // waited on. |
+ std::set<SurfaceSequence> satisfied_sequences_; |
+ |
DISALLOW_COPY_AND_ASSIGN(SurfaceManager); |
}; |