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

Unified Diff: components/viz/client/client_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
« no previous file with comments | « components/viz/client/client_compositor_frame_sink.h ('k') | content/renderer/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/viz/client/client_compositor_frame_sink.cc
diff --git a/components/viz/client/client_compositor_frame_sink.cc b/components/viz/client/client_compositor_frame_sink.cc
index df0ad3f928eb32b6699386d8c3f8eb223a4fb50b..e363f8c58e75735b9ef737af62a2f795a56f7762 100644
--- a/components/viz/client/client_compositor_frame_sink.cc
+++ b/components/viz/client/client_compositor_frame_sink.cc
@@ -14,16 +14,36 @@ namespace viz {
ClientCompositorFrameSink::ClientCompositorFrameSink(
scoped_refptr<cc::ContextProvider> context_provider,
+ scoped_refptr<cc::ContextProvider> worker_context_provider,
gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
+ cc::SharedBitmapManager* shared_bitmap_manager,
+ std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source,
cc::mojom::MojoCompositorFrameSinkPtrInfo compositor_frame_sink_info,
cc::mojom::MojoCompositorFrameSinkClientRequest client_request,
bool enable_surface_synchronization)
: cc::CompositorFrameSink(std::move(context_provider),
- nullptr,
+ std::move(worker_context_provider),
gpu_memory_buffer_manager,
- nullptr),
+ shared_bitmap_manager),
+ synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
compositor_frame_sink_info_(std::move(compositor_frame_sink_info)),
client_request_(std::move(client_request)),
+ client_binding_(this),
+ enable_surface_synchronization_(enable_surface_synchronization) {
+ DETACH_FROM_THREAD(thread_checker_);
+}
+
+ClientCompositorFrameSink::ClientCompositorFrameSink(
+ scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider,
+ std::unique_ptr<cc::SyntheticBeginFrameSource> synthetic_begin_frame_source,
+ cc::mojom::MojoCompositorFrameSinkPtrInfo compositor_frame_sink_info,
+ cc::mojom::MojoCompositorFrameSinkClientRequest client_request,
+ bool enable_surface_synchronization)
+ : cc::CompositorFrameSink(std::move(vulkan_context_provider)),
+ synthetic_begin_frame_source_(std::move(synthetic_begin_frame_source)),
+ compositor_frame_sink_info_(std::move(compositor_frame_sink_info)),
+ client_request_(std::move(client_request)),
+ client_binding_(this),
enable_surface_synchronization_(enable_surface_synchronization) {
DETACH_FROM_THREAD(thread_checker_);
}
@@ -32,25 +52,30 @@ ClientCompositorFrameSink::~ClientCompositorFrameSink() {}
bool ClientCompositorFrameSink::BindToClient(
cc::CompositorFrameSinkClient* client) {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
if (!cc::CompositorFrameSink::BindToClient(client))
return false;
- DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
compositor_frame_sink_.Bind(std::move(compositor_frame_sink_info_));
- client_binding_.reset(
- new mojo::Binding<cc::mojom::MojoCompositorFrameSinkClient>(
- this, std::move(client_request_)));
+ client_binding_.Bind(std::move(client_request_));
- begin_frame_source_ = base::MakeUnique<cc::ExternalBeginFrameSource>(this);
+ if (synthetic_begin_frame_source_) {
+ client->SetBeginFrameSource(synthetic_begin_frame_source_.get());
+ } else {
+ begin_frame_source_ = base::MakeUnique<cc::ExternalBeginFrameSource>(this);
+ client->SetBeginFrameSource(begin_frame_source_.get());
+ }
- client->SetBeginFrameSource(begin_frame_source_.get());
return true;
}
void ClientCompositorFrameSink::DetachFromClient() {
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
client_->SetBeginFrameSource(nullptr);
begin_frame_source_.reset();
- client_binding_.reset();
+ synthetic_begin_frame_source_.reset();
+ client_binding_.Close();
compositor_frame_sink_.reset();
cc::CompositorFrameSink::DetachFromClient();
}
@@ -65,20 +90,17 @@ void ClientCompositorFrameSink::SetLocalSurfaceId(
void ClientCompositorFrameSink::SubmitCompositorFrame(
cc::CompositorFrame frame) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (!compositor_frame_sink_)
- return;
-
DCHECK(frame.metadata.begin_frame_ack.has_damage);
DCHECK_LE(cc::BeginFrameArgs::kStartingFrameNumber,
frame.metadata.begin_frame_ack.sequence_number);
- gfx::Size frame_size = frame.render_pass_list.back()->output_rect.size();
- if (!local_surface_id_.is_valid() ||
- frame_size != last_submitted_frame_size_) {
- last_submitted_frame_size_ = frame_size;
- if (!enable_surface_synchronization_)
- local_surface_id_ = id_allocator_.GenerateId();
- }
+ if (!enable_surface_synchronization_ &&
+ (!local_surface_id_.is_valid() || ShouldAllocateNewLocalSurfaceId(frame)))
+ local_surface_id_ = id_allocator_.GenerateId();
+
+ surface_size_ = frame.render_pass_list.back()->output_rect.size();
+ device_scale_factor_ = frame.metadata.device_scale_factor;
+
compositor_frame_sink_->SubmitCompositorFrame(local_surface_id_,
std::move(frame));
}
@@ -93,25 +115,29 @@ void ClientCompositorFrameSink::DidNotProduceFrame(
void ClientCompositorFrameSink::DidReceiveCompositorFrameAck(
const cc::ReturnedResourceArray& resources) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (!client_)
- return;
client_->ReclaimResources(resources);
client_->DidReceiveCompositorFrameAck();
}
void ClientCompositorFrameSink::OnBeginFrame(
const cc::BeginFrameArgs& begin_frame_args) {
- begin_frame_source_->OnBeginFrame(begin_frame_args);
+ if (begin_frame_source_)
+ begin_frame_source_->OnBeginFrame(begin_frame_args);
}
void ClientCompositorFrameSink::ReclaimResources(
const cc::ReturnedResourceArray& resources) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (!client_)
- return;
client_->ReclaimResources(resources);
}
+bool ClientCompositorFrameSink::ShouldAllocateNewLocalSurfaceId(
+ const cc::CompositorFrame& frame) {
+ gfx::Size frame_size = frame.render_pass_list.back()->output_rect.size();
+ return frame_size != surface_size_ ||
+ device_scale_factor_ != frame.metadata.device_scale_factor;
+}
+
void ClientCompositorFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
compositor_frame_sink_->SetNeedsBeginFrame(needs_begin_frames);
}
« no previous file with comments | « components/viz/client/client_compositor_frame_sink.h ('k') | content/renderer/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698