1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved.
2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)# found in the LICENSE file.
4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class Metric(object):
6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  """Base class for all the metrics that are used by telemetry measurements.
7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  The Metric class represents a way of measuring something. Metrics are
9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  helper classes used by PageMeasurements. Each PageMeasurement may use
10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  multiple metrics; each metric should be focussed on collecting data
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  about one thing.
12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  """
13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  @classmethod
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  def CustomizeBrowserOptions(cls, options):
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    """Add browser options that are required by this metric.
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    Some metrics do not have any special browser options that need
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    to be added, and they do not need to override this method; by
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    default, no browser options are added.
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    To add options here, call options.AppendExtraBrowserArgs(arg).
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    """
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    pass
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  def Start(self, page, tab):
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    """Start collecting data for this metric."""
288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    pass
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  def Stop(self, page, tab):
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    """Stop collecting data for this metric (if applicable)."""
328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    pass
33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  def AddResults(self, tab, results):
35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    """Add the data collected into the results object for a measurement.
36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    Metrics may implement AddResults to provide a common way to add results
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    to the PageMeasurementResults in PageMeasurement.AddMeasurement --
39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    results should be added with results.Add(trace_name, unit, value).
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    """
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    raise NotImplementedError()
42