summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc')
-rw-r--r--content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc75
1 files changed, 75 insertions, 0 deletions
diff --git a/content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc b/content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc
new file mode 100644
index 0000000..c504f6c
--- /dev/null
+++ b/content/browser/renderer_host/touch_smooth_scroll_gesture_android.cc
@@ -0,0 +1,75 @@
+// Copyright (c) 2013 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/touch_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 {
+
+TouchSmoothScrollGestureAndroid::TouchSmoothScrollGestureAndroid(
+ int pixels_to_scroll,
+ RenderWidgetHost* rwh,
+ base::android::ScopedJavaLocalRef<jobject> java_scroller)
+ : pixels_scrolled_(0),
+ has_started_(false),
+ has_sent_motion_up_(false),
+ pixels_to_scroll_(pixels_to_scroll),
+ rwh_(rwh),
+ java_scroller_(java_scroller) {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ RegisterNativesIfNeeded(env);
+}
+
+TouchSmoothScrollGestureAndroid::~TouchSmoothScrollGestureAndroid() {
+}
+
+bool TouchSmoothScrollGestureAndroid::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 !has_sent_motion_up_;
+}
+
+double TouchSmoothScrollGestureAndroid::GetScrollDelta(
+ JNIEnv* env, jobject obj, double scale) {
+ double delta = smooth_scroll_calculator_.GetScrollDelta(
+ base::TimeTicks::Now(),
+ RenderWidgetHostImpl::From(rwh_)->GetSyntheticScrollMessageInterval())
+ * scale;
+ pixels_scrolled_ += delta;
+ return delta;
+}
+
+bool TouchSmoothScrollGestureAndroid::HasFinished(JNIEnv* env, jobject obj) {
+ return pixels_scrolled_ >= pixels_to_scroll_;
+}
+
+void TouchSmoothScrollGestureAndroid::SetHasSentMotionUp(
+ JNIEnv* env, jobject obj) {
+ has_sent_motion_up_ = true;
+}
+
+} // namespace content