Index: services/ui/ws/server_window_surface_manager.cc |
diff --git a/services/ui/ws/server_window_surface_manager.cc b/services/ui/ws/server_window_surface_manager.cc |
index 0bb6277aee68c82f68ce37f93dd7a0eebe830245..147d2c23a9fe40968cfe6349caaa5111c80d258f 100644 |
--- a/services/ui/ws/server_window_surface_manager.cc |
+++ b/services/ui/ws/server_window_surface_manager.cc |
@@ -4,7 +4,7 @@ |
#include "services/ui/ws/server_window_surface_manager.h" |
-#include "services/ui/surfaces/surfaces_state.h" |
+#include "services/ui/surfaces/display_compositor.h" |
#include "services/ui/ws/server_window.h" |
#include "services/ui/ws/server_window_delegate.h" |
#include "services/ui/ws/server_window_surface.h" |
@@ -14,9 +14,11 @@ namespace ws { |
ServerWindowSurfaceManager::ServerWindowSurfaceManager(ServerWindow* window) |
: window_(window), |
+ frame_sink_id_(window->id().client_id, window->id().window_id), |
waiting_for_initial_frames_( |
window_->properties().count(ui::mojom::kWaitForUnderlay_Property) > |
0) { |
+ surface_sequence_generator_.set_frame_sink_id(frame_sink_id_); |
} |
ServerWindowSurfaceManager::~ServerWindowSurfaceManager() { |
@@ -39,11 +41,33 @@ void ServerWindowSurfaceManager::CreateSurface( |
mojom::SurfaceType surface_type, |
mojo::InterfaceRequest<mojom::Surface> request, |
mojom::SurfaceClientPtr client) { |
+ cc::FrameSinkId id = frame_sink_id_; |
+ // TODO(fsamuel): For non-default surfaces let's give them a unique ID that's |
+ // different. |
+ if (surface_type != mojom::SurfaceType::DEFAULT) { |
+ // TODO(fsamuel): HUGE HACK! |
+ id = cc::FrameSinkId( |
+ 100000000, |
+ window_->delegate()->GetDisplayCompositor()->next_client_id()); |
+ } |
+ |
std::unique_ptr<ServerWindowSurface> surface( |
- new ServerWindowSurface(this, std::move(request), std::move(client))); |
+ new ServerWindowSurface(this, id, std::move(request), std::move(client))); |
type_to_surface_map_[surface_type] = std::move(surface); |
} |
+cc::SurfaceSequence ServerWindowSurfaceManager::CreateSurfaceSequence() { |
+ return surface_sequence_generator_.CreateSurfaceSequence(); |
+} |
+ |
+void ServerWindowSurfaceManager::SatisfySurfaceSequence( |
+ const cc::SurfaceSequence& sequence) { |
+ std::vector<uint32_t> sequences; |
+ sequences.push_back(sequence.sequence); |
+ window_->delegate()->GetDisplayCompositor()->manager()-> |
+ DidSatisfySequences(sequence.frame_sink_id, &sequences); |
+} |
+ |
ServerWindowSurface* ServerWindowSurfaceManager::GetDefaultSurface() const { |
return GetSurfaceByType(mojom::SurfaceType::DEFAULT); |
} |
@@ -68,7 +92,7 @@ bool ServerWindowSurfaceManager::HasAnySurface() const { |
} |
cc::SurfaceManager* ServerWindowSurfaceManager::GetSurfaceManager() { |
- return window()->delegate()->GetSurfacesState()->manager(); |
+ return window()->delegate()->GetDisplayCompositor()->manager(); |
} |
bool ServerWindowSurfaceManager::IsSurfaceReadyAndNonEmpty( |