Bug 1374333 - Use TalosContentProfiler to fix profiling in tscroll tests. r=rwood

MozReview-Commit-ID: B7ymFcpTMSC

--HG--
extra : rebase_source : e1a9a9366038a81624c967f85e2f6696da858ce4
extra : source : f45e66dda938bd15dc3427cef63cc5aed36b90a6
This commit is contained in:
Mike Conley 2017-06-19 14:59:05 -04:00
Родитель a3fd2a7da6
Коммит f9b18e55c0
7 изменённых файлов: 39 добавлений и 27 удалений

Просмотреть файл

@ -2,6 +2,14 @@
// unprivileged code.
// - Please make sure that any changes apply cleanly to all use cases.
if (typeof(TalosContentProfiler) == "undefined") {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {}
Components.utils.import("resource://gre/modules/Services.jsm");
Services.scriptloader.loadSubScript("chrome://talos-powers-content/content/TalosContentProfiler.js");
}
function testScroll(target, stepSize, opt_reportFunc, opt_numSteps) {
var win;
if (target == "content") {
@ -165,30 +173,33 @@ function testScroll(target, stepSize, opt_reportFunc, opt_numSteps) {
/* 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();
let profilerPaused = Promise.resolve();
if (typeof(TalosContentProfiler) !== "undefined") {
profilerPaused = TalosContentProfiler.pause(testBaseName, true);
}
// 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.
profilerPaused.then(() => {
// 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.
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.
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]);
// 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
result.values.push(durations.length ? sum / durations.length : 0);
result.names.push(testBaseName);
resolve();
// Report average interval or (failsafe) 0 if no intervls were recorded
result.values.push(durations.length ? sum / durations.length : 0);
result.names.push(testBaseName);
resolve();
});
return;
}
@ -196,10 +207,11 @@ function testScroll(target, stepSize, opt_reportFunc, opt_numSteps) {
rAF(tick);
}
if (typeof(Profiler) !== "undefined") {
Profiler.resume();
if (typeof(TalosContentProfiler) !== "undefined") {
TalosContentProfiler.resume(testBaseName, true).then(() => {
rAF(tick);
});
}
rAF(tick);
});
}

Просмотреть файл

@ -34,6 +34,6 @@
</foreignObject>
<!-- 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 language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
<script type="text/javascript" xlink:href="../../pageloader/chrome/tscroll.js"/>
</svg>

До

Ширина:  |  Высота:  |  Размер: 1.5 KiB

После

Ширина:  |  Высота:  |  Размер: 1.5 KiB

Просмотреть файл

@ -3,7 +3,7 @@
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Perf test case</title>
<link type="text/css" rel="stylesheet" href="reader.css">
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
<!--
This resembles the layout of Google Reader as of 2009-11-23

Просмотреть файл

@ -8,7 +8,7 @@
width: 400pt;
}
</style>
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
</head>
<body onload = "testScroll(window, 5)">

Просмотреть файл

@ -9,7 +9,7 @@
width: 400pt;
}
</style>
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
</head>
<body onload = "testScroll(window, 5)">

Просмотреть файл

@ -6,7 +6,7 @@
width: 400pt;
}
</style>
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
</head>
<body onload = "testScroll(window, 5)">

Просмотреть файл

@ -5,7 +5,7 @@
width: 400pt;
}
</style>
<script src="../../scripts/Profiler.js" type="text/javascript"></script>
<script language="Javascript" type="text/javascript" src="chrome://talos-powers-content/content/TalosContentProfiler.js"></script>
<script src="../../pageloader/chrome/tscroll.js" type="text/javascript"></script>
</head>
<body onload = "testScroll(window, 5)">