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