Index: components/mus/ws/server_window_surface_manager.cc |
diff --git a/components/mus/ws/server_window_surface_manager.cc b/components/mus/ws/server_window_surface_manager.cc |
index 1699de41bc8006f97d94066f349ca176f0927731..5d5dc4c5dca4d25b24403d4338a4610a22955a5a 100644 |
--- a/components/mus/ws/server_window_surface_manager.cc |
+++ b/components/mus/ws/server_window_surface_manager.cc |
@@ -4,6 +4,7 @@ |
#include "components/mus/ws/server_window_surface_manager.h" |
+#include "components/mus/surfaces/surfaces_state.h" |
#include "components/mus/ws/server_window.h" |
#include "components/mus/ws/server_window_delegate.h" |
#include "components/mus/ws/server_window_surface.h" |
@@ -34,8 +35,16 @@ void ServerWindowSurfaceManager::CreateSurface( |
mojom::SurfaceType surface_type, |
mojo::InterfaceRequest<mojom::Surface> request, |
mojom::SurfaceClientPtr client) { |
- type_to_surface_map_[surface_type] = make_scoped_ptr(new ServerWindowSurface( |
+ scoped_ptr<ServerWindowSurface> surface(new ServerWindowSurface( |
this, surface_type, std::move(request), std::move(client))); |
+ if (!HasAnySurface()) { |
+ // Only one SurfaceFactoryClient can be registered per surface id namespace, |
+ // so register the first one. Since all surfaces created by this manager |
+ // represent the same window, the begin frame source can be shared by |
+ // all surfaces created here. |
+ surface->RegisterForBeginFrames(); |
+ } |
+ type_to_surface_map_[surface_type] = std::move(surface); |
} |
ServerWindowSurface* ServerWindowSurfaceManager::GetDefaultSurface() { |
@@ -52,10 +61,19 @@ ServerWindowSurface* ServerWindowSurfaceManager::GetSurfaceByType( |
return iter == type_to_surface_map_.end() ? nullptr : iter->second.get(); |
} |
-bool ServerWindowSurfaceManager::HasSurfaceOfType(mojom::SurfaceType type) { |
+bool ServerWindowSurfaceManager::HasSurfaceOfType( |
+ mojom::SurfaceType type) const { |
return type_to_surface_map_.count(type) > 0; |
} |
+bool ServerWindowSurfaceManager::HasAnySurface() { |
+ return !GetDefaultSurface() && !GetUnderlaySurface(); |
+} |
+ |
+cc::SurfaceManager* ServerWindowSurfaceManager::GetSurfaceManager() { |
+ return window()->delegate()->GetSurfacesState()->manager(); |
+} |
+ |
bool ServerWindowSurfaceManager::IsSurfaceReadyAndNonEmpty( |
mojom::SurfaceType type) const { |
auto iter = type_to_surface_map_.find(type); |