From 130b3341e66ff39f537e04a570bf43a0f79361a3 Mon Sep 17 00:00:00 2001 From: Joel Maher Date: Fri, 14 Sep 2018 13:51:05 +0000 Subject: [PATCH] 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 --- testing/profiles/raptor/user.js | 1 + testing/raptor/raptor/manifest.py | 2 ++ testing/raptor/raptor/tests/raptor-tp6.ini | 8 ++--- testing/raptor/webext/raptor/measure.js | 37 ++++++++++++++++++++++ testing/raptor/webext/raptor/runner.js | 12 ++++++- 5 files changed, 55 insertions(+), 5 deletions(-) diff --git a/testing/profiles/raptor/user.js b/testing/profiles/raptor/user.js index 8bea6c5b9093..0f45c2baa3bc 100644 --- a/testing/profiles/raptor/user.js +++ b/testing/profiles/raptor/user.js @@ -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); diff --git a/testing/raptor/raptor/manifest.py b/testing/raptor/raptor/manifest.py index 5ab7c6ddf576..35b32ab3d13c 100644 --- a/testing/raptor/raptor/manifest.py +++ b/testing/raptor/raptor/manifest.py @@ -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']: diff --git a/testing/raptor/raptor/tests/raptor-tp6.ini b/testing/raptor/raptor/tests/raptor-tp6.ini index 693668928c19..147823e4264d 100644 --- a/testing/raptor/raptor/tests/raptor-tp6.ini +++ b/testing/raptor/raptor/tests/raptor-tp6.ini @@ -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] diff --git a/testing/raptor/webext/raptor/measure.js b/testing/raptor/webext/raptor/measure.js index edd72df9c6c7..8f4ea11a3a37 100644 --- a/testing/raptor/webext/raptor/measure.js +++ b/testing/raptor/webext/raptor/measure.js @@ -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"; diff --git a/testing/raptor/webext/raptor/runner.js b/testing/raptor/webext/raptor/runner.js index d852ee7c335f..b45a74c025a0 100644 --- a/testing/raptor/webext/raptor/runner.js +++ b/testing/raptor/webext/raptor/runner.js @@ -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;