| 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();
|
| }
|
|
|
|
|