| Index: content/browser/renderer_host/delegated_frame_host.cc
|
| diff --git a/content/browser/renderer_host/delegated_frame_host.cc b/content/browser/renderer_host/delegated_frame_host.cc
|
| index eb0d0e176419bb239826ca7d16cb5d3ebacd1d9a..9505792fd0c14a225865dafd7ca08cd099daf730 100644
|
| --- a/content/browser/renderer_host/delegated_frame_host.cc
|
| +++ b/content/browser/renderer_host/delegated_frame_host.cc
|
| @@ -396,7 +396,8 @@
|
| if (!request_copy_of_output_callback_for_testing_.is_null())
|
| request_copy_of_output_callback_for_testing_.Run(std::move(request));
|
| else
|
| - surface_factory_->RequestCopyOfSurface(std::move(request));
|
| + surface_factory_->RequestCopyOfSurface(local_frame_id_,
|
| + std::move(request));
|
| } else {
|
| request->set_area(gfx::Rect(current_frame_size_in_dip_));
|
| RequestCopyOfOutput(std::move(request));
|
| @@ -475,11 +476,20 @@
|
| } else {
|
| ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
|
| cc::SurfaceManager* manager = factory->GetSurfaceManager();
|
| - bool allocated_new_local_frame_id = false;
|
| if (!local_frame_id_.is_valid() || frame_size != current_surface_size_ ||
|
| frame_size_in_dip != current_frame_size_in_dip_) {
|
| + if (local_frame_id_.is_valid())
|
| + surface_factory_->Destroy(local_frame_id_);
|
| local_frame_id_ = id_allocator_->GenerateId();
|
| - allocated_new_local_frame_id = true;
|
| + surface_factory_->Create(local_frame_id_);
|
| + // manager must outlive compositors using it.
|
| + client_->DelegatedFrameHostGetLayer()->SetShowSurface(
|
| + cc::SurfaceId(frame_sink_id_, local_frame_id_),
|
| + base::Bind(&SatisfyCallback, base::Unretained(manager)),
|
| + base::Bind(&RequireCallback, base::Unretained(manager)), frame_size,
|
| + frame_device_scale_factor, frame_size_in_dip);
|
| + current_surface_size_ = frame_size;
|
| + current_scale_factor_ = frame_device_scale_factor;
|
| }
|
|
|
| gfx::Size desired_size = client_->DelegatedFrameHostDesiredSizeInDIP();
|
| @@ -503,16 +513,6 @@
|
| }
|
| surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame),
|
| ack_callback);
|
| - if (allocated_new_local_frame_id) {
|
| - // manager must outlive compositors using it.
|
| - client_->DelegatedFrameHostGetLayer()->SetShowSurface(
|
| - cc::SurfaceId(frame_sink_id_, local_frame_id_),
|
| - base::Bind(&SatisfyCallback, base::Unretained(manager)),
|
| - base::Bind(&RequireCallback, base::Unretained(manager)), frame_size,
|
| - frame_device_scale_factor, frame_size_in_dip);
|
| - current_surface_size_ = frame_size;
|
| - current_scale_factor_ = frame_device_scale_factor;
|
| - }
|
| }
|
| released_front_lock_ = NULL;
|
| current_frame_size_in_dip_ = frame_size_in_dip;
|
| @@ -593,7 +593,7 @@
|
| void DelegatedFrameHost::EvictDelegatedFrame() {
|
| client_->DelegatedFrameHostGetLayer()->SetShowSolidColorContent();
|
| if (local_frame_id_.is_valid()) {
|
| - surface_factory_->EvictSurface();
|
| + surface_factory_->Destroy(local_frame_id_);
|
| local_frame_id_ = cc::LocalFrameId();
|
| }
|
| delegated_frame_evictor_->DiscardedFrame();
|
| @@ -827,7 +827,9 @@
|
| DCHECK(!compositor_);
|
| ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
|
| factory->GetContextFactory()->RemoveObserver(this);
|
| - surface_factory_->EvictSurface();
|
| +
|
| + if (local_frame_id_.is_valid())
|
| + surface_factory_->Destroy(local_frame_id_);
|
| factory->GetSurfaceManager()->UnregisterSurfaceFactoryClient(frame_sink_id_);
|
| factory->GetSurfaceManager()->InvalidateFrameSinkId(frame_sink_id_);
|
|
|
|
|