Chromium Code Reviews| 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..c352d08a1fd140c62640d518b1789038db1503e6 |
| --- /dev/null |
| +++ b/tools/telemetry/telemetry/page/actions/drag.js |
| @@ -0,0 +1,81 @@ |
| +// 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) { |
| + if (opt_options) { |
|
petrcermak
2015/02/25 11:35:48
Is there any reason to make the argument optional
ssid
2015/02/27 11:35:15
you are right, it isn't used.
|
| + 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; |
| + } else { |
| + this.element_ = document.body; |
| + this.speed_ = 800; |
| + this.gesture_source_type_ = chrome.gpuBenchmarking.MOUSE_INPUT; |
| + } |
| + } |
| + |
| + 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) { |
| + var self = this; |
|
petrcermak
2015/02/25 11:35:48
No need for "self" because you don't use it in any
ssid
2015/02/27 11:35:15
Done.
|
| + |
| + this.beginMeasuringHook = function() {} |
| + this.endMeasuringHook = function() {} |
|
petrcermak
2015/02/25 11:35:48
You don't seem to be really using these hooks anyw
|
| + |
| + this.callback_ = opt_callback; |
| + } |
| + |
| + DragAction.prototype.start = function(opt_options) { |
| + this.options_ = new DragGestureOptions(opt_options); |
| + // Assign this.element_ here instead of constructor, because the constructor |
|
petrcermak
2015/02/25 11:35:48
Which constructor? The DragAction constructor cert
|
| + // ensures this method will be called after the document is loaded. |
| + this.element_ = this.options_.element_; |
| + 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; |
| +})(); |