diff options
author | tonyg@chromium.org <tonyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-18 18:12:17 +0000 |
---|---|---|
committer | tonyg@chromium.org <tonyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-18 18:12:17 +0000 |
commit | 8ee625fef92ef0fbc56658041dc45459aca9c312 (patch) | |
tree | 18dcb198a9f696b074a1d91ce87643c838d1a994 | |
parent | b442543a9dedc630af951b9d3059898870080c01 (diff) | |
download | chromium_src-8ee625fef92ef0fbc56658041dc45459aca9c312.zip chromium_src-8ee625fef92ef0fbc56658041dc45459aca9c312.tar.gz chromium_src-8ee625fef92ef0fbc56658041dc45459aca9c312.tar.bz2 |
Revert 173457 It breaks the scrolling benchmark because smoothScrollBy's
callback is never invoked.
> Telemtry: hooks "chrome.gpuBenchmarking.smoothScrollBy" with java on android.
>
> In order to provide more realistic benchmarks, instead of shortcutting in native via mousewheels,
> let Telemetry cross all the boundaries and synthesize MotionEvents all the way up in java.
>
> BUG=
> TEST=./tools/perf/run_multipage_benchmarks --browser=system smoothness_benchmark tools/perf/page_sets/key_mobile_sites.json
>
>
> Review URL: https://chromiumcodereview.appspot.com/11415227
TBR=bulach@chromium.org
BUG=166521
Review URL: https://codereview.chromium.org/11613022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173752 0039d316-1c4b-4281-b951-d872f2087c98
15 files changed, 15 insertions, 309 deletions
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc index 6902f82..ac7cf6e 100644 --- a/content/browser/android/content_view_core_impl.cc +++ b/content/browser/android/content_view_core_impl.cc @@ -606,17 +606,6 @@ void ContentViewCoreImpl::ShowDisambiguationPopup( java_bitmap.obj()); } -ScopedJavaLocalRef<jobject> ContentViewCoreImpl::CreateSmoothScroller( - bool scroll_down, int mouse_event_x, int mouse_event_y) { - JNIEnv* env = AttachCurrentThread(); - - ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); - if (obj.is_null()) - return ScopedJavaLocalRef<jobject>(); - return Java_ContentViewCore_createSmoothScroller( - env, obj.obj(), scroll_down, mouse_event_x, mouse_event_y); -} - gfx::Rect ContentViewCoreImpl::GetBounds() const { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); diff --git a/content/browser/android/content_view_core_impl.h b/content/browser/android/content_view_core_impl.h index 287a8e1..cdfeaea 100644 --- a/content/browser/android/content_view_core_impl.h +++ b/content/browser/android/content_view_core_impl.h @@ -7,7 +7,6 @@ #include <vector> -#include "base/android/jni_android.h" #include "base/android/jni_helper.h" #include "base/basictypes.h" #include "base/compiler_specific.h" @@ -236,11 +235,6 @@ class ContentViewCoreImpl : public ContentViewCore, void ShowDisambiguationPopup( const gfx::Rect& target_rect, const SkBitmap& zoomed_bitmap); - // Creates a java-side smooth scroller. Used by - // chrome.gpuBenchmarking.smoothScrollBy. - base::android::ScopedJavaLocalRef<jobject> CreateSmoothScroller( - bool scroll_down, int mouse_event_x, int mouse_event_y); - // -------------------------------------------------------------------------- // Methods called from native code // -------------------------------------------------------------------------- diff --git a/content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.cc b/content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.cc index 6740c44..af93b7c 100644 --- a/content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.cc +++ b/content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.cc @@ -26,13 +26,21 @@ bool BasicMouseWheelSmoothScrollGesture::ForwardInputEvents( if (pixels_scrolled_ >= pixels_to_scroll_) return false; - double position_delta = Tick( - now, RenderWidgetHostImpl::From(host)->SyntheticScrollMessageInterval()); + double positionDelta = 10; + if (!last_tick_time_.is_null()) { + RenderWidgetHostImpl* hostImpl = RenderWidgetHostImpl::From(host); + double desiredIntervalMs = hostImpl->SyntheticScrollMessageInterval(); + double velocity = 10 / desiredIntervalMs; + double timeDelta = (now - last_tick_time_).InMillisecondsF(); + positionDelta = velocity * timeDelta; + } + + last_tick_time_ = now; WebKit::WebMouseWheelEvent event; event.type = WebKit::WebInputEvent::MouseWheel; event.hasPreciseScrollingDeltas = 1; - event.deltaY = scroll_down_ ? -position_delta : position_delta; + event.deltaY = scroll_down_ ? -positionDelta : positionDelta; // TODO(vollick): find a proper way to access // WebCore::WheelEvent::tickMultiplier. event.wheelTicksY = event.deltaY / 120; diff --git a/content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.h b/content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.h index b8eb62c..8e3cb60 100644 --- a/content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.h +++ b/content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.h @@ -27,6 +27,7 @@ class BasicMouseWheelSmoothScrollGesture : public SmoothScrollGesture { int pixels_to_scroll_; int mouse_event_x_; int mouse_event_y_; + base::TimeTicks last_tick_time_; }; } // namespace content 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 44d00fe..88c1aaa 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc @@ -17,7 +17,6 @@ #include "content/browser/renderer_host/compositor_impl_android.h" #include "content/browser/renderer_host/image_transport_factory_android.h" #include "content/browser/renderer_host/render_widget_host_impl.h" -#include "content/browser/renderer_host/smooth_scroll_gesture_android.h" #include "content/browser/renderer_host/surface_texture_transport_client_android.h" #include "content/common/android/device_info.h" #include "content/common/gpu/client/gl_helper.h" @@ -386,16 +385,6 @@ void RenderWidgetHostViewAndroid::ShowDisambiguationPopup( content_view_core_->ShowDisambiguationPopup(target_rect, zoomed_bitmap); } -SmoothScrollGesture* RenderWidgetHostViewAndroid::CreateSmoothScrollGesture( - bool scroll_down, int pixels_to_scroll, int mouse_event_x, - int mouse_event_y) { - return new SmoothScrollGestureAndroid( - pixels_to_scroll, - GetRenderWidgetHost(), - content_view_core_->CreateSmoothScroller( - scroll_down, mouse_event_x, mouse_event_y)); -} - void RenderWidgetHostViewAndroid::OnAcceleratedCompositingStateChange() { } diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h index b483797..66b468f 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.h +++ b/content/browser/renderer_host/render_widget_host_view_android.h @@ -139,9 +139,6 @@ class RenderWidgetHostViewAndroid : public RenderWidgetHostViewBase { const gfx::Size& content_size) OVERRIDE; virtual void ShowDisambiguationPopup(const gfx::Rect& target_rect, const SkBitmap& zoomed_bitmap) OVERRIDE; - virtual SmoothScrollGesture* CreateSmoothScrollGesture( - bool scroll_down, int pixels_to_scroll, int mouse_event_x, - int mouse_event_y) OVERRIDE; // Non-virtual methods void SetContentViewCore(ContentViewCoreImpl* content_view_core); diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc index 1715096..1e51520 100644 --- a/content/browser/renderer_host/render_widget_host_view_base.cc +++ b/content/browser/renderer_host/render_widget_host_view_base.cc @@ -424,7 +424,7 @@ void RenderWidgetHostViewBase::UpdateScreenInfo(gfx::NativeView view) { current_device_scale_factor_ = display.device_scale_factor(); if (impl) impl->NotifyScreenInfoChanged(); -} + } SmoothScrollGesture* RenderWidgetHostViewBase::CreateSmoothScrollGesture( bool scroll_down, int pixels_to_scroll, int mouse_event_x, diff --git a/content/browser/renderer_host/smooth_scroll_gesture_android.cc b/content/browser/renderer_host/smooth_scroll_gesture_android.cc deleted file mode 100644 index 240c340..0000000 --- a/content/browser/renderer_host/smooth_scroll_gesture_android.cc +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/browser/renderer_host/smooth_scroll_gesture_android.h" - -#include "base/debug/trace_event.h" -#include "content/browser/renderer_host/render_widget_host_impl.h" -#include "jni/SmoothScroller_jni.h" - -namespace { -bool g_jni_initialized = false; - -void RegisterNativesIfNeeded(JNIEnv* env) { - if (!g_jni_initialized) { - content::RegisterNativesImpl(env); - g_jni_initialized = true; - } -} -} // namespace - -namespace content { - -SmoothScrollGestureAndroid::SmoothScrollGestureAndroid( - int pixels_to_scroll, - RenderWidgetHost* rwh, - base::android::ScopedJavaLocalRef<jobject> java_scroller) - : pixels_scrolled_(0), - has_started_(false), - pixels_to_scroll_(pixels_to_scroll), - rwh_(rwh), - java_scroller_(java_scroller) { - JNIEnv* env = base::android::AttachCurrentThread(); - RegisterNativesIfNeeded(env); -} - -SmoothScrollGestureAndroid::~SmoothScrollGestureAndroid() { -} - -bool SmoothScrollGestureAndroid::ForwardInputEvents( - base::TimeTicks now, RenderWidgetHost* host) { - if (!has_started_) { - has_started_ = true; - JNIEnv* env = base::android::AttachCurrentThread(); - Java_SmoothScroller_start( - env, java_scroller_.obj(), reinterpret_cast<int>(this)); - } - - TRACE_COUNTER_ID1( - "gpu", "smooth_scroll_by_pixels_scrolled", this, pixels_scrolled_); - - return pixels_scrolled_ < pixels_to_scroll_; -} - -double SmoothScrollGestureAndroid::Tick(JNIEnv* env, jobject obj) { - double delta = SmoothScrollGesture::Tick( - base::TimeTicks::HighResNow(), - RenderWidgetHostImpl::From(rwh_)->SyntheticScrollMessageInterval()); - pixels_scrolled_ += delta; - return delta; -} - -bool SmoothScrollGestureAndroid::HasFinished(JNIEnv* env, jobject obj) { - return pixels_scrolled_ >= pixels_to_scroll_; -} - -} // namespace content - diff --git a/content/browser/renderer_host/smooth_scroll_gesture_android.h b/content/browser/renderer_host/smooth_scroll_gesture_android.h deleted file mode 100644 index 69b606d..0000000 --- a/content/browser/renderer_host/smooth_scroll_gesture_android.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CONTENT_BROWSER_RENDERER_HOST_SMOOTH_GESTURE_ANDROID_H_ -#define CONTENT_BROWSER_RENDERER_HOST_SMOOTH_GESTURE_ANDROID_H_ - -#include "base/android/jni_android.h" -#include "base/time.h" -#include "content/port/browser/smooth_scroll_gesture.h" - -namespace content { - -class ContentViewCore; -class RenderWidgetHost; - -class SmoothScrollGestureAndroid : public SmoothScrollGesture { - public: - SmoothScrollGestureAndroid( - int pixels_to_scroll, - RenderWidgetHost* rwh, - base::android::ScopedJavaLocalRef<jobject> java_scroller); - - // Called by the java side once the TimeAnimator ticks. - double Tick(JNIEnv* env, jobject obj); - bool HasFinished(JNIEnv* env, jobject obj); - - // SmoothScrollGesture - virtual bool ForwardInputEvents(base::TimeTicks now, - RenderWidgetHost* host) OVERRIDE; - - private: - virtual ~SmoothScrollGestureAndroid(); - - int pixels_scrolled_; - bool has_started_; - - int pixels_to_scroll_; - RenderWidgetHost* rwh_; - base::android::ScopedJavaGlobalRef<jobject> java_scroller_; - - DISALLOW_COPY_AND_ASSIGN(SmoothScrollGestureAndroid); -}; - -} // namespace content - -#endif // CONTENT_BROWSER_RENDERER_HOST_SMOOTH_GESTURE_ANDROID_H_ diff --git a/content/content_browser.gypi b/content/content_browser.gypi index 3fdb8fd..368ba681 100644 --- a/content/content_browser.gypi +++ b/content/content_browser.gypi @@ -33,7 +33,6 @@ 'sources': [ 'port/browser/render_view_host_delegate_view.h', 'port/browser/render_widget_host_view_port.h', - 'port/browser/smooth_scroll_gesture.cc', 'port/browser/smooth_scroll_gesture.h', 'public/browser/access_token_store.h', 'public/browser/android/compositor.h', @@ -746,8 +745,6 @@ 'browser/renderer_host/render_widget_host_view_mac.mm', 'browser/renderer_host/render_widget_host_view_win.cc', 'browser/renderer_host/render_widget_host_view_win.h', - 'browser/renderer_host/smooth_scroll_gesture_android.cc', - 'browser/renderer_host/smooth_scroll_gesture_android.h', 'browser/renderer_host/socket_stream_dispatcher_host.cc', 'browser/renderer_host/socket_stream_dispatcher_host.h', 'browser/renderer_host/socket_stream_host.cc', diff --git a/content/content_jni.gypi b/content/content_jni.gypi index 7066080..91425d6 100644 --- a/content/content_jni.gypi +++ b/content/content_jni.gypi @@ -25,7 +25,6 @@ 'public/android/java/src/org/chromium/content/browser/LoadUrlParams.java', 'public/android/java/src/org/chromium/content/browser/LocationProvider.java', 'public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java', - 'public/android/java/src/org/chromium/content/browser/SmoothScroller.java', 'public/android/java/src/org/chromium/content/browser/TouchPoint.java', 'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java', 'public/android/java/src/org/chromium/content/common/CommandLine.java', diff --git a/content/port/browser/smooth_scroll_gesture.cc b/content/port/browser/smooth_scroll_gesture.cc deleted file mode 100644 index b783fc0..0000000 --- a/content/port/browser/smooth_scroll_gesture.cc +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/port/browser/smooth_scroll_gesture.h" - -namespace content { - -double SmoothScrollGesture::Tick( - base::TimeTicks now, double desired_interval_ms) { - double position_delta = 10; - if (!last_tick_time_.is_null()) { - double velocity = 10 / desired_interval_ms; - double time_delta = (now - last_tick_time_).InMillisecondsF(); - position_delta = velocity * time_delta; - } - - last_tick_time_ = now; - return position_delta; -} - -} // namespace content diff --git a/content/port/browser/smooth_scroll_gesture.h b/content/port/browser/smooth_scroll_gesture.h index 3b7bec7..4e2c1d9 100644 --- a/content/port/browser/smooth_scroll_gesture.h +++ b/content/port/browser/smooth_scroll_gesture.h @@ -14,9 +14,10 @@ class RenderWidgetHost; // This is a base class representing a single scroll gesture. These gestures are // paired with the rendering benchmarking system to (automatically) measure how -// smoothly chrome is responding to user input. +// smoothnly chrome is responding to user input. class SmoothScrollGesture : public base::RefCounted<SmoothScrollGesture> { public: + // When called, the gesture should compute its state at the provided timestamp // and send the right input events to the provided RenderWidgetHost to // simulate the gesture having run up to that point in time. @@ -28,11 +29,6 @@ class SmoothScrollGesture : public base::RefCounted<SmoothScrollGesture> { protected: friend class base::RefCounted<SmoothScrollGesture>; virtual ~SmoothScrollGesture() {} - - double Tick(base::TimeTicks now, double desired_interval_ms); - - private: - base::TimeTicks last_tick_time_; }; } // namespace content diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java index b54ec77..ff251ff 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java @@ -1932,13 +1932,6 @@ public class ContentViewCore implements MotionEventDelegate { @SuppressWarnings("unused") @CalledByNative - private SmoothScroller createSmoothScroller(boolean scrollDown, int mouseEventX, - int mouseEventY) { - return new SmoothScroller(this, scrollDown, mouseEventX, mouseEventY); - } - - @SuppressWarnings("unused") - @CalledByNative private void onSelectionChanged(String text) { mLastSelectedText = text; } diff --git a/content/public/android/java/src/org/chromium/content/browser/SmoothScroller.java b/content/public/android/java/src/org/chromium/content/browser/SmoothScroller.java deleted file mode 100644 index d2999f4..0000000 --- a/content/public/android/java/src/org/chromium/content/browser/SmoothScroller.java +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.content.browser; - -import android.animation.TimeAnimator; -import android.animation.TimeAnimator.TimeListener; -import android.os.Build; -import android.os.Handler; -import android.os.Looper; -import android.os.SystemClock; -import android.util.Log; -import android.view.MotionEvent; - -import org.chromium.base.CalledByNative; -import org.chromium.base.JNINamespace; - -/** - * Provides a Java-side implementation for chrome.gpuBenchmarking.smoothScrollBy. - */ -@JNINamespace("content") -public class SmoothScroller { - final ContentViewCore mContentViewCore; - final boolean mScrollDown; - final float mMouseEventX; - final float mMouseEventY; - - final Handler mHandler = new Handler(Looper.getMainLooper()); - - TimeAnimator mTimeAnimator; - - int mNativePtr; - long mDownTime; - float mCurrentY; - - boolean mHasSentUp = false; - - SmoothScroller(ContentViewCore contentViewCore, boolean scrollDown, - int mouseEventX, int mouseEventY) { - mContentViewCore = contentViewCore; - mScrollDown = scrollDown; - float scale = mContentViewCore.getScale(); - mMouseEventX = mouseEventX * scale; - mMouseEventY = mouseEventY * scale; - mCurrentY = mMouseEventY; - } - - @CalledByNative - void start(int nativePtr) { - assert mNativePtr == 0; - mNativePtr = nativePtr; - - mDownTime = SystemClock.uptimeMillis(); - MotionEvent event = MotionEvent.obtain(mDownTime, mDownTime, - MotionEvent.ACTION_DOWN, mMouseEventX, mCurrentY, 0); - mContentViewCore.onTouchEvent(event); - event.recycle(); - - Runnable runnable = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) ? - createJBRunnable() : createPreJBRunnable(); - mHandler.post(runnable); - } - - boolean sendEvent(long time) { - float delta = nativeTick(mNativePtr) * mContentViewCore.getScale(); - if (delta != 0) { - mCurrentY += mScrollDown ? -delta : delta; - - MotionEvent event = MotionEvent.obtain(mDownTime, time, - MotionEvent.ACTION_MOVE, mMouseEventX, mCurrentY, 0); - mContentViewCore.onTouchEvent(event); - event.recycle(); - } - boolean hasFinished = nativeHasFinished(mNativePtr); - if (hasFinished && !mHasSentUp) { - mHasSentUp = true; - MotionEvent event = MotionEvent.obtain(mDownTime, time, - MotionEvent.ACTION_UP, mMouseEventX, mCurrentY, 0); - mContentViewCore.onTouchEvent(event); - event.recycle(); - } - return !hasFinished; - } - - private Runnable createJBRunnable() { - // On JB, we rely on TimeAnimator to send events tied with vsync. - return new Runnable() { - @Override - public void run() { - mTimeAnimator = new TimeAnimator(); - mTimeAnimator.setTimeListener(new TimeListener() { - @Override - public void onTimeUpdate(TimeAnimator animation, long totalTime, - long deltaTime) { - if (!sendEvent(mDownTime + totalTime)) { - mTimeAnimator.end(); - } - } - }); - mTimeAnimator.start(); - } - }; - } - - private Runnable createPreJBRunnable() { - // Pre-JB there's no TimeAnimator, so we keep posting messages. - return new Runnable() { - @Override - public void run() { - if (!sendEvent(SystemClock.uptimeMillis())) { - mHandler.post(this); - } - } - }; - } - - private native int nativeTick(int nativeSmoothScrollGestureAndroid); - private native boolean nativeHasFinished(int nativeSmoothScrollGestureAndroid); -} |