Index: content/browser/compositor/delegated_frame_host.cc |
diff --git a/content/browser/compositor/delegated_frame_host.cc b/content/browser/compositor/delegated_frame_host.cc |
index 0fb665771107286d2e7998bd7ea91318b81ba0e5..8f362de8572e5cdd534aa4b8e947df9c4760abd4 100644 |
--- a/content/browser/compositor/delegated_frame_host.cc |
+++ b/content/browser/compositor/delegated_frame_host.cc |
@@ -376,7 +376,7 @@ void DelegatedFrameHost::SwapDelegatedFrame( |
} |
last_output_surface_id_ = output_surface_id; |
} |
- bool immediate_ack = !compositor_; |
+ bool skip_frame_size_mismatch = false; |
pending_delegated_ack_count_++; |
if (frame_size.IsEmpty()) { |
@@ -418,10 +418,10 @@ void DelegatedFrameHost::SwapDelegatedFrame( |
gfx::Size desired_size = client_->DelegatedFrameHostDesiredSizeInDIP(); |
if (desired_size != frame_size_in_dip && !desired_size.IsEmpty()) |
- immediate_ack = true; |
+ skip_frame_size_mismatch = true; |
cc::SurfaceFactory::DrawCallback ack_callback; |
- if (compositor_ && !immediate_ack) { |
+ if (compositor_ && !skip_frame_size_mismatch) { |
ack_callback = base::Bind(&DelegatedFrameHost::SurfaceDrawn, |
AsWeakPtr(), output_surface_id); |
} |
@@ -457,7 +457,9 @@ void DelegatedFrameHost::SwapDelegatedFrame( |
client_->DelegatedFrameHostGetLayer()->OnDelegatedFrameDamage( |
damage_rect_in_dip); |
- if (immediate_ack) { |
+ // Note that |compositor_| may be reset by SetShowSurface or |
+ // SetShowDelegatedContent above. |
+ if (!compositor_ || skip_frame_size_mismatch) { |
SendDelegatedFrameAck(output_surface_id); |
} else if (!use_surfaces_) { |
std::vector<ui::LatencyInfo>::const_iterator it; |