Index: tools/telemetry/telemetry/core/web_contents.py |
diff --git a/tools/telemetry/telemetry/core/web_contents.py b/tools/telemetry/telemetry/core/web_contents.py |
index dd04e3ce0a9fee4c3be53b8b9fbbe959915238fc..e619ae3222638a27c3494d4d00b735920a5bc2a2 100644 |
--- a/tools/telemetry/telemetry/core/web_contents.py |
+++ b/tools/telemetry/telemetry/core/web_contents.py |
@@ -2,6 +2,8 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
+import os |
+ |
from telemetry.core import util |
DEFAULT_WEB_CONTENTS_TIMEOUT = 90 |
@@ -13,6 +15,12 @@ class WebContents(object): |
def __init__(self, inspector_backend): |
self._inspector_backend = inspector_backend |
+ self._has_reached_quiescence = False |
+ self._quiescence_js_loaded = False |
+ with open(os.path.join(os.path.dirname(__file__), |
+ 'time_since_last_response.js')) as f: |
+ self._quiescence_js = f.read() |
+ |
def Close(self): |
"""Closes this page. |
@@ -46,6 +54,28 @@ class WebContents(object): |
return False |
util.WaitFor(IsTrue, timeout) |
+ def HasReachedQuiescence(self): |
+ """Determine whether the page has reached quiescence after loading. |
+ |
+ Returns: |
+ True if 2 seconds have passed since last resource received, false |
+ otherwise.""" |
+ # The script that provides the function window.timeSinceLastResponseMs() |
+ # needs to be loaded for this function, but it must be loaded AFTER |
+ # PageMeasurement's WillNavigateToPage function is called, otherwise it will |
+ # not be available here. The script should only be re-loaded once per page |
+ # so that variables in the script get reset only for a new page. |
+ if not self._quiescence_js_loaded: |
+ self.ExecuteJavaScript(self._quiescence_js) |
+ self._quiescence_js_loaded = True |
+ |
+ if (self._has_reached_quiescence): |
+ return True |
+ time_since_last_response_ms = ( |
+ self.EvaluateJavaScript("window.timeSinceLastResponseAfterLoadMs()")) |
+ self._has_reached_quiescence = time_since_last_response_ms > 2000 |
+ return self._has_reached_quiescence |
+ |
def ExecuteJavaScript(self, expr, timeout=DEFAULT_WEB_CONTENTS_TIMEOUT): |
"""Executes expr in JavaScript. Does not return the result. |