Bug 1189901: part 1: remove code redundancy between tscrollx and tp5o_scroll. r=jmaher

This commit is contained in:
Avi Halachmi 2016-09-29 21:00:21 +03:00
parent 9f0454f829
commit a799576bb1
9 changed files with 16 additions and 142 deletions

View File

@ -1,9 +1,6 @@
// Note: The content from here upto '// End scroll test' is duplicated at:
// - talos/tests/scroll/scroll-test.js
// - inside talos/pageloader/chrome/tscroll.js
//
// - Please keep these copies in sync.
// - Pleace make sure that any changes apply cleanly to all use cases.
// Note: This file is used at both tscrollx and tp5o_scroll. With the former as
// unprivileged code.
// - Please make sure that any changes apply cleanly to all use cases.
function testScroll(target, stepSize, opt_reportFunc, opt_numSteps)
{
@ -121,12 +118,13 @@ function testScroll(target, stepSize, opt_reportFunc, opt_numSteps)
rAF(startTest);
}, 260);
}
// End scroll test - End duplicated code
// This code below here is unique to tscroll.js inside of pageloader
function handleMessageFromChrome(message) {
var payload = message.data.details;
testScroll(payload.target, payload.stepSize, 'PageLoader:RecordTime', payload.opt_numSteps);
}
try {
function handleMessageFromChrome(message) {
var payload = message.data.details;
testScroll(payload.target, payload.stepSize, 'PageLoader:RecordTime', payload.opt_numSteps);
}
addMessageListener("PageLoader:ScrollTest", handleMessageFromChrome);
addMessageListener("PageLoader:ScrollTest", handleMessageFromChrome);
} catch (e) {}

View File

@ -35,5 +35,5 @@
<!-- this has to come after the iframe for some reason -->
<script type="text/javascript" xlink:href="../../scripts/talos-debug.js"/>
<script type="text/javascript" xlink:href="../../scripts/Profiler.js"/>
<script type="text/javascript" xlink:href="scroll-test.js"/>
<script type="text/javascript" xlink:href="../../pageloader/chrome/tscroll.js"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -4,7 +4,7 @@
<title>Perf test case</title>
<link type="text/css" rel="stylesheet" href="reader.css">
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script src="scroll-test.js" type="text/javascript"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
<!--
This resembles the layout of Google Reader as of 2009-11-23
and exposed bug 530686.

View File

@ -1,124 +0,0 @@
// Note: The content from here upto '// End scroll test' is duplicated at:
// - talos/tests/scroll/scroll-test.js
// - inside talos/pageloader/chrome/tscroll.js
//
// - Please keep these copies in sync.
// - Pleace make sure that any changes apply cleanly to all use cases.
function testScroll(target, stepSize, opt_reportFunc, opt_numSteps)
{
var win;
if (target == "content") {
target = content.wrappedJSObject;
win = content;
} else {
win = window;
}
function rAF(fn) {
return content.requestAnimationFrame(fn);
}
function myNow() {
return (win.performance && win.performance.now) ?
win.performance.now() :
Date.now();
};
var isWindow = target.self === target;
var getPos = isWindow ? function() { return target.pageYOffset; }
: function() { return target.scrollTop; };
var gotoTop = isWindow ? function() { target.scroll(0, 0); ensureScroll(); }
: function() { target.scrollTop = 0; ensureScroll(); };
var doScrollTick = isWindow ? function() { target.scrollBy(0, stepSize); ensureScroll(); }
: function() { target.scrollTop += stepSize; ensureScroll(); };
function ensureScroll() { // Ensure scroll by reading computed values. screenY is for X11.
if (!this.dummyEnsureScroll) {
this.dummyEnsureScroll = 1;
}
this.dummyEnsureScroll += win.screenY + getPos();
}
// For reference, rAF should fire on vsync, but Gecko currently doesn't use vsync.
// Instead, it uses 1000/layout.frame_rate
// (with 60 as default value when layout.frame_rate == -1).
function startTest()
{
// We should be at the top of the page now.
var start = myNow();
var lastScrollPos = getPos();
var lastScrollTime = start;
var durations = [];
var report = opt_reportFunc || tpRecordTime;
if (report == 'PageLoader:RecordTime') {
report = function(duration) {
var msg = { time: duration, startTime: '', testName: '' };
sendAsyncMessage('PageLoader:RecordTime', msg);
}
}
function tick() {
var now = myNow();
var duration = now - lastScrollTime;
lastScrollTime = now;
durations.push(duration);
doScrollTick();
/* stop scrolling if we can't scroll more, or if we've reached requested number of steps */
if ((getPos() == lastScrollPos) || (opt_numSteps && (durations.length >= (opt_numSteps + 2)))) {
if (typeof(Profiler) !== "undefined") {
Profiler.pause();
}
// Note: The first (1-5) intervals WILL be longer than the rest.
// First interval might include initial rendering and be extra slow.
// Also requestAnimationFrame needs to sync (optimally in 1 frame) after long frames.
// Suggested: Ignore the first 5 intervals.
durations.pop(); // Last step was 0.
durations.pop(); // and the prev one was shorter and with end-of-page logic, ignore both.
if (win.talosDebug)
win.talosDebug.displayData = true; // In a browser: also display all data points.
// For analysis (otherwise, it's too many data points for talos):
var sum = 0;
for (var i = 0; i < durations.length; i++)
sum += Number(durations[i]);
// Report average interval or (failsafe) 0 if no intervls were recorded
report(durations.length ? sum / durations.length : 0);
return;
}
lastScrollPos = getPos();
rAF(tick);
}
if (typeof(Profiler) !== "undefined") {
Profiler.resume();
}
rAF(tick);
}
// Not part of the test and does nothing if we're within talos,
// But provides an alternative tpRecordTime (with some stats display) if running in a browser
// If a callback is provided, then we don't need this debug reporting.
if(!opt_reportFunc && document.head) {
var imported = document.createElement('script');
imported.src = '../../scripts/talos-debug.js?dummy=' + Date.now(); // For some browsers to re-read
document.head.appendChild(imported);
}
setTimeout(function(){
gotoTop();
rAF(startTest);
}, 260);
}
// End scroll test - End duplicated code

View File

@ -9,7 +9,7 @@
}
</style>
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script src="scroll-test.js" type="text/javascript"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
</head>
<body onload = "testScroll(window, 5)">
<P>

View File

@ -10,7 +10,7 @@
}
</style>
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script src="scroll-test.js" type="text/javascript"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
</head>
<body onload = "testScroll(window, 5)">
<P>

View File

@ -7,7 +7,7 @@
}
</style>
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script src="scroll-test.js" type="text/javascript"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
</head>
<body onload = "testScroll(window, 5)">
<P>

View File

@ -6,7 +6,7 @@
}
</style>
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script src="scroll-test.js" type="text/javascript"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
</head>
<body onload = "testScroll(window, 5)">
<P>