Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Unified Diff: tools/telemetry/telemetry/page/actions/drag.js

Issue 955653003: Adding Maps page to page_sets for telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mousedrag2
Patch Set: Disabled for android. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/page/actions/drag.js
diff --git a/tools/telemetry/telemetry/page/actions/drag.js b/tools/telemetry/telemetry/page/actions/drag.js
new file mode 100644
index 0000000000000000000000000000000000000000..8787d18223e1e6f21c95cf524b9065663f1f7603
--- /dev/null
+++ b/tools/telemetry/telemetry/page/actions/drag.js
@@ -0,0 +1,70 @@
+// Copyright 2015 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.
+
+// This file provides the DragAction object, which performs drag on a page
+// using given start and end positions:
+// 1. var action = new __DragAction(callback)
+// 2. action.start(drag_options)
+'use strict';
+
+(function() {
+ function DragGestureOptions(opt_options) {
+ this.element_ = opt_options.element;
+ this.left_start_ratio_ = opt_options.left_start_ratio;
+ this.top_start_ratio_ = opt_options.top_start_ratio;
+ this.left_end_ratio_ = opt_options.left_end_ratio;
+ this.top_end_ratio_ = opt_options.top_end_ratio;
+ this.speed_ = opt_options.speed;
+ this.gesture_source_type_ = opt_options.gesture_source_type;
+ }
+
+ function supportedByBrowser() {
+ return !!(window.chrome &&
+ chrome.gpuBenchmarking &&
+ chrome.gpuBenchmarking.smoothDrag);
+ }
+
+ // This class performs drag action using given start and end positions,
+ // by a single drag gesture.
+ function DragAction(opt_callback) {
+ this.beginMeasuringHook = function() {}
+ this.endMeasuringHook = function() {}
+
+ this.callback_ = opt_callback;
+ }
+
+ DragAction.prototype.start = function(opt_options) {
+ this.options_ = new DragGestureOptions(opt_options);
+ requestAnimationFrame(this.startGesture_.bind(this));
+ };
+
+ DragAction.prototype.startGesture_ = function() {
+ this.beginMeasuringHook();
+
+ var rect = __GestureCommon_GetBoundingVisibleRect(this.options_.element_);
+ var start_left =
+ rect.left + rect.width * this.options_.left_start_ratio_;
+ var start_top =
+ rect.top + rect.height * this.options_.top_start_ratio_;
+ var end_left =
+ rect.left + rect.width * this.options_.left_end_ratio_;
+ var end_top =
+ rect.top + rect.height * this.options_.top_end_ratio_;
+ chrome.gpuBenchmarking.smoothDrag(
+ start_left, start_top, end_left, end_top,
+ this.onGestureComplete_.bind(this), this.options_.gesture_source_type_,
+ this.options_.speed_);
+ };
+
+ DragAction.prototype.onGestureComplete_ = function() {
+ this.endMeasuringHook();
+
+ // We're done.
+ if (this.callback_)
+ this.callback_();
+ };
+
+ window.__DragAction = DragAction;
+ window.__DragAction_SupportedByBrowser = supportedByBrowser;
+})();

Powered by Google App Engine
This is Rietveld 408576698