| Index: cc/surfaces/surface_manager.h
|
| diff --git a/cc/surfaces/surface_manager.h b/cc/surfaces/surface_manager.h
|
| index 6cca04223e82de8af88785e5823fdad5b3afc55f..872faece8f531d1468f57d5aba7054bcc17d6a17 100644
|
| --- a/cc/surfaces/surface_manager.h
|
| +++ b/cc/surfaces/surface_manager.h
|
| @@ -7,12 +7,12 @@
|
|
|
| #include <stdint.h>
|
|
|
| -#include <list>
|
| #include <memory>
|
| #include <unordered_map>
|
| #include <unordered_set>
|
| #include <vector>
|
|
|
| +#include "base/containers/flat_map.h"
|
| #include "base/containers/flat_set.h"
|
| #include "base/logging.h"
|
| #include "base/macros.h"
|
| @@ -67,12 +67,15 @@ class CC_SURFACES_EXPORT SurfaceManager {
|
|
|
| void RequestSurfaceResolution(Surface* pending_surface);
|
|
|
| - std::unique_ptr<Surface> CreateSurface(
|
| + // Creates a Surface for the given CompositorFrameSinkSupport. The surface
|
| + // will be destroyed when DestroySurface is called, all of its destruction
|
| + // dependencies are satisfied, and it is not reachable from the root surface.
|
| + Surface* CreateSurface(
|
| base::WeakPtr<CompositorFrameSinkSupport> compositor_frame_sink_support,
|
| const SurfaceInfo& surface_info);
|
|
|
| // Destroy the Surface once a set of sequence numbers has been satisfied.
|
| - void DestroySurface(std::unique_ptr<Surface> surface);
|
| + void DestroySurface(const SurfaceId& surface_id);
|
|
|
| // Called when a surface has been added to the aggregated CompositorFrame
|
| // and will notify observers with SurfaceObserver::OnSurfaceWillDraw.
|
| @@ -261,9 +264,8 @@ class CC_SURFACES_EXPORT SurfaceManager {
|
| // |surface_id| that were added before |surface_id| will also be removed.
|
| void RemoveTemporaryReference(const SurfaceId& surface_id, bool remove_range);
|
|
|
| - // Called when a surface is destroyed and it needs to be removed from the
|
| - // surface map.
|
| - void UnregisterSurface(const SurfaceId& surface_id);
|
| + // Removes the surface from the surface map and destroys it.
|
| + void DestroySurfaceInternal(const SurfaceId& surface_id);
|
|
|
| #if DCHECK_IS_ON()
|
| // Recursively prints surface references starting at |surface_id| to |str|.
|
| @@ -272,20 +274,19 @@ class CC_SURFACES_EXPORT SurfaceManager {
|
| std::stringstream* str);
|
| #endif
|
|
|
| + // Returns true if |surface_id| is in the garbage collector's queue.
|
| + bool IsMarkedForDestruction(const SurfaceId& surface_id);
|
| +
|
| // Use reference or sequence based lifetime management.
|
| LifetimeType lifetime_type_;
|
|
|
| FrameSinkManager framesink_manager_;
|
|
|
| - using SurfaceMap = std::unordered_map<SurfaceId, Surface*, SurfaceIdHash>;
|
| - SurfaceMap surface_map_;
|
| + base::flat_map<SurfaceId, std::unique_ptr<Surface>> surface_map_;
|
| base::ObserverList<SurfaceObserver> observer_list_;
|
| base::ThreadChecker thread_checker_;
|
|
|
| - // List of surfaces to be destroyed, along with what sequences they're still
|
| - // waiting on.
|
| - using SurfaceDestroyList = std::list<std::unique_ptr<Surface>>;
|
| - SurfaceDestroyList surfaces_to_destroy_;
|
| + base::flat_set<SurfaceId> surfaces_to_destroy_;
|
|
|
| // Set of SurfaceSequences that have been satisfied by a frame but not yet
|
| // waited on.
|
|
|