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

Unified Diff: tools/telemetry/telemetry/core/network_quiescence.js

Issue 185413005: [Telemetry] Move page quiescence test to WebContents (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 9 months 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 | « tools/perf/metrics/speedindex.py ('k') | tools/telemetry/telemetry/core/web_contents.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/core/network_quiescence.js
diff --git a/tools/perf/metrics/speedindex.js b/tools/telemetry/telemetry/core/network_quiescence.js
similarity index 60%
rename from tools/perf/metrics/speedindex.js
rename to tools/telemetry/telemetry/core/network_quiescence.js
index c64f38b1667be1901935f3ec6afb6b9cc3a8f2a5..d49db5b1ff1d3749a736e75aa093c999f1e6ab2b 100644
--- a/tools/perf/metrics/speedindex.js
+++ b/tools/telemetry/telemetry/core/network_quiescence.js
@@ -6,10 +6,16 @@
/**
* @fileoverview This file provides a JavaScript helper function that
- * determines when the last resource was received.
+ * determines when network quiescence has been reached based on the time since
+ * the last resource was received.
*/
(function() {
+ // Make executing this code idempotent.
+ if (window.__telemetry_testHasReachedNetworkQuiescence) {
+ return;
+ }
+
// Set the Resource Timing interface functions that will be used below
// to use whatever version is available currently regardless of vendor
// prefix.
@@ -38,19 +44,32 @@
// so we can clear new entries when they're added.
var lastEntry = null;
+ // True when no resource has been loaded from the network for
+ //|QUIESCENCE_TIMEOUT_MS| milliseconds. This value is sticky.
+ var hasReachedQuiesence = false;
+
+ // Time to wait before declaring network quiescence in milliseconds.
+ var QUIESCENCE_TIMEOUT_MS = 2000;
+
/**
* This method uses the Resource Timing interface, which is described at
- * http://www.w3.org/TR/resource-timing/. It provides information about
- * timings for resources such as images and script files, and it includes
- * resources requested via XMLHttpRequest.
+ * http://www.w3.org/TR/resource-timing/. It determines whether the time
+ * since lodading any resources such as images and script files (including
+ * resources requested via XMLHttpRequest) has exceeded a threshold defined
+ # by |QUIESCENCE_TIMEOUT_MS|.
*
- * @return {number} The time since either the load event, or the last
- * the last resource was received after the load event. If the load
- * event hasn't yet happened, return 0.
+ * @return {boolean} True if the time since either the load event, or the last
+ * resource was received after the load event exceeds the aforementioned
+ * threshold. This state is sticky, so once this function returns true for a
+ * given page, it will always return true.
*/
- window.timeSinceLastResponseAfterLoadMs = function() {
+ window.__telemetry_testHasReachedNetworkQuiescence = function() {
+ if (hasReachedQuiesence) {
+ return true;
+ }
+
if (window.document.readyState !== 'complete') {
- return 0;
+ return false;
}
var resourceTimings = window.performance.getEntriesByType('resource');
@@ -64,13 +83,21 @@
// so we must also get load time in the same terms.
var timing = window.performance.timing;
var loadTime = timing.loadEventEnd - timing.navigationStart;
+ var lastResponseTimeMs = 0;
// If there have been no resource timing entries, or the last entry was
- // before the load event, then return the time since the load event.
+ // before the load event, then use the time since the load event.
if (!lastEntry || lastEntry.responseEnd < loadTime) {
- return window.performance.now() - loadTime;
+ lastResponseTimeMs = window.performance.now() - loadTime;
+ } else {
+ lastResponseTimeMs = window.performance.now() - lastEntry.responseEnd;
+ }
+
+ if (lastResponseTimeMs >= QUIESCENCE_TIMEOUT_MS) {
+ hasReachedQuiesence = true;
}
- return window.performance.now() - lastEntry.responseEnd;
+
+ return hasReachedQuiesence;
}
})();
« no previous file with comments | « tools/perf/metrics/speedindex.py ('k') | tools/telemetry/telemetry/core/web_contents.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698