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)
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  def Start(self, page, tab):
15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    """Start collecting data for this metric."""
16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    raise NotImplementedError()
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  def Stop(self, page, tab):
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    """Stop collecting data for this metric (if applicable)."""
20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    raise NotImplementedError()
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  def AddResults(self, tab, results):
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    """Add the data collected into the results object for a measurement.
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    Metrics may implement AddResults to provide a common way to add results
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    to the PageMeasurementResults in PageMeasurement.AddMeasurement --
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    results should be added with results.Add(trace_name, unit, value).
28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    """
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    raise NotImplementedError()
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
31