summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsataya.m@samsung.com <sataya.m@samsung.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-11 13:42:03 +0000
committersataya.m@samsung.com <sataya.m@samsung.com@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-11 13:42:03 +0000
commite9eb23f9e8c05b276029209ea4fbee177d41c4e7 (patch)
tree89ca6b7c757e27019d38190342465d97d197f698
parentcf6c2d6f7a8224f6e4e42ed484ab1e543e5d97be (diff)
downloadchromium_src-e9eb23f9e8c05b276029209ea4fbee177d41c4e7.zip
chromium_src-e9eb23f9e8c05b276029209ea4fbee177d41c4e7.tar.gz
chromium_src-e9eb23f9e8c05b276029209ea4fbee177d41c4e7.tar.bz2
Move nonscrollable axis gloweffect suppression to renderer.
on nonscrollable axis gloweffect should not be invoked, on diagonal scroll in some cases horizontal axis is disabled, and when scrolling diagonally this invokes horizontal glow , but as per android UX horizontal glow shouldnt be display as it is nonscrollable. This change optimizes such calls and avoids unnecessary IPC calls. The change is behind a CC setting since Android WebView needs to send overscroll notifications to apps even on nonscrollable axes. BUG=357021 Review URL: https://codereview.chromium.org/230223006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263226 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--cc/trees/layer_tree_host_impl.cc7
-rw-r--r--cc/trees/layer_tree_settings.cc1
-rw-r--r--cc/trees/layer_tree_settings.h1
-rw-r--r--content/browser/android/overscroll_glow.cc14
-rw-r--r--content/browser/android/overscroll_glow.h10
-rw-r--r--content/browser/renderer_host/render_widget_host_view_android.cc7
-rw-r--r--content/renderer/gpu/render_widget_compositor.cc2
7 files changed, 12 insertions, 30 deletions
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 5be44c4..abf777a 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -2315,6 +2315,13 @@ bool LayerTreeHostImpl::ScrollBy(const gfx::Point& viewport_point,
unused_root_delta.set_x(0.0f);
if (std::abs(unused_root_delta.y()) < kEpsilon)
unused_root_delta.set_y(0.0f);
+ // Disable overscroll on axes which is impossible to scroll.
+ if (settings_.report_overscroll_only_for_scrollable_axes) {
+ if (std::abs(active_tree_->TotalMaxScrollOffset().x()) <= kEpsilon)
+ unused_root_delta.set_x(0.0f);
+ if (std::abs(active_tree_->TotalMaxScrollOffset().y()) <= kEpsilon)
+ unused_root_delta.set_y(0.0f);
+ }
}
// If the layer wasn't able to move, try the next one in the hierarchy.
diff --git a/cc/trees/layer_tree_settings.cc b/cc/trees/layer_tree_settings.cc
index e3e1b50..7ae0cde 100644
--- a/cc/trees/layer_tree_settings.cc
+++ b/cc/trees/layer_tree_settings.cc
@@ -20,6 +20,7 @@ LayerTreeSettings::LayerTreeSettings()
main_frame_before_draw_enabled(true),
main_frame_before_activation_enabled(false),
using_synchronous_renderer_compositor(false),
+ report_overscroll_only_for_scrollable_axes(false),
per_tile_painting_enabled(false),
partial_swap_enabled(false),
accelerated_animation_enabled(true),
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
index dc97c84..e85ef7d 100644
--- a/cc/trees/layer_tree_settings.h
+++ b/cc/trees/layer_tree_settings.h
@@ -25,6 +25,7 @@ class CC_EXPORT LayerTreeSettings {
bool main_frame_before_draw_enabled;
bool main_frame_before_activation_enabled;
bool using_synchronous_renderer_compositor;
+ bool report_overscroll_only_for_scrollable_axes;
bool per_tile_painting_enabled;
bool partial_swap_enabled;
bool accelerated_animation_enabled;
diff --git a/content/browser/android/overscroll_glow.cc b/content/browser/android/overscroll_glow.cc
index f4a0168..1705863 100644
--- a/content/browser/android/overscroll_glow.cc
+++ b/content/browser/android/overscroll_glow.cc
@@ -97,10 +97,7 @@ scoped_ptr<OverscrollGlow> OverscrollGlow::Create(bool enabled) {
}
OverscrollGlow::OverscrollGlow(bool enabled)
- : enabled_(enabled),
- initialized_(false),
- horizontal_overscroll_enabled_(true),
- vertical_overscroll_enabled_(true) {}
+ : enabled_(enabled), initialized_(false) {}
OverscrollGlow::~OverscrollGlow() {
Detach();
@@ -135,15 +132,6 @@ bool OverscrollGlow::OnOverscrolled(cc::Layer* overscrolling_layer,
if (size_.IsEmpty())
return false;
- if (!horizontal_overscroll_enabled_) {
- overscroll.set_x(0);
- velocity.set_x(0);
- }
- if (!vertical_overscroll_enabled_) {
- overscroll.set_y(0);
- velocity.set_y(0);
- }
-
// Ignore sufficiently small values that won't meaningfuly affect animation.
overscroll = ZeroSmallComponents(overscroll);
velocity = ZeroSmallComponents(velocity);
diff --git a/content/browser/android/overscroll_glow.h b/content/browser/android/overscroll_glow.h
index 3a13fb3..3ef542f 100644
--- a/content/browser/android/overscroll_glow.h
+++ b/content/browser/android/overscroll_glow.h
@@ -55,14 +55,6 @@ class OverscrollGlow {
// Note: The effect will detach itself when no further animation is required.
bool Animate(base::TimeTicks current_time);
- // Horizontal overscroll will be ignored when false.
- void set_horizontal_overscroll_enabled(bool enabled) {
- horizontal_overscroll_enabled_ = enabled;
- }
- // Vertical overscroll will be ignored when false.
- void set_vertical_overscroll_enabled(bool enabled) {
- vertical_overscroll_enabled_ = enabled;
- }
// The size of the layer for which edges will be animated.
void set_size(gfx::SizeF size) {
size_ = size;
@@ -96,8 +88,6 @@ class OverscrollGlow {
gfx::SizeF size_;
gfx::Vector2dF old_overscroll_;
gfx::Vector2dF old_velocity_;
- bool horizontal_overscroll_enabled_;
- bool vertical_overscroll_enabled_;
scoped_refptr<cc::Layer> root_layer_;
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 90ea747..c6cc00f 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -962,13 +962,6 @@ bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
void RenderWidgetHostViewAndroid::UpdateAnimationSize(
const cc::CompositorFrameMetadata& frame_metadata) {
- // Disable edge effects for axes on which scrolling is impossible.
- gfx::SizeF ceiled_viewport_size =
- gfx::ToCeiledSize(frame_metadata.viewport_size);
- overscroll_effect_->set_horizontal_overscroll_enabled(
- ceiled_viewport_size.width() < frame_metadata.root_layer_size.width());
- overscroll_effect_->set_vertical_overscroll_enabled(
- ceiled_viewport_size.height() < frame_metadata.root_layer_size.height());
overscroll_effect_->set_size(content_size_in_layer_);
}
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index bfff5be..ebac736 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -99,6 +99,8 @@ scoped_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create(
!cmd->HasSwitch(cc::switches::kDisableMainFrameBeforeDraw);
settings.using_synchronous_renderer_compositor =
widget->UsingSynchronousRendererCompositor();
+ settings.report_overscroll_only_for_scrollable_axes =
+ !widget->UsingSynchronousRendererCompositor();
settings.accelerated_animation_enabled =
!cmd->HasSwitch(cc::switches::kDisableThreadedAnimation);
settings.touch_hit_testing =