Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(653)

Unified Diff: services/ui/ws/server_window_compositor_frame_sink.cc

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « services/ui/ws/server_window_compositor_frame_sink.h ('k') | services/ui/ws/server_window_compositor_frame_sink_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698