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

Unified Diff: content/renderer/gpu/renderer_compositor_frame_sink.cc

Issue 2774373002: Use MojoCompositorFrameSink in RendererCompositorFrameSink (Closed)
Patch Set: Fixed mac Created 3 years, 8 months 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: content/renderer/gpu/renderer_compositor_frame_sink.cc
diff --git a/content/renderer/gpu/renderer_compositor_frame_sink.cc b/content/renderer/gpu/renderer_compositor_frame_sink.cc
index 77a5d205a36d8961caaf69c39f2f46baaacb8146..7e231ffd746c9830e8988c3dd5679509eba62694 100644
--- a/content/renderer/gpu/renderer_compositor_frame_sink.cc
+++ b/content/renderer/gpu/renderer_compositor_frame_sink.cc
@@ -28,7 +28,6 @@ namespace content {
RendererCompositorFrameSink::RendererCompositorFrameSink(
int32_t routing_id,
- uint32_t compositor_frame_sink_id,
std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source,
scoped_refptr<cc::ContextProvider> context_provider,
scoped_refptr<cc::ContextProvider> worker_context_provider,
@@ -39,9 +38,6 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
std::move(worker_context_provider),
gpu_memory_buffer_manager,
shared_bitmap_manager),
- compositor_frame_sink_id_(compositor_frame_sink_id),
- compositor_frame_sink_filter_(
- RenderThreadImpl::current()->compositor_message_filter()),
message_sender_(RenderThreadImpl::current()->sync_message_filter()),
frame_swap_message_queue_(swap_frame_message_queue),
synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
@@ -49,23 +45,20 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
synthetic_begin_frame_source_
? nullptr
: base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
- routing_id_(routing_id) {
- DCHECK(compositor_frame_sink_filter_);
+ routing_id_(routing_id),
+ sink_client_binding_(this) {
DCHECK(frame_swap_message_queue_);
DCHECK(message_sender_);
thread_checker_.DetachFromThread();
+ EstablishMojoConnection();
}
RendererCompositorFrameSink::RendererCompositorFrameSink(
int32_t routing_id,
- uint32_t compositor_frame_sink_id,
std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source,
scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider,
scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
: CompositorFrameSink(std::move(vulkan_context_provider)),
- compositor_frame_sink_id_(compositor_frame_sink_id),
- compositor_frame_sink_filter_(
- RenderThreadImpl::current()->compositor_message_filter()),
message_sender_(RenderThreadImpl::current()->sync_message_filter()),
frame_swap_message_queue_(swap_frame_message_queue),
synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
@@ -73,11 +66,12 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
synthetic_begin_frame_source_
? nullptr
: base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
- routing_id_(routing_id) {
- DCHECK(compositor_frame_sink_filter_);
+ routing_id_(routing_id),
+ sink_client_binding_(this) {
DCHECK(frame_swap_message_queue_);
DCHECK(message_sender_);
thread_checker_.DetachFromThread();
+ EstablishMojoConnection();
}
RendererCompositorFrameSink::~RendererCompositorFrameSink() {
@@ -92,17 +86,14 @@ bool RendererCompositorFrameSink::BindToClient(
if (!cc::CompositorFrameSink::BindToClient(client))
return false;
+ sink_.Bind(std::move(sink_ptr_info_));
+ sink_client_binding_.Bind(std::move(sink_client_request_));
+
if (synthetic_begin_frame_source_)
client_->SetBeginFrameSource(synthetic_begin_frame_source_.get());
else
client_->SetBeginFrameSource(external_begin_frame_source_.get());
- compositor_frame_sink_proxy_ = new RendererCompositorFrameSinkProxy(this);
- compositor_frame_sink_filter_handler_ =
- base::Bind(&RendererCompositorFrameSinkProxy::OnMessageReceived,
- compositor_frame_sink_proxy_);
- compositor_frame_sink_filter_->AddHandlerOnCompositorThread(
- routing_id_, compositor_frame_sink_filter_handler_);
bound_ = true;
return true;
}
@@ -114,10 +105,8 @@ void RendererCompositorFrameSink::DetachFromClient() {
// The CompositorFrameSink itself is destroyed on the main thread.
external_begin_frame_source_ = nullptr;
synthetic_begin_frame_source_ = nullptr;
- compositor_frame_sink_proxy_->ClearCompositorFrameSink();
- compositor_frame_sink_filter_->RemoveHandlerOnCompositorThread(
- routing_id_, compositor_frame_sink_filter_handler_);
-
+ sink_.reset();
+ sink_client_binding_.Close();
cc::CompositorFrameSink::DetachFromClient();
bound_ = false;
}
@@ -143,55 +132,15 @@ void RendererCompositorFrameSink::SubmitCompositorFrame(
if (!messages_to_send.empty())
frame_token = frame_swap_message_queue_->AllocateFrameToken();
frame.metadata.frame_token = frame_token;
- Send(new ViewHostMsg_SwapCompositorFrame(
- routing_id_, compositor_frame_sink_id_, local_surface_id_, frame));
+ sink_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
if (frame_token) {
- Send(new ViewHostMsg_FrameSwapMessages(routing_id_, frame_token,
- messages_to_send));
+ message_sender_->Send(new ViewHostMsg_FrameSwapMessages(
+ routing_id_, frame_token, messages_to_send));
}
// ~send_message_scope.
}
}
-void RendererCompositorFrameSink::OnMessageReceived(
- const IPC::Message& message) {
- DCHECK(thread_checker_.CalledOnValidThread());
- IPC_BEGIN_MESSAGE_MAP(RendererCompositorFrameSink, message)
- IPC_MESSAGE_HANDLER(ViewMsg_ReclaimCompositorResources,
- OnReclaimCompositorResources)
- IPC_MESSAGE_HANDLER(ViewMsg_SetBeginFramePaused,
- OnSetBeginFrameSourcePaused)
- IPC_MESSAGE_HANDLER(ViewMsg_BeginFrame, OnBeginFrame)
- IPC_END_MESSAGE_MAP()
-}
-
-void RendererCompositorFrameSink::OnReclaimCompositorResources(
- uint32_t compositor_frame_sink_id,
- bool is_swap_ack,
- const cc::ReturnedResourceArray& resources) {
- // Ignore message if it's a stale one coming from a different output surface
- // (e.g. after a lost context).
- if (compositor_frame_sink_id != compositor_frame_sink_id_)
- return;
- client_->ReclaimResources(resources);
- if (is_swap_ack)
- client_->DidReceiveCompositorFrameAck();
-}
-
-void RendererCompositorFrameSink::OnSetBeginFrameSourcePaused(bool paused) {
- if (external_begin_frame_source_)
- external_begin_frame_source_->OnSetBeginFrameSourcePaused(paused);
-}
-
-void RendererCompositorFrameSink::OnBeginFrame(const cc::BeginFrameArgs& args) {
- if (external_begin_frame_source_)
- external_begin_frame_source_->OnBeginFrame(args);
-}
-
-bool RendererCompositorFrameSink::Send(IPC::Message* message) {
- return message_sender_->Send(message);
-}
-
bool RendererCompositorFrameSink::ShouldAllocateNewLocalSurfaceId(
const cc::CompositorFrame& frame) {
cc::RenderPass* root_pass = frame.render_pass_list.back().get();
@@ -239,8 +188,22 @@ void RendererCompositorFrameSink::UpdateFrameData(
#endif
}
+void RendererCompositorFrameSink::DidReceiveCompositorFrameAck() {
+ client_->DidReceiveCompositorFrameAck();
+}
+
+void RendererCompositorFrameSink::OnBeginFrame(const cc::BeginFrameArgs& args) {
+ if (external_begin_frame_source_)
+ external_begin_frame_source_->OnBeginFrame(args);
+}
+
+void RendererCompositorFrameSink::ReclaimResources(
+ const cc::ReturnedResourceArray& resources) {
+ client_->ReclaimResources(resources);
+}
+
void RendererCompositorFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
- Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, needs_begin_frames));
+ sink_->SetNeedsBeginFrame(needs_begin_frames);
}
void RendererCompositorFrameSink::OnDidFinishFrame(
@@ -248,7 +211,18 @@ void RendererCompositorFrameSink::OnDidFinishFrame(
DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
// If there was damage, ViewHostMsg_SwapCompositorFrame includes the ack.
if (!ack.has_damage)
- Send(new ViewHostMsg_BeginFrameDidNotSwap(routing_id_, ack));
+ sink_->BeginFrameDidNotSwap(ack);
+}
+
+void RendererCompositorFrameSink::EstablishMojoConnection() {
+ cc::mojom::MojoCompositorFrameSinkPtr sink;
+ cc::mojom::MojoCompositorFrameSinkRequest sink_request =
+ mojo::MakeRequest(&sink);
+ cc::mojom::MojoCompositorFrameSinkClientPtr sink_client;
+ sink_client_request_ = mojo::MakeRequest(&sink_client);
+ RenderThreadImpl::current()->GetFrameSinkProvider()->CreateForWidget(
+ routing_id_, std::move(sink_request), std::move(sink_client));
+ sink_ptr_info_ = sink.PassInterface();
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698