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