Commit c8b591b3 authored by Jaebaek Seo's avatar Jaebaek Seo Committed by Commit Bot

Pass values in CSS pixel scale to ContentViewCore::UpdateFrameInfo

ContentViewCore::UpdateFrameInfo() must receive positions and sizes in CSS pixel
except top_shown_pix. When --use-zoom-for-dsf is enabled, those values given to
ContentViewCore::UpdateFrameInfo() are in physical pixel. It results in test
failures of ContentViewScrollingTest#testOverScroll and
ContentViewScrollingTest#testScrollTo. This CL scales down those values given to
ContentViewCore::UpdateFrameInfo() by the device scale factor.

TEST=run_content_shell_test_apk -f ContentViewScrollingTest#testOverScroll
(and ContentViewScrollingTest#testScrollTo) on NEXUS 5X

Bug: 737777
Change-Id: I95be3ed63d569ec9d620fa431c0d6bfa932410ba
Reviewed-on: https://chromium-review.googlesource.com/888183
Commit-Queue: Jaebaek Seo <jaebaek@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Reviewed-by: default avatarDavid Bokan <bokan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#533129}
parent 18f24463
...@@ -1461,12 +1461,23 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated( ...@@ -1461,12 +1461,23 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
gesture_provider_.SetDoubleTapSupportForPageEnabled(!is_mobile_optimized); gesture_provider_.SetDoubleTapSupportForPageEnabled(!is_mobile_optimized);
float dip_scale = view_.GetDipScale(); float dip_scale = view_.GetDipScale();
gfx::SizeF root_layer_size_dip = frame_metadata.root_layer_size;
gfx::SizeF scrollable_viewport_size_dip =
frame_metadata.scrollable_viewport_size;
gfx::Vector2dF root_scroll_offset_dip = frame_metadata.root_scroll_offset;
if (IsUseZoomForDSFEnabled()) {
float pix_to_dip = 1 / dip_scale;
root_layer_size_dip.Scale(pix_to_dip);
scrollable_viewport_size_dip.Scale(pix_to_dip);
root_scroll_offset_dip.Scale(pix_to_dip);
}
float to_pix = IsUseZoomForDSFEnabled() ? 1.f : dip_scale; float to_pix = IsUseZoomForDSFEnabled() ? 1.f : dip_scale;
float top_controls_pix = frame_metadata.top_controls_height * to_pix; float top_controls_pix = frame_metadata.top_controls_height * to_pix;
// |top_content_offset| is its CSS pixels * DSF if --use-zoom-for-dsf is // |top_content_offset| is in physical pixels if --use-zoom-for-dsf is
// enabled. Otherwise, it is in CSS pixels. // enabled. Otherwise, it is in DIPs.
// Note that the height of browser control is not affected by page scale // Note that the height of browser control is not affected by page scale
// factor. Thus, |top_content_offset| in CSS pixels is also in DIP pixels. // factor. Thus, |top_content_offset| in CSS pixels is also in DIPs.
float top_content_offset = frame_metadata.top_controls_height * float top_content_offset = frame_metadata.top_controls_height *
frame_metadata.top_controls_shown_ratio; frame_metadata.top_controls_shown_ratio;
float top_shown_pix = top_content_offset * to_pix; float top_shown_pix = top_content_offset * to_pix;
...@@ -1494,7 +1505,7 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated( ...@@ -1494,7 +1505,7 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
frame_metadata.page_scale_factor); frame_metadata.page_scale_factor);
// Set parameters for adaptive handle orientation. // Set parameters for adaptive handle orientation.
gfx::SizeF viewport_size(frame_metadata.scrollable_viewport_size); gfx::SizeF viewport_size(scrollable_viewport_size_dip);
viewport_size.Scale(frame_metadata.page_scale_factor); viewport_size.Scale(frame_metadata.page_scale_factor);
gfx::RectF viewport_rect(0.0f, frame_metadata.top_controls_height * gfx::RectF viewport_rect(0.0f, frame_metadata.top_controls_height *
frame_metadata.top_controls_shown_ratio, frame_metadata.top_controls_shown_ratio,
...@@ -1506,11 +1517,10 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated( ...@@ -1506,11 +1517,10 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
: frame_metadata.root_background_color); : frame_metadata.root_background_color);
// ViewAndroid::content_offset() must be in CSS scale // ViewAndroid::content_offset() must be in CSS scale
float top_content_offset_css = IsUseZoomForDSFEnabled() float top_content_offset_dip = IsUseZoomForDSFEnabled()
? top_content_offset / dip_scale ? top_content_offset / dip_scale
: top_content_offset; : top_content_offset;
view_.UpdateFrameInfo( view_.UpdateFrameInfo({scrollable_viewport_size_dip, top_content_offset});
{frame_metadata.scrollable_viewport_size, top_content_offset});
bool top_changed = !FloatEquals(top_shown_pix, prev_top_shown_pix_); bool top_changed = !FloatEquals(top_shown_pix, prev_top_shown_pix_);
if (top_changed) { if (top_changed) {
...@@ -1535,11 +1545,11 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated( ...@@ -1535,11 +1545,11 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
// All offsets and sizes except |top_shown_pix| are in CSS pixels. // All offsets and sizes except |top_shown_pix| are in CSS pixels.
content_view_core_->UpdateFrameInfo( content_view_core_->UpdateFrameInfo(
frame_metadata.root_scroll_offset, frame_metadata.page_scale_factor, root_scroll_offset_dip, frame_metadata.page_scale_factor,
frame_metadata.min_page_scale_factor, frame_metadata.min_page_scale_factor,
frame_metadata.max_page_scale_factor, frame_metadata.root_layer_size, frame_metadata.max_page_scale_factor, root_layer_size_dip,
frame_metadata.scrollable_viewport_size, top_content_offset_css, scrollable_viewport_size_dip, top_content_offset_dip, top_shown_pix,
top_shown_pix, top_changed, is_mobile_optimized); top_changed, is_mobile_optimized);
EvictFrameIfNecessary(); EvictFrameIfNecessary();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment