Index: android_webview/browser/hardware_renderer.cc |
diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc |
index b51a383ecf3ed906ce83896ce9b25cecb1bfbb2b..f4962320364f7e100cf32147643c1a17686cef0f 100644 |
--- a/android_webview/browser/hardware_renderer.cc |
+++ b/android_webview/browser/hardware_renderer.cc |
@@ -118,18 +118,22 @@ void HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info) { |
std::unique_ptr<cc::CompositorFrame> child_compositor_frame = |
std::move(child_frame_->frame); |
+ float device_scale_factor = |
+ child_compositor_frame->metadata.device_scale_factor; |
gfx::Size frame_size = |
child_compositor_frame->render_pass_list.back()->output_rect.size(); |
- bool size_changed = frame_size != frame_size_; |
- frame_size_ = frame_size; |
- if (!child_id_.is_valid() || size_changed) { |
+ if (!child_id_.is_valid() || surface_size_ != frame_size || |
+ device_scale_factor_ != device_scale_factor) { |
if (child_id_.is_valid()) |
DestroySurface(); |
AllocateSurface(); |
+ surface_size_ = frame_size; |
+ device_scale_factor_ = device_scale_factor; |
} |
- support_->SubmitCompositorFrame(child_id_, |
- std::move(*child_compositor_frame)); |
+ bool result = support_->SubmitCompositorFrame( |
+ child_id_, std::move(*child_compositor_frame)); |
+ DCHECK(result); |
} |
gfx::Transform transform(gfx::Transform::kSkipInitialization); |
@@ -153,7 +157,7 @@ void HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info) { |
gfx::Rect clip(draw_info->clip_left, draw_info->clip_top, |
draw_info->clip_right - draw_info->clip_left, |
draw_info->clip_bottom - draw_info->clip_top); |
- surfaces_->DrawAndSwap(viewport, clip, transform, frame_size_, |
+ surfaces_->DrawAndSwap(viewport, clip, transform, surface_size_, |
cc::SurfaceId(frame_sink_id_, child_id_)); |
} |
@@ -167,7 +171,7 @@ void HardwareRenderer::DestroySurface() { |
DCHECK(child_id_.is_valid()); |
// Submit an empty frame to force any existing resources to be returned. |
- gfx::Rect rect(frame_size_); |
+ gfx::Rect rect(surface_size_); |
std::unique_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create(); |
render_pass->SetNew(1, rect, rect, gfx::Transform()); |
cc::CompositorFrame frame; |
@@ -175,7 +179,9 @@ void HardwareRenderer::DestroySurface() { |
// We submit without a prior BeginFrame, so acknowledge a manual BeginFrame. |
frame.metadata.begin_frame_ack = |
cc::BeginFrameAck::CreateManualAckWithDamage(); |
- support_->SubmitCompositorFrame(child_id_, std::move(frame)); |
+ frame.metadata.device_scale_factor = device_scale_factor_; |
+ bool result = support_->SubmitCompositorFrame(child_id_, std::move(frame)); |
+ DCHECK(result); |
surfaces_->RemoveChildId(cc::SurfaceId(frame_sink_id_, child_id_)); |
support_->EvictCurrentSurface(); |