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 bec9b52fa28d9db9e282ff87965d270092a9c34b..085fd44c7b5ec52c6b00654e12193380e92a48cc 100644 |
--- a/content/browser/renderer_host/delegated_frame_host.cc |
+++ b/content/browser/renderer_host/delegated_frame_host.cc |
@@ -68,7 +68,7 @@ DelegatedFrameHost::DelegatedFrameHost(const cc::FrameSinkId& frame_sink_id, |
void DelegatedFrameHost::WasShown(const ui::LatencyInfo& latency_info) { |
delegated_frame_evictor_->SetVisible(true); |
- if (!local_surface_id_.is_valid() && !released_front_lock_.get()) { |
+ if (!has_frame_ && !released_front_lock_.get()) { |
if (compositor_) |
released_front_lock_ = compositor_->GetCompositorLock(); |
} |
@@ -225,7 +225,7 @@ bool DelegatedFrameHost::TransformPointToCoordSpaceForView( |
const gfx::Point& point, |
RenderWidgetHostViewBase* target_view, |
gfx::Point* transformed_point) { |
- if (!local_surface_id_.is_valid()) |
+ if (!has_frame_) |
return false; |
return target_view->TransformPointToLocalCoordSpace( |
@@ -261,7 +261,7 @@ SkColor DelegatedFrameHost::GetGutterColor() const { |
} |
void DelegatedFrameHost::UpdateGutters() { |
- if (!local_surface_id_.is_valid()) { |
+ if (!has_frame_) { |
right_gutter_.reset(); |
bottom_gutter_.reset(); |
return; |
@@ -366,8 +366,7 @@ void DelegatedFrameHost::AttemptFrameSubscriberCapture( |
// To avoid unnecessary browser composites, try to go directly to the Surface |
// rather than through the Layer (which goes through the browser compositor). |
- if (local_surface_id_.is_valid() && |
- request_copy_of_output_callback_for_testing_.is_null()) { |
+ if (has_frame_ && request_copy_of_output_callback_for_testing_.is_null()) { |
support_->RequestCopyOfSurface(std::move(request)); |
} else { |
RequestCopyOfOutput(std::move(request)); |
@@ -426,7 +425,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id, |
// resources from the old one with resources from the new one which would |
// have the same id. Changing the layer to showing painted content destroys |
// the DelegatedRendererLayer. |
- EvictDelegatedFrame(); |
+ local_surface_id_ = cc::LocalSurfaceId(); |
ResetCompositorFrameSinkSupport(); |
CreateCompositorFrameSinkSupport(); |
last_compositor_frame_sink_id_ = compositor_frame_sink_id; |
@@ -455,7 +454,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id, |
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)); |
- if (allocated_new_local_surface_id) { |
+ if (allocated_new_local_surface_id || !has_frame_) { |
// manager must outlive compositors using it. |
cc::SurfaceId surface_id(frame_sink_id_, local_surface_id_); |
cc::SurfaceInfo surface_info(surface_id, frame_device_scale_factor, |
@@ -465,6 +464,8 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id, |
current_surface_size_ = frame_size; |
current_scale_factor_ = frame_device_scale_factor; |
} |
+ |
+ has_frame_ = true; |
} |
released_front_lock_ = NULL; |
current_frame_size_in_dip_ = frame_size_in_dip; |
@@ -480,7 +481,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id, |
if (compositor_) |
can_lock_compositor_ = NO_PENDING_COMMIT; |
- if (local_surface_id_.is_valid()) { |
+ if (has_frame_) { |
delegated_frame_evictor_->SwappedFrame( |
client_->DelegatedFrameHostIsVisible()); |
} |
@@ -488,8 +489,7 @@ void DelegatedFrameHost::SwapDelegatedFrame(uint32_t compositor_frame_sink_id, |
} |
void DelegatedFrameHost::ClearDelegatedFrame() { |
- if (local_surface_id_.is_valid()) |
- EvictDelegatedFrame(); |
+ EvictDelegatedFrame(); |
} |
void DelegatedFrameHost::DidReceiveCompositorFrameAck() { |
@@ -520,11 +520,11 @@ void DelegatedFrameHost::OnBeginFrame(const cc::BeginFrameArgs& args) { |
} |
void DelegatedFrameHost::EvictDelegatedFrame() { |
+ if (!has_frame_) |
+ return; |
client_->DelegatedFrameHostGetLayer()->SetShowSolidColorContent(); |
- if (local_surface_id_.is_valid()) { |
- support_->EvictFrame(); |
- local_surface_id_ = cc::LocalSurfaceId(); |
- } |
+ support_->EvictFrame(); |
+ has_frame_ = false; |
delegated_frame_evictor_->DiscardedFrame(); |
UpdateGutters(); |
} |
@@ -747,8 +747,7 @@ void DelegatedFrameHost::OnUpdateVSyncParameters(base::TimeTicks timebase, |
// DelegatedFrameHost, ImageTransportFactoryObserver implementation: |
void DelegatedFrameHost::OnLostResources() { |
- if (local_surface_id_.is_valid()) |
- EvictDelegatedFrame(); |
+ EvictDelegatedFrame(); |
idle_frame_subscriber_textures_.clear(); |
yuv_readback_pipeline_.reset(); |
} |