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..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_; |
|
picksi
2015/03/02 14:11:05
nit: calculate...
var pixel_width = rect.width *
ssid
2015/03/02 20:09:41
As we discussed, added brackets and these are diff
picksi
2015/03/03 13:36:06
OK. This looks clear with brackets! Thanks.
|
| + 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 = |
|
picksi
2015/03/02 14:11:05
nit: Are start_top/end_top, start_left/end_left th
ssid
2015/03/02 20:09:41
It is named top and left because the html style pr
picksi
2015/03/03 13:36:06
If these top/left naming reflects their usage this
|
| + 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; |
| +})(); |