1558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch# Copyright 2013 The Chromium Authors. All rights reserved. 2558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 3558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch# found in the LICENSE file. 4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)from metrics import timeline 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)from metrics import loading 6558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochfrom telemetry.core import util 7558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochfrom telemetry.page import page_measurement 8558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass LoadingTimeline(page_measurement.PageMeasurement): 10558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch def __init__(self, *args, **kwargs): 11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch super(LoadingTimeline, self).__init__(*args, **kwargs) 12558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch self._metrics = None 13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 14558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch @property 15558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch def results_are_the_same_on_every_page(self): 16558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return False 17558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 18558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch def WillNavigateToPage(self, page, tab): 19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._metrics = timeline.TimelineMetrics(timeline.TIMELINE_MODE) 20558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch self._metrics.Start(tab) 21558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 22558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch def MeasurePage(self, page, tab, results): 23558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch # In current telemetry tests, all tests wait for DocumentComplete state, 24558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch # but we need to wait for the load event. 25558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch def IsLoaded(): 26558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return bool(tab.EvaluateJavaScript('performance.timing.loadEventStart')) 27558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch util.WaitFor(IsLoaded, 300) 28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch # TODO(nduca): when crbug.com/168431 is fixed, modify the page sets to 30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch # recognize loading as a toplevel action. 31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch self._metrics.Stop(tab) 32558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 333240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch loading.LoadingMetric().AddResults(tab, results) 34558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch self._metrics.AddResults(results) 35