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

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

Issue 2903853002: Make RendererCompositorFrameSink derive from ClientCompositorFrameSink (Closed)
Patch Set: Add comments Created 3 years, 7 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 92547a90b705889c5b1a07ac9d0072274613909a..7c14ba3876f18c5018d8d3ab4b265cbf8ca87589 100644
--- a/content/renderer/gpu/renderer_compositor_frame_sink.cc
+++ b/content/renderer/gpu/renderer_compositor_frame_sink.cc
@@ -36,27 +36,22 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
cc::mojom::MojoCompositorFrameSinkPtrInfo sink_info,
cc::mojom::MojoCompositorFrameSinkClientRequest sink_client_request,
scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
- : CompositorFrameSink(std::move(context_provider),
- std::move(worker_context_provider),
- gpu_memory_buffer_manager,
- shared_bitmap_manager),
+ : ClientCompositorFrameSink(std::move(context_provider),
+ std::move(worker_context_provider),
+ gpu_memory_buffer_manager,
+ shared_bitmap_manager,
+ std::move(synthetic_begin_frame_source),
+ std::move(sink_info),
+ std::move(sink_client_request),
+ false /* enable_surface_synchronization */),
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)),
- external_begin_frame_source_(
- synthetic_begin_frame_source_
- ? nullptr
- : base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
- routing_id_(routing_id),
- sink_info_(std::move(sink_info)),
- sink_client_request_(std::move(sink_client_request)),
- sink_client_binding_(this) {
+ routing_id_(routing_id) {
DCHECK(compositor_frame_sink_filter_);
DCHECK(frame_swap_message_queue_);
DCHECK(message_sender_);
- thread_checker_.DetachFromThread();
}
RendererCompositorFrameSink::RendererCompositorFrameSink(
@@ -66,80 +61,47 @@ RendererCompositorFrameSink::RendererCompositorFrameSink(
cc::mojom::MojoCompositorFrameSinkPtrInfo sink_info,
cc::mojom::MojoCompositorFrameSinkClientRequest sink_client_request,
scoped_refptr<FrameSwapMessageQueue> swap_frame_message_queue)
- : CompositorFrameSink(std::move(vulkan_context_provider)),
+ : ClientCompositorFrameSink(std::move(vulkan_context_provider),
+ std::move(synthetic_begin_frame_source),
+ std::move(sink_info),
+ std::move(sink_client_request),
+ false /* enable_surface_synchronization */),
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)),
- external_begin_frame_source_(
- synthetic_begin_frame_source_
- ? nullptr
- : base::MakeUnique<cc::ExternalBeginFrameSource>(this)),
- routing_id_(routing_id),
- sink_info_(std::move(sink_info)),
- sink_client_request_(std::move(sink_client_request)),
- sink_client_binding_(this) {
+ routing_id_(routing_id) {
DCHECK(compositor_frame_sink_filter_);
DCHECK(frame_swap_message_queue_);
DCHECK(message_sender_);
- thread_checker_.DetachFromThread();
}
RendererCompositorFrameSink::~RendererCompositorFrameSink() = default;
bool RendererCompositorFrameSink::BindToClient(
cc::CompositorFrameSinkClient* client) {
- DCHECK(thread_checker_.CalledOnValidThread());
- if (!cc::CompositorFrameSink::BindToClient(client))
+ if (!ClientCompositorFrameSink::BindToClient(client))
return false;
- sink_.Bind(std::move(sink_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_);
+
return true;
}
void RendererCompositorFrameSink::DetachFromClient() {
- DCHECK(thread_checker_.CalledOnValidThread());
- client_->SetBeginFrameSource(nullptr);
- // Destroy the begin frame source on the same thread it was bound on.
- // 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();
+ ClientCompositorFrameSink::DetachFromClient();
}
void RendererCompositorFrameSink::SubmitCompositorFrame(
cc::CompositorFrame frame) {
- // We should only submit CompositorFrames with valid BeginFrameAcks.
- DCHECK(frame.metadata.begin_frame_ack.has_damage);
- DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber,
- frame.metadata.begin_frame_ack.sequence_number);
- auto new_surface_properties =
- RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
- if (!local_surface_id_.is_valid() ||
- new_surface_properties != current_surface_properties_) {
- local_surface_id_ = id_allocator_.GenerateId();
- current_surface_properties_ = new_surface_properties;
- }
-
{
std::unique_ptr<FrameSwapMessageQueue::SendMessageScope>
send_message_scope =
@@ -148,49 +110,24 @@ void RendererCompositorFrameSink::SubmitCompositorFrame(
frame_swap_message_queue_->DrainMessages(&messages);
std::vector<IPC::Message> messages_to_send;
FrameSwapMessageQueue::TransferMessages(&messages, &messages_to_send);
- uint32_t frame_token = 0;
- 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));
- if (frame_token) {
+ if (!messages_to_send.empty()) {
+ frame.metadata.frame_token =
+ frame_swap_message_queue_->AllocateFrameToken();
message_sender_->Send(new ViewHostMsg_FrameSwapMessages(
- routing_id_, frame_token, messages_to_send));
+ routing_id_, frame.metadata.frame_token, messages_to_send));
}
// ~send_message_scope.
}
+ auto new_surface_properties =
+ RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
+ ClientCompositorFrameSink::SubmitCompositorFrame(std::move(frame));
+ current_surface_properties_ = new_surface_properties;
}
-void RendererCompositorFrameSink::DidNotProduceFrame(
- const cc::BeginFrameAck& ack) {
- DCHECK(!ack.has_damage);
- DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
- sink_->DidNotProduceFrame(ack);
-}
-
-void RendererCompositorFrameSink::OnMessageReceived(
- const IPC::Message& message) {
- DCHECK(thread_checker_.CalledOnValidThread());
-}
-
-void RendererCompositorFrameSink::DidReceiveCompositorFrameAck(
- const cc::ReturnedResourceArray& resources) {
- ReclaimResources(resources);
- 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) {
- sink_->SetNeedsBeginFrame(needs_begin_frames);
+bool RendererCompositorFrameSink::ShouldAllocateNewLocalSurfaceId(
+ const cc::CompositorFrame& frame) {
+ return current_surface_properties_ !=
+ RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
}
} // namespace content
« no previous file with comments | « content/renderer/gpu/renderer_compositor_frame_sink.h ('k') | content/renderer/mus/renderer_window_tree_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698