| Index: services/ui/ws/server_window_compositor_frame_sink.cc
|
| diff --git a/services/ui/ws/server_window_compositor_frame_sink.cc b/services/ui/ws/server_window_compositor_frame_sink.cc
|
| index 83d368c0987b53459023ad5eb6db50c1d5d17dad..417cc36af41cf2ef3d7d430ff33193960e71385f 100644
|
| --- a/services/ui/ws/server_window_compositor_frame_sink.cc
|
| +++ b/services/ui/ws/server_window_compositor_frame_sink.cc
|
| @@ -17,9 +17,6 @@
|
| #include "cc/surfaces/display_scheduler.h"
|
| #include "services/ui/surfaces/direct_output_surface.h"
|
| #include "services/ui/surfaces/display_compositor.h"
|
| -#include "services/ui/ws/server_window.h"
|
| -#include "services/ui/ws/server_window_compositor_frame_sink_manager.h"
|
| -#include "services/ui/ws/server_window_delegate.h"
|
|
|
| #if defined(USE_OZONE)
|
| #include "gpu/command_buffer/client/gles2_interface.h"
|
| @@ -30,7 +27,7 @@ namespace ui {
|
| namespace ws {
|
|
|
| ServerWindowCompositorFrameSink::ServerWindowCompositorFrameSink(
|
| - ServerWindowCompositorFrameSinkManager* manager,
|
| + scoped_refptr<DisplayCompositor> display_compositor,
|
| const cc::FrameSinkId& frame_sink_id,
|
| gfx::AcceleratedWidget widget,
|
| gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
|
| @@ -39,16 +36,13 @@ ServerWindowCompositorFrameSink::ServerWindowCompositorFrameSink(
|
| cc::mojom::MojoCompositorFrameSinkClientPtr client)
|
| : frame_sink_id_(frame_sink_id),
|
| task_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| - manager_(manager),
|
| - surface_factory_(frame_sink_id_,
|
| - manager_->GetCompositorFrameSinkManager(),
|
| - this),
|
| + display_compositor_(display_compositor),
|
| + surface_factory_(frame_sink_id_, display_compositor_->manager(), this),
|
| client_(std::move(client)),
|
| binding_(this, std::move(request)) {
|
| - cc::SurfaceManager* surface_manager =
|
| - manager_->GetCompositorFrameSinkManager();
|
| - surface_manager->RegisterFrameSinkId(frame_sink_id_);
|
| - surface_manager->RegisterSurfaceFactoryClient(frame_sink_id_, this);
|
| + display_compositor_->manager()->RegisterFrameSinkId(frame_sink_id_);
|
| + display_compositor_->manager()->RegisterSurfaceFactoryClient(frame_sink_id_,
|
| + this);
|
|
|
| if (widget != gfx::kNullAcceleratedWidget)
|
| InitDisplay(widget, gpu_memory_buffer_manager, std::move(context_provider));
|
| @@ -59,15 +53,15 @@ ServerWindowCompositorFrameSink::~ServerWindowCompositorFrameSink() {
|
| // call back into here and access |client_| so we should destroy
|
| // |surface_factory_|'s resources early on.
|
| surface_factory_.DestroyAll();
|
| - cc::SurfaceManager* surface_manager =
|
| - manager_->GetCompositorFrameSinkManager();
|
| - surface_manager->UnregisterSurfaceFactoryClient(frame_sink_id_);
|
| - surface_manager->InvalidateFrameSinkId(frame_sink_id_);
|
| + display_compositor_->manager()->UnregisterSurfaceFactoryClient(
|
| + frame_sink_id_);
|
| + display_compositor_->manager()->InvalidateFrameSinkId(frame_sink_id_);
|
| }
|
|
|
| void ServerWindowCompositorFrameSink::SetNeedsBeginFrame(
|
| bool needs_begin_frame) {
|
| - // TODO(fsamuel): Implement this.
|
| + needs_begin_frame_ = needs_begin_frame;
|
| + UpdateNeedsBeginFramesInternal();
|
| }
|
|
|
| void ServerWindowCompositorFrameSink::SubmitCompositorFrame(
|
| @@ -93,8 +87,6 @@ void ServerWindowCompositorFrameSink::SubmitCompositorFrame(
|
| frame.metadata.device_scale_factor);
|
| }
|
| last_submitted_frame_size_ = frame_size;
|
| - ServerWindow* window = manager_->window_;
|
| - window->delegate()->OnScheduleWindowPaint(window);
|
| }
|
|
|
| void ServerWindowCompositorFrameSink::DidReceiveCompositorFrameAck() {
|
| @@ -109,6 +101,20 @@ void ServerWindowCompositorFrameSink::DidReceiveCompositorFrameAck() {
|
| ack_pending_count_--;
|
| }
|
|
|
| +void ServerWindowCompositorFrameSink::AddChildFrameSink(
|
| + const cc::FrameSinkId& child_frame_sink_id) {
|
| + cc::SurfaceManager* surface_manager = display_compositor_->manager();
|
| + surface_manager->RegisterFrameSinkHierarchy(frame_sink_id_,
|
| + child_frame_sink_id);
|
| +}
|
| +
|
| +void ServerWindowCompositorFrameSink::RemoveChildFrameSink(
|
| + const cc::FrameSinkId& child_frame_sink_id) {
|
| + cc::SurfaceManager* surface_manager = display_compositor_->manager();
|
| + surface_manager->UnregisterFrameSinkHierarchy(frame_sink_id_,
|
| + child_frame_sink_id);
|
| +}
|
| +
|
| void ServerWindowCompositorFrameSink::InitDisplay(
|
| gfx::AcceleratedWidget widget,
|
| gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
|
| @@ -147,8 +153,7 @@ void ServerWindowCompositorFrameSink::InitDisplay(
|
| cc::RendererSettings(), std::move(synthetic_begin_frame_source),
|
| std::move(display_output_surface), std::move(scheduler),
|
| base::MakeUnique<cc::TextureMailboxDeleter>(task_runner_.get())));
|
| - display_->Initialize(this, manager_->GetCompositorFrameSinkManager(),
|
| - frame_sink_id_);
|
| + display_->Initialize(this, display_compositor_->manager(), frame_sink_id_);
|
| display_->SetVisible(true);
|
| }
|
|
|
| @@ -177,6 +182,42 @@ void ServerWindowCompositorFrameSink::ReturnResources(
|
| void ServerWindowCompositorFrameSink::SetBeginFrameSource(
|
| cc::BeginFrameSource* begin_frame_source) {
|
| // TODO(tansell): Implement this.
|
| + if (begin_frame_source_ && added_frame_observer_) {
|
| + begin_frame_source_->RemoveObserver(this);
|
| + added_frame_observer_ = false;
|
| + }
|
| + begin_frame_source_ = begin_frame_source;
|
| + UpdateNeedsBeginFramesInternal();
|
| +}
|
| +
|
| +void ServerWindowCompositorFrameSink::OnBeginFrame(
|
| + const cc::BeginFrameArgs& args) {
|
| + UpdateNeedsBeginFramesInternal();
|
| + last_begin_frame_args_ = args;
|
| + if (client_)
|
| + client_->OnBeginFrame(args);
|
| +}
|
| +
|
| +const cc::BeginFrameArgs&
|
| +ServerWindowCompositorFrameSink::LastUsedBeginFrameArgs() const {
|
| + return last_begin_frame_args_;
|
| +}
|
| +
|
| +void ServerWindowCompositorFrameSink::OnBeginFrameSourcePausedChanged(
|
| + bool paused) {}
|
| +
|
| +void ServerWindowCompositorFrameSink::UpdateNeedsBeginFramesInternal() {
|
| + if (!begin_frame_source_)
|
| + return;
|
| +
|
| + if (needs_begin_frame_ == added_frame_observer_)
|
| + return;
|
| +
|
| + added_frame_observer_ = needs_begin_frame_;
|
| + if (needs_begin_frame_)
|
| + begin_frame_source_->AddObserver(this);
|
| + else
|
| + begin_frame_source_->RemoveObserver(this);
|
| }
|
|
|
| } // namespace ws
|
|
|