| Index: services/ui/ws/server_window_compositor_frame_sink_manager.cc
|
| diff --git a/services/ui/ws/server_window_compositor_frame_sink_manager.cc b/services/ui/ws/server_window_compositor_frame_sink_manager.cc
|
| index 2b9b57223cd71efff366c0dd628cf7df333ceaeb..b89eb1940b467eac29ab2a550d701a795aa3b60c 100644
|
| --- a/services/ui/ws/server_window_compositor_frame_sink_manager.cc
|
| +++ b/services/ui/ws/server_window_compositor_frame_sink_manager.cc
|
| @@ -35,36 +35,22 @@ bool ServerWindowCompositorFrameSinkManager::ShouldDraw() {
|
| return !waiting_for_initial_frames_;
|
| }
|
|
|
| -void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSink(
|
| - mojom::CompositorFrameSinkType compositor_frame_sink_type,
|
| +void ServerWindowCompositorFrameSinkManager::CreateDisplayCompositorFrameSink(
|
| gfx::AcceleratedWidget widget,
|
| cc::mojom::MojoCompositorFrameSinkRequest request,
|
| cc::mojom::MojoCompositorFrameSinkClientPtr client) {
|
| - cc::FrameSinkId frame_sink_id(
|
| - WindowIdToTransportId(window_->id()),
|
| - static_cast<uint32_t>(compositor_frame_sink_type));
|
| - CompositorFrameSinkData& data =
|
| - type_to_compositor_frame_sink_map_[compositor_frame_sink_type];
|
| - cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request;
|
| - if (data.pending_compositor_frame_sink_request.is_pending()) {
|
| - private_request = std::move(data.pending_compositor_frame_sink_request);
|
| - } else {
|
| - private_request = mojo::GetProxy(&data.compositor_frame_sink);
|
| - }
|
| -
|
| - // TODO(fsamuel): AcceleratedWidget cannot be transported over IPC for Mac or
|
| - // Android. We should instead use GpuSurfaceTracker here on those platforms.
|
| - window_->delegate()->GetDisplayCompositor()->CreateCompositorFrameSink(
|
| - frame_sink_id, widget, std::move(request), std::move(private_request),
|
| - std::move(client));
|
| + CreateCompositorFrameSinkInternal(mojom::CompositorFrameSinkType::DEFAULT,
|
| + widget, std::move(request),
|
| + std::move(client));
|
| +}
|
|
|
| - if (window_->parent()) {
|
| - window_->delegate()
|
| - ->GetRootWindow(window_)
|
| - ->GetOrCreateCompositorFrameSinkManager()
|
| - ->AddChildFrameSinkId(mojom::CompositorFrameSinkType::DEFAULT,
|
| - frame_sink_id);
|
| - }
|
| +void ServerWindowCompositorFrameSinkManager::CreateOffscreenCompositorFrameSink(
|
| + mojom::CompositorFrameSinkType compositor_frame_sink_type,
|
| + cc::mojom::MojoCompositorFrameSinkRequest request,
|
| + cc::mojom::MojoCompositorFrameSinkClientPtr client) {
|
| + CreateCompositorFrameSinkInternal(compositor_frame_sink_type,
|
| + gfx::kNullAcceleratedWidget,
|
| + std::move(request), std::move(client));
|
| }
|
|
|
| void ServerWindowCompositorFrameSinkManager::AddChildFrameSinkId(
|
| @@ -142,6 +128,49 @@ bool ServerWindowCompositorFrameSinkManager::
|
| latest_submitted_frame_size.height() >= window_->bounds().height();
|
| }
|
|
|
| +void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSinkInternal(
|
| + mojom::CompositorFrameSinkType compositor_frame_sink_type,
|
| + gfx::AcceleratedWidget widget,
|
| + cc::mojom::MojoCompositorFrameSinkRequest request,
|
| + cc::mojom::MojoCompositorFrameSinkClientPtr client) {
|
| + cc::FrameSinkId frame_sink_id(
|
| + WindowIdToTransportId(window_->id()),
|
| + static_cast<uint32_t>(compositor_frame_sink_type));
|
| + CompositorFrameSinkData& data =
|
| + type_to_compositor_frame_sink_map_[compositor_frame_sink_type];
|
| + cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request;
|
| + if (data.pending_compositor_frame_sink_request.is_pending()) {
|
| + private_request = std::move(data.pending_compositor_frame_sink_request);
|
| + } else {
|
| + private_request = mojo::GetProxy(&data.compositor_frame_sink);
|
| + }
|
| +
|
| + if (widget != gfx::kNullAcceleratedWidget) {
|
| + // TODO(fsamuel): AcceleratedWidget cannot be transported over IPC for Mac
|
| + // or Android. We should instead use GpuSurfaceTracker here on those
|
| + // platforms.
|
| + window_->delegate()
|
| + ->GetDisplayCompositor()
|
| + ->CreateDisplayCompositorFrameSink(
|
| + frame_sink_id, widget, std::move(request),
|
| + std::move(private_request), std::move(client));
|
| + } else {
|
| + window_->delegate()
|
| + ->GetDisplayCompositor()
|
| + ->CreateOffscreenCompositorFrameSink(frame_sink_id, std::move(request),
|
| + std::move(private_request),
|
| + std::move(client));
|
| + }
|
| +
|
| + if (window_->parent()) {
|
| + window_->delegate()
|
| + ->GetRootWindow(window_)
|
| + ->GetOrCreateCompositorFrameSinkManager()
|
| + ->AddChildFrameSinkId(mojom::CompositorFrameSinkType::DEFAULT,
|
| + frame_sink_id);
|
| + }
|
| +}
|
| +
|
| CompositorFrameSinkData::CompositorFrameSinkData() {}
|
|
|
| CompositorFrameSinkData::~CompositorFrameSinkData() {}
|
|
|