Bug 1458242 - add DOMContentFlushed to tp6 as a measurement. r=rwood

add DOMContentFlushed to tp6, collect it and return the geometric mean of all measurements.

Differential Revision: https://phabricator.services.mozilla.com/D5797

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Joel Maher 2018-09-14 13:51:05 +00:00
parent f4dc279207
commit 130b3341e6
5 changed files with 55 additions and 5 deletions

View File

@ -1,6 +1,7 @@
// Preferences file used by the raptor harness
/* globals user_pref */
user_pref("dom.performance.time_to_non_blank_paint.enabled", true);
user_pref("dom.performance.time_to_dom_content_flushed.enabled", true);
// required for geckoview logging
user_pref("geckoview.console.enabled", true);

View File

@ -76,6 +76,8 @@ def write_test_settings_json(test_details, oskey):
if test_details['type'] == "pageload":
test_settings['raptor-options']['measure'] = {}
if "dcf" in test_details['measure']:
test_settings['raptor-options']['measure']['dcf'] = True
if "fnbpaint" in test_details['measure']:
test_settings['raptor-options']['measure']['fnbpaint'] = True
if "fcp" in test_details['measure']:

View File

@ -19,14 +19,14 @@ alert_threshold = 2.0
apps = firefox
test_url = https://www.amazon.com/s/url=search-alias%3Daps&field-keywords=laptop
playback_recordings = amazon.mp
measure = fnbpaint, hero
measure = fnbpaint, hero, dcf
hero = hero1
[raptor-tp6-facebook-firefox]
apps = firefox
test_url = https://www.facebook.com
playback_recordings = facebook.mp
measure = fnbpaint, hero
measure = fnbpaint, hero, dcf
hero = hero1
[raptor-tp6-google-firefox]
@ -36,14 +36,14 @@ apps = firefox
# to be loaded into that page also; resulting in 2 fnbpaint values etc.
test_url = https://www.google.com/search?hl=en&q=barack+obama&cad=h
playback_recordings = google-search.mp
measure = fnbpaint, hero
measure = fnbpaint, hero, dcf
hero = hero1
[raptor-tp6-youtube-firefox]
apps = firefox
test_url = https://www.youtube.com
playback_recordings = youtube.mp
measure = fnbpaint, hero
measure = fnbpaint, hero, dcf
hero = hero1
[raptor-tp6-amazon-chrome]

View File

@ -17,6 +17,12 @@ var heroesToCapture = [];
// default only; this is set via control server settings json
var getFNBPaint = false;
// measure firefox domContentFlushed
// note: this browser pref must be enabled:
// dom.performance.time_to_dom_content_flushed.enabled = True
// default only; this is set via control server settings json
var getDCF = false;
// measure google's first-contentful-paint
// default only; this is set via control server settings json
var getFCP = false;
@ -57,6 +63,14 @@ function setup(settings) {
}
}
if (settings.measure.dcf !== undefined) {
getDCF = settings.measure.dcf;
if (getDCF) {
console.log("will be measuring dcf");
measureDCF();
}
}
if (settings.measure.fcp !== undefined) {
getFCP = settings.measure.fcp;
if (getFCP) {
@ -142,6 +156,29 @@ function measureFNBPaint() {
}
}
function measureDCF() {
var x = window.performance.timing.timeToDOMContentFlushed;
if (typeof(x) == "undefined") {
console.log("ERROR: domContentFlushed is undefined; ensure the pref is enabled");
return;
}
if (x > 0) {
console.log("got domContentFlushed: " + x);
gRetryCounter = 0;
var startTime = perfData.timing.fetchStart;
sendResult("dcf", x - startTime);
} else {
gRetryCounter += 1;
if (gRetryCounter <= 10) {
console.log("\dcf is not yet available (0), retry number " + gRetryCounter + "...\n");
window.setTimeout(measureDCF, 100);
} else {
console.log("\nunable to get a value for dcf after " + gRetryCounter + " retries\n");
}
}
}
function measureFirstContentfulPaint() {
// see https://developer.mozilla.org/en-US/docs/Web/API/PerformancePaintTiming
var resultType = "fcp";

View File

@ -36,11 +36,13 @@ var testTabID = 0;
var getHero = false;
var getFNBPaint = false;
var getFCP = false;
var getDCF = false;
var isHeroPending = false;
var pendingHeroes = [];
var settings = {};
var isFNBPaintPending = false;
var isFCPPending = false;
var isDCFPending = false;
var isBenchmarkPending = false;
var pageTimeout = 10000; // default pageload timeout
@ -93,6 +95,9 @@ function getTestSettings() {
if (settings.measure.fnbpaint !== undefined) {
getFNBPaint = settings.measure.fnbpaint;
}
if (settings.measure.dcf !== undefined) {
getDCF = settings.measure.dcf;
}
if (settings.measure.fcp !== undefined) {
getFCP = settings.measure.fcp;
}
@ -172,7 +177,7 @@ function waitForResult() {
return new Promise(resolve => {
function checkForResult() {
if (testType == "pageload") {
if (!isHeroPending && !isFNBPaintPending && !isFCPPending) {
if (!isHeroPending && !isFNBPaintPending && !isFCPPending && !isDCFPending) {
cancelTimeoutAlarm("raptor-page-timeout");
resolve();
} else {
@ -215,6 +220,8 @@ function nextCycle() {
isFNBPaintPending = true;
if (getFCP)
isFCPPending = true;
if (getDCF)
isDCFPending = true;
} else if (testType == "benchmark") {
isBenchmarkPending = true;
}
@ -288,6 +295,9 @@ function resultListener(request, sender, sendResponse) {
} else if (request.type == "fnbpaint") {
results.measurements.fnbpaint.push(request.value);
isFNBPaintPending = false;
} else if (request.type == "dcf") {
results.measurements.dcf.push(request.value);
isDCFPending = false;
} else if (request.type == "fcp") {
results.measurements.fcp.push(request.value);
isFCPPending = false;