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

Unified Diff: tools/telemetry/telemetry/scroll.js

Issue 11412266: [telemetry] Fix smoothScrollBy scroll distance calculation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/scroll.js
diff --git a/tools/telemetry/telemetry/scroll.js b/tools/telemetry/telemetry/scroll.js
index 9f47ff36ad99de3a755072661779578567d21c5b..7f11daa54eb8218706223aeee381ff7624e25545 100644
--- a/tools/telemetry/telemetry/scroll.js
+++ b/tools/telemetry/telemetry/scroll.js
@@ -41,8 +41,7 @@
* Uses smooth scrolling capabilities provided by the platform, if available.
* @constructor
*/
- function SmoothScrollDownGesture(length, opt_element) {
- this.length_ = length;
+ function SmoothScrollDownGesture(opt_element) {
this.element_ = opt_element || document.body;
};
@@ -71,13 +70,13 @@
return rect;
};
- SmoothScrollDownGesture.prototype.start = function(callback) {
+ SmoothScrollDownGesture.prototype.start = function(distance, callback) {
this.callback_ = callback;
if (chrome &&
chrome.gpuBenchmarking &&
chrome.gpuBenchmarking.smoothScrollBy) {
var rect = getBoundingVisibleRect(this.element_);
- chrome.gpuBenchmarking.smoothScrollBy(this.length_, function() {
+ chrome.gpuBenchmarking.smoothScrollBy(distance, function() {
callback();
}, rect.left + rect.width / 2, rect.top + rect.height / 2);
return;
@@ -183,12 +182,24 @@
this.callback_ = opt_callback;
}
+ ScrollTest.prototype.getRemainingScrollDistance_ = function() {
+ var clientHeight;
+ // clientHeight is "special" for the body element.
+ if (this.element_ == document.body)
+ clientHeight = window.innerHeight;
+ else
+ clientHeight = this.element_.clientHeight;
+
+ return this.scrollHeight_ - this.element_.scrollTop - clientHeight;
+ }
+
ScrollTest.prototype.start = function(opt_element) {
// Assign this.element_ here instead of constructor, because the constructor
// ensures this method will be called after the document is loaded.
this.element_ = opt_element || document.body;
// Some pages load more content when you scroll to the bottom. Record
// the original element height here and only scroll to that point.
+ // -1 to allow for rounding errors on scaled viewports (like mobile).
this.scrollHeight_ = Math.min(MAX_SCROLL_LENGTH_PIXELS,
this.element_.scrollHeight - 1);
requestAnimationFrame(this.startPass_.bind(this));
@@ -203,29 +214,20 @@
this.renderingStats_ = new RafRenderingStats();
this.renderingStats_.start();
- this.gesture_ = new SmoothScrollDownGesture(this.scrollHeight_,
- this.element_);
- this.gesture_.start(this.onGestureComplete_.bind(this));
+ this.gesture_ = new SmoothScrollDownGesture(this.element_);
+ this.gesture_.start(this.getRemainingScrollDistance_(),
+ this.onGestureComplete_.bind(this));
};
ScrollTest.prototype.onGestureComplete_ = function(timestamp) {
- // clientHeight is "special" for the body element.
- var clientHeight;
- if (this.element_ == document.body)
- clientHeight = window.innerHeight;
- else
- clientHeight = this.element_.clientHeight;
-
// If the scrollHeight went down, only scroll to the new scrollHeight.
+ // -1 to allow for rounding errors on scaled viewports (like mobile).
this.scrollHeight_ = Math.min(this.scrollHeight_,
this.element_.scrollHeight - 1);
- // -1 to allow for rounding errors on scaled viewports (like mobile).
- var isPassComplete =
- this.element_.scrollTop + clientHeight >= this.scrollHeight_;
-
- if (!isPassComplete) {
- this.gesture_.start(this.onGestureComplete_.bind(this));
+ if (this.getRemainingScrollDistance_() > 0) {
+ this.gesture_.start(this.getRemainingScrollDistance_(),
+ this.onGestureComplete_.bind(this));
return;
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698