Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(712)

Unified Diff: content/browser/renderer_host/delegated_frame_host.cc

Issue 2731793002: DelegatedFrameHost should not allocate a new local surface id on frame eviction (Closed)
Patch Set: c Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();
}

Powered by Google App Engine
This is Rietveld 408576698