| # Copyright 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from metrics import Metric |
| |
| class LoadingMetric(Metric): |
| """A metric for page loading time based entirely on window.performance""" |
| |
| def Start(self, page, tab): |
| raise NotImplementedError() |
| |
| def Stop(self, page, tab): |
| raise NotImplementedError() |
| |
| def AddResults(self, tab, results): |
| load_timings = tab.EvaluateJavaScript('window.performance.timing') |
| |
| # NavigationStart relative markers in milliseconds. |
| load_start = ( |
| float(load_timings['loadEventStart']) - load_timings['navigationStart']) |
| results.Add('load_start', 'ms', load_start) |
| |
| dom_content_loaded_start = ( |
| float(load_timings['domContentLoadedEventStart']) - |
| load_timings['navigationStart']) |
| results.Add('dom_content_loaded_start', 'ms', dom_content_loaded_start) |
| |
| fetch_start = ( |
| float(load_timings['fetchStart']) - load_timings['navigationStart']) |
| results.Add('fetch_start', 'ms', fetch_start, data_type='unimportant') |
| |
| request_start = ( |
| float(load_timings['requestStart']) - load_timings['navigationStart']) |
| results.Add('request_start', 'ms', request_start, data_type='unimportant') |
| |
| # Phase measurements in milliseconds. |
| domain_lookup_duration = ( |
| float(load_timings['domainLookupEnd']) - |
| load_timings['domainLookupStart']) |
| results.Add('domain_lookup_duration', 'ms', domain_lookup_duration, |
| data_type='unimportant') |
| |
| connect_duration = ( |
| float(load_timings['connectEnd']) - load_timings['connectStart']) |
| results.Add('connect_duration', 'ms', connect_duration, |
| data_type='unimportant') |
| |
| request_duration = ( |
| float(load_timings['responseStart']) - load_timings['requestStart']) |
| results.Add('request_duration', 'ms', request_duration, |
| data_type='unimportant') |
| |
| response_duration = ( |
| float(load_timings['responseEnd']) - load_timings['responseStart']) |
| results.Add('response_duration', 'ms', response_duration, |
| data_type='unimportant') |