| 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..cee51ae9e9c2b410b51945cf5dd1d21e51a9dbec
|
| --- /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;
|
| +})();
|
|
|