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 9505792fd0c14a225865dafd7ca08cd099daf730..bdc11c51015e22a2d2aaa25095eca11683292631 100644 |
--- a/content/browser/renderer_host/delegated_frame_host.cc |
+++ b/content/browser/renderer_host/delegated_frame_host.cc |
@@ -476,20 +476,11 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id, |
} else { |
ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
cc::SurfaceManager* manager = factory->GetSurfaceManager(); |
+ bool new_surface = false; |
Fady Samuel
2016/11/10 23:33:37
allocated_new_local_frame_id
Saman Sami
2016/11/11 17:49:59
Done.
|
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(); |
- 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; |
+ new_surface = true; |
} |
gfx::Size desired_size = client_->DelegatedFrameHostDesiredSizeInDIP(); |
@@ -513,6 +504,16 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id, |
} |
surface_factory_->SubmitCompositorFrame(local_frame_id_, std::move(frame), |
ack_callback); |
+ if (new_surface) { |
+ // 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 +594,6 @@ void DelegatedFrameHost::SetBeginFrameSource( |
void DelegatedFrameHost::EvictDelegatedFrame() { |
client_->DelegatedFrameHostGetLayer()->SetShowSolidColorContent(); |
if (local_frame_id_.is_valid()) { |
- surface_factory_->Destroy(local_frame_id_); |
local_frame_id_ = cc::LocalFrameId(); |
} |
delegated_frame_evictor_->DiscardedFrame(); |
@@ -827,9 +827,7 @@ DelegatedFrameHost::~DelegatedFrameHost() { |
DCHECK(!compositor_); |
ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
factory->GetContextFactory()->RemoveObserver(this); |
- |
- if (local_frame_id_.is_valid()) |
- surface_factory_->Destroy(local_frame_id_); |
+ surface_factory_->Reset(); |
factory->GetSurfaceManager()->UnregisterSurfaceFactoryClient(frame_sink_id_); |
factory->GetSurfaceManager()->InvalidateFrameSinkId(frame_sink_id_); |