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

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

Issue 2835403004: Revert "Use MojoCompositorFrameSink in RendererCompositorFrameSink"
Patch Set: Rebased 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
« no previous file with comments | « content/renderer/gpu/renderer_compositor_frame_sink.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1d28f324497bc78f811a05d4e46036e2863a8043..77a5d205a36d8961caaf69c39f2f46baaacb8146 100644
--- a/content/renderer/gpu/renderer_compositor_frame_sink.cc
+++ b/content/renderer/gpu/renderer_compositor_frame_sink.cc
@@ -28,6 +28,7 @@ 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,
@@ -38,6 +39,7 @@ 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()),
@@ -47,21 +49,21 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
synthetic_begin_frame_source_
? nullptr
: base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
- routing_id_(routing_id),
- sink_client_binding_(this) {
+ routing_id_(routing_id) {
DCHECK(compositor_frame_sink_filter_);
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()),
@@ -71,13 +73,11 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
synthetic_begin_frame_source_
? nullptr
: base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
- routing_id_(routing_id),
- sink_client_binding_(this) {
+ routing_id_(routing_id) {
DCHECK(compositor_frame_sink_filter_);
DCHECK(frame_swap_message_queue_);
DCHECK(message_sender_);
thread_checker_.DetachFromThread();
- EstablishMojoConnection();
}
RendererCompositorFrameSink::~RendererCompositorFrameSink() {
@@ -92,9 +92,6 @@ 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
@@ -106,7 +103,6 @@ bool RendererCompositorFrameSink::BindToClient(
compositor_frame_sink_proxy_);
compositor_frame_sink_filter_->AddHandlerOnCompositorThread(
routing_id_, compositor_frame_sink_filter_handler_);
-
bound_ = true;
return true;
}
@@ -121,8 +117,7 @@ void RendererCompositorFrameSink::DetachFromClient() {
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;
}
@@ -148,10 +143,11 @@ void RendererCompositorFrameSink::SubmitCompositorFrame(
if (!messages_to_send.empty())
frame_token = frame_swap_message_queue_->AllocateFrameToken();
frame.metadata.frame_token = frame_token;
- sink_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
+ Send(new ViewHostMsg_SwapCompositorFrame(
+ routing_id_, compositor_frame_sink_id_, local_surface_id_, frame));
if (frame_token) {
- message_sender_->Send(new ViewHostMsg_FrameSwapMessages(
- routing_id_, frame_token, messages_to_send));
+ Send(new ViewHostMsg_FrameSwapMessages(routing_id_, frame_token,
+ messages_to_send));
}
// ~send_message_scope.
}
@@ -161,16 +157,41 @@ void RendererCompositorFrameSink::OnMessageReceived(
const IPC::Message& message) {
DCHECK(thread_checker_.CalledOnValidThread());
IPC_BEGIN_MESSAGE_MAP(RendererCompositorFrameSink, message)
- IPC_MESSAGE_HANDLER(ViewMsg_BeginFrame, OnBeginFrameIPC)
+ IPC_MESSAGE_HANDLER(ViewMsg_ReclaimCompositorResources,
+ OnReclaimCompositorResources)
+ IPC_MESSAGE_HANDLER(ViewMsg_SetBeginFramePaused,
+ OnSetBeginFrameSourcePaused)
+ IPC_MESSAGE_HANDLER(ViewMsg_BeginFrame, OnBeginFrame)
IPC_END_MESSAGE_MAP()
}
-void RendererCompositorFrameSink::OnBeginFrameIPC(
- const cc::BeginFrameArgs& args) {
+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();
@@ -218,24 +239,8 @@ void RendererCompositorFrameSink::UpdateFrameData(
#endif
}
-void RendererCompositorFrameSink::DidReceiveCompositorFrameAck(
- const cc::ReturnedResourceArray& resources) {
- ReclaimResources(resources);
- client_->DidReceiveCompositorFrameAck();
-}
-
-void RendererCompositorFrameSink::OnBeginFrame(const cc::BeginFrameArgs& args) {
- // See crbug.com/709689.
- NOTREACHED() << "BeginFrames are delivered using Chrome IPC.";
-}
-
-void RendererCompositorFrameSink::ReclaimResources(
- const cc::ReturnedResourceArray& resources) {
- client_->ReclaimResources(resources);
-}
-
void RendererCompositorFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
- sink_->SetNeedsBeginFrame(needs_begin_frames);
+ Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, needs_begin_frames));
}
void RendererCompositorFrameSink::OnDidFinishFrame(
@@ -243,18 +248,7 @@ void RendererCompositorFrameSink::OnDidFinishFrame(
DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
// If there was damage, ViewHostMsg_SwapCompositorFrame includes the ack.
if (!ack.has_damage)
- 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();
+ Send(new ViewHostMsg_BeginFrameDidNotSwap(routing_id_, ack));
}
} // namespace content
« no previous file with comments | « content/renderer/gpu/renderer_compositor_frame_sink.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698