diff options
author | Achuith Bhandarkar <achuith@chromium.org> | 2015-05-20 16:05:28 -0700 |
---|---|---|
committer | Achuith Bhandarkar <achuith@chromium.org> | 2015-05-20 23:06:37 +0000 |
commit | 8f35bce9ec23a806507e4d60f31939f582b17980 (patch) | |
tree | da65a106f4c03f9c9d1271362af7c86eebfab300 | |
parent | 02f18c1ec7ad7c21f4c61484470182b2d068e1c1 (diff) | |
download | chromium_src-8f35bce9ec23a806507e4d60f31939f582b17980.zip chromium_src-8f35bce9ec23a806507e4d60f31939f582b17980.tar.gz chromium_src-8f35bce9ec23a806507e4d60f31939f582b17980.tar.bz2 |
Revert of Revert of Re-subimission of https://codereview.chromium.org/1041213003/ (patchset #1 id:1 of https://codereview.chromium.org/1072053002/)
Reason for revert:
THe original patch actually fixes the problem.
Original issue's description:
> Revert of Re-subimission of https://codereview.chromium.org/1041213003/ (patchset #2 id:20001 of https://codereview.chromium.org/1056533003/)
>
> Reason for revert:
> Speculative revert (https://code.google.com/p/chromium/issues/detail?id=474977)
>
> BUG=474977
>
> Original issue's description:
> > Re-subimission of https://codereview.chromium.org/1041213003/
> >
> > 1. Use window.performance.timing instead of statsCollectionController to get page loading time.
> > 2. Fix waiting condition to avoid racing condition
> >
> > BUG=472603,467964
> >
> > Committed: https://crrev.com/ad8d3f3d9182bb82f89c5d29e0c455d8deb8c15a
> > Cr-Commit-Position: refs/heads/master@{#324118}
>
> TBR=dtu@chromium.org,aiolos@chromium.org,cylee@chromium.org
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=472603,467964
>
> Committed: https://crrev.com/ac561df1bc7f47f11af6a2569293bdd4942c09b5
> Cr-Commit-Position: refs/heads/master@{#324447}
TBR=dtu@chromium.org,aiolos@chromium.org,cylee@chromium.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=474977
Review URL: https://codereview.chromium.org/1073873002
Cr-Commit-Position: refs/heads/master@{#324473}
(cherry picked from commit e194cbe2f71dc374a20ebe75d49a1c7d39da42dc)
Review URL: https://codereview.chromium.org/1151703003
Cr-Commit-Position: refs/branch-heads/2357@{#421}
Cr-Branched-From: 59d4494849b405682265ed5d3f5164573b9a939b-refs/heads/master@{#323860}
-rw-r--r-- | tools/perf/metrics/startup_metric.py | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/tools/perf/metrics/startup_metric.py b/tools/perf/metrics/startup_metric.py index ad6639b..c7fd881 100644 --- a/tools/perf/metrics/startup_metric.py +++ b/tools/perf/metrics/startup_metric.py @@ -15,6 +15,9 @@ from metrics import Metric class StartupMetric(Metric): "A metric for browser startup time." + # Seconds to wait for page loading complete. + DEFAULT_LOADING_TIMEOUT = 90 + HISTOGRAMS_TO_RECORD = { 'messageloop_start_time' : 'Startup.BrowserMessageLoopStartTimeFromMainEntry', @@ -46,36 +49,34 @@ class StartupMetric(Metric): def _RecordTabLoadTimes(self, tab, browser_main_entry_time_ms, results): """Records the tab load times for the browser. """ - tab_load_times = [] TabLoadTime = collections.namedtuple( 'TabLoadTime', - ['load_start_ms', 'load_duration_ms', 'request_start_ms']) + ['request_start_ms', 'load_end_ms']) + + def RecordOneTab(t): + def EvaluateInt(exp): + val = t.EvaluateJavaScript(exp) + if not val: + logging.warn('%s undefined' % exp) + return 0 + return int(val) - def RecordTabLoadTime(t): try: - t.WaitForDocumentReadyStateToBeComplete() - - result = t.EvaluateJavaScript( - 'statsCollectionController.tabLoadTiming()') - result = json.loads(result) - - if 'load_start_ms' not in result or 'load_duration_ms' not in result: - raise Exception("Outdated Chrome version, " - "statsCollectionController.tabLoadTiming() not present") - if result['load_duration_ms'] is None: - tab_title = t.EvaluateJavaScript('document.title') - print "Page: ", tab_title, " didn't finish loading." - return - - perf_timing = t.EvaluateJavaScript('window.performance.timing') - if 'requestStart' not in perf_timing: - perf_timing['requestStart'] = 0 # Exclude from benchmark results - print 'requestStart is not supported by this browser' - - tab_load_times.append(TabLoadTime( - int(result['load_start_ms']), - int(result['load_duration_ms']), - int(perf_timing['requestStart']))) + t.WaitForJavaScriptExpression( + 'window.performance.timing["loadEventEnd"] > 0', + self.DEFAULT_LOADING_TIMEOUT) + + # EvaluateJavaScript(window.performance.timing) doesn't guarantee to + # return the desired javascript object (crbug/472603). It may return an + # empty object. However getting individual field works. + # The behavior depends on Webkit implementation on different platforms. + load_event_end = EvaluateInt( + 'window.performance.timing["loadEventEnd"]') + request_start = EvaluateInt( + 'window.performance.timing["requestStart"]') + + return TabLoadTime(request_start, load_event_end) + except exceptions.TimeoutException: # Low memory Android devices may not be able to load more than # one tab at a time, so may timeout when the test attempts to @@ -87,19 +88,18 @@ class StartupMetric(Metric): # when the user switches to them, rather than during startup. In view of # this, to get the same measures on all platform, we only measure the # foreground tab on all platforms. + foreground_tab_stats = RecordOneTab(tab.browser.foreground_tab) - RecordTabLoadTime(tab.browser.foreground_tab) - - foreground_tab_stats = tab_load_times[0] - foreground_tab_load_complete = ((foreground_tab_stats.load_start_ms + - foreground_tab_stats.load_duration_ms) - browser_main_entry_time_ms) - results.AddValue(scalar.ScalarValue( - results.current_page, 'foreground_tab_load_complete', 'ms', - foreground_tab_load_complete)) - if (foreground_tab_stats.request_start_ms > 0): + if foreground_tab_stats: + foreground_tab_load_complete = ( + foreground_tab_stats.load_end_ms - browser_main_entry_time_ms) results.AddValue(scalar.ScalarValue( - results.current_page, 'foreground_tab_request_start', 'ms', - foreground_tab_stats.request_start_ms - browser_main_entry_time_ms)) + results.current_page, 'foreground_tab_load_complete', 'ms', + foreground_tab_load_complete)) + if (foreground_tab_stats.request_start_ms > 0): + results.AddValue(scalar.ScalarValue( + results.current_page, 'foreground_tab_request_start', 'ms', + foreground_tab_stats.request_start_ms - browser_main_entry_time_ms)) def AddResults(self, tab, results): get_histogram_js = 'statsCollectionController.getBrowserHistogram("%s")' |