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

Unified Diff: cc/surfaces/surface_display_output_surface.cc

Issue 2144733005: [WIP] cc: Plumb SurfaceId from clients Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Ensure only SurfaceFactoy and tests can update hierarchy Created 4 years, 5 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: cc/surfaces/surface_display_output_surface.cc
diff --git a/cc/surfaces/surface_display_output_surface.cc b/cc/surfaces/surface_display_output_surface.cc
index cc49517b46d09cb36663e00b6cfa056d333f7b3f..d44bf28aa1dbb1b5adbfee6d6ade8c11cd03b197 100644
--- a/cc/surfaces/surface_display_output_surface.cc
+++ b/cc/surfaces/surface_display_output_surface.cc
@@ -24,8 +24,7 @@ SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface(
nullptr),
surface_manager_(surface_manager),
surface_id_allocator_(surface_id_allocator),
- display_(display),
- factory_(surface_manager, this) {
+ display_(display) {
DCHECK(thread_checker_.CalledOnValidThread());
capabilities_.delegated_rendering = true;
capabilities_.adjust_deadline_for_parent = true;
@@ -34,7 +33,6 @@ SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface(
// Display and SurfaceDisplayOutputSurface share a GL context, so sync
// points aren't needed when passing resources between them.
capabilities_.delegated_sync_points_required = false;
- factory_.set_needs_sync_points(false);
}
SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface(
@@ -45,8 +43,7 @@ SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface(
: OutputSurface(std::move(vulkan_context_provider)),
surface_manager_(surface_manager),
surface_id_allocator_(surface_id_allocator),
- display_(display),
- factory_(surface_manager, this) {
+ display_(display) {
DCHECK(thread_checker_.CalledOnValidThread());
capabilities_.delegated_rendering = true;
capabilities_.adjust_deadline_for_parent = true;
@@ -64,16 +61,16 @@ void SurfaceDisplayOutputSurface::SwapBuffers(CompositorFrame frame) {
frame.delegated_frame_data->render_pass_list.back()->output_rect.size();
if (frame_size.IsEmpty() || frame_size != last_swap_frame_size_) {
if (!delegated_surface_id_.is_null()) {
- factory_.Destroy(delegated_surface_id_);
+ factory_->Destroy(delegated_surface_id_);
}
delegated_surface_id_ = surface_id_allocator_->GenerateId();
- factory_.Create(delegated_surface_id_);
+ factory_->Create(delegated_surface_id_);
last_swap_frame_size_ = frame_size;
}
display_->SetSurfaceId(delegated_surface_id_,
frame.metadata.device_scale_factor);
- factory_.SubmitCompositorFrame(
+ factory_->SubmitCompositorFrame(
delegated_surface_id_, std::move(frame),
base::Bind(&SurfaceDisplayOutputSurface::SwapBuffersComplete,
base::Unretained(this)));
@@ -82,8 +79,10 @@ void SurfaceDisplayOutputSurface::SwapBuffers(CompositorFrame frame) {
bool SurfaceDisplayOutputSurface::BindToClient(OutputSurfaceClient* client) {
DCHECK(thread_checker_.CalledOnValidThread());
- surface_manager_->RegisterSurfaceFactoryClient(
- surface_id_allocator_->client_id(), this);
+ factory_.reset(new SurfaceFactory(surface_id_allocator_->client_id(),
+ surface_manager_, this));
+ if (!capabilities_.delegated_sync_points_required)
+ factory_->set_needs_sync_points(false);
if (!OutputSurface::BindToClient(client))
return false;
@@ -103,8 +102,8 @@ bool SurfaceDisplayOutputSurface::BindToClient(OutputSurfaceClient* client) {
void SurfaceDisplayOutputSurface::ForceReclaimResources() {
if (!delegated_surface_id_.is_null()) {
- factory_.SubmitCompositorFrame(delegated_surface_id_, CompositorFrame(),
- SurfaceFactory::DrawCallback());
+ factory_->SubmitCompositorFrame(delegated_surface_id_, CompositorFrame(),
+ SurfaceFactory::DrawCallback());
}
}
@@ -112,11 +111,10 @@ void SurfaceDisplayOutputSurface::DetachFromClient() {
DCHECK(HasClient());
// Unregister the SurfaceFactoryClient here instead of the dtor so that only
// one client is alive for this namespace at any given time.
- surface_manager_->UnregisterSurfaceFactoryClient(
- surface_id_allocator_->client_id());
if (!delegated_surface_id_.is_null())
- factory_.Destroy(delegated_surface_id_);
+ factory_->Destroy(delegated_surface_id_);
+ factory_.reset();
OutputSurface::DetachFromClient();
}
« no previous file with comments | « cc/surfaces/surface_display_output_surface.h ('k') | cc/surfaces/surface_display_output_surface_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698