Index: services/ui/surfaces/display_compositor.cc |
diff --git a/services/ui/surfaces/display_compositor.cc b/services/ui/surfaces/display_compositor.cc |
index b022b427513302d476642d788cae236145c217c2..2da6ae9f30e1ffca0b60af92bbc233ff0ad4ea42 100644 |
--- a/services/ui/surfaces/display_compositor.cc |
+++ b/services/ui/surfaces/display_compositor.cc |
@@ -17,6 +17,7 @@ |
#include "cc/surfaces/surface.h" |
#include "components/display_compositor/gpu_display_compositor_frame_sink.h" |
#include "components/display_compositor/gpu_offscreen_compositor_frame_sink.h" |
+#include "components/display_compositor/offscreen_canvas_compositor_frame_sink.h" |
#include "gpu/command_buffer/client/shared_memory_limits.h" |
#include "gpu/ipc/gpu_in_process_thread_service.h" |
#include "mojo/public/cpp/bindings/strong_binding.h" |
@@ -44,10 +45,19 @@ DisplayCompositor::DisplayCompositor( |
binding_(this, std::move(request)) { |
manager_.AddObserver(this); |
} |
+DisplayCompositor::DisplayCompositor( |
+ cc::mojom::DisplayCompositorRequest request, |
+ cc::SurfaceManager* surfacemanager) |
+ : manager_of_system_(surfacemanager), binding_(this, std::move(request)) { |
+ if (manager_of_system_) |
+ manager_of_system_->AddObserver(this); |
+} |
DisplayCompositor::~DisplayCompositor() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
manager_.RemoveObserver(this); |
+ if (manager_of_system_) |
+ manager_of_system_->RemoveObserver(this); |
} |
void DisplayCompositor::OnClientConnectionLost( |
@@ -108,6 +118,19 @@ void DisplayCompositor::CreateOffscreenCompositorFrameSink( |
std::move(private_request), std::move(client)); |
} |
+void DisplayCompositor::CreateOffscreenCanvasCompositorFrameSink( |
+ const cc::FrameSinkId& frame_sink_id, |
+ cc::mojom::MojoCompositorFrameSinkRequest request, |
+ cc::mojom::MojoCompositorFrameSinkClientPtr client) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ DCHECK_EQ(0u, compositor_frame_sinks_.count(frame_sink_id)); |
+ |
+ compositor_frame_sinks_[frame_sink_id] = |
+ base::MakeUnique<display_compositor::OffscreenCanvasCompositorFrameSink>( |
+ this, manager_of_system_, frame_sink_id, std::move(request), |
+ std::move(client)); |
+} |
+ |
std::unique_ptr<cc::Display> DisplayCompositor::CreateDisplay( |
const cc::FrameSinkId& frame_sink_id, |
gpu::SurfaceHandle surface_handle, |