| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 """ | 4 """ |
| 5 The Value hierarchy provides a way of representing the values measurements | 5 The Value hierarchy provides a way of representing the values measurements |
| 6 produce such that they can be merged across runs, grouped by page, and output | 6 produce such that they can be merged across runs, grouped by page, and output |
| 7 to different targets. | 7 to different targets. |
| 8 | 8 |
| 9 The core Value concept provides the basic functionality: | 9 The core Value concept provides the basic functionality: |
| 10 - association with a page, may be none | 10 - association with a page, may be none |
| 11 - naming and units | 11 - naming and units |
| 12 - importance tracking [whether a value will show up on a waterfall or output | 12 - importance tracking [whether a value will show up on a waterfall or output |
| 13 file by default] | 13 file by default] |
| 14 - other metadata, such as a description of what was measured | 14 - other metadata, such as a description of what was measured |
| 15 - default conversion to scalar and string | 15 - default conversion to scalar and string |
| 16 - merging properties | 16 - merging properties |
| 17 | 17 |
| 18 A page may actually run a few times during a single telemetry session. | 18 A page may actually run a few times during a single telemetry session. |
| 19 Downstream consumers of test results typically want to group these runs | 19 Downstream consumers of test results typically want to group these runs |
| 20 together, then compute summary statistics across runs. Value provides the | 20 together, then compute summary statistics across runs. Value provides the |
| 21 Merge* family of methods for this kind of aggregation. | 21 Merge* family of methods for this kind of aggregation. |
| 22 """ | 22 """ |
| 23 import os | 23 import os |
| 24 | 24 |
| 25 from telemetry.core import discover |
| 25 from telemetry.core import util | 26 from telemetry.core import util |
| 26 from telemetry.util import classes_util | |
| 27 | |
| 28 | 27 |
| 29 # When combining a pair of Values togehter, it is sometimes ambiguous whether | 28 # When combining a pair of Values togehter, it is sometimes ambiguous whether |
| 30 # the values should be concatenated, or one should be picked as representative. | 29 # the values should be concatenated, or one should be picked as representative. |
| 31 # The possible merging policies are listed here. | 30 # The possible merging policies are listed here. |
| 32 CONCATENATE = 'concatenate' | 31 CONCATENATE = 'concatenate' |
| 33 PICK_FIRST = 'pick-first' | 32 PICK_FIRST = 'pick-first' |
| 34 | 33 |
| 35 # When converting a Value to its buildbot equivalent, the context in which the | 34 # When converting a Value to its buildbot equivalent, the context in which the |
| 36 # value is being interpreted actually affects the conversion. This is insane, | 35 # value is being interpreted actually affects the conversion. This is insane, |
| 37 # but there you have it. There are three contexts in which Values are converted | 36 # but there you have it. There are three contexts in which Values are converted |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 | 241 |
| 243 Given a list of value dicts produced by AsDict, this method | 242 Given a list of value dicts produced by AsDict, this method |
| 244 deserializes the dicts given a dict mapping page IDs to pages. | 243 deserializes the dicts given a dict mapping page IDs to pages. |
| 245 This method performs memoization for deserializing a list of values | 244 This method performs memoization for deserializing a list of values |
| 246 efficiently, where FromDict is meant to handle one-offs. | 245 efficiently, where FromDict is meant to handle one-offs. |
| 247 | 246 |
| 248 values: a list of value dicts produced by AsDict() on a value subclass. | 247 values: a list of value dicts produced by AsDict() on a value subclass. |
| 249 page_dict: a dictionary mapping IDs to page objects. | 248 page_dict: a dictionary mapping IDs to page objects. |
| 250 """ | 249 """ |
| 251 value_dir = os.path.dirname(__file__) | 250 value_dir = os.path.dirname(__file__) |
| 252 value_classes = classes_util.DiscoverClassesByClassName( | 251 value_classes = discover.DiscoverClasses( |
| 253 value_dir, util.GetTelemetryDir(), Value) | 252 value_dir, util.GetTelemetryDir(), |
| 253 Value, index_by_class_name=True) |
| 254 | 254 |
| 255 value_json_types = dict((value_classes[x].GetJSONTypeName(), x) for x in | 255 value_json_types = dict((value_classes[x].GetJSONTypeName(), x) for x in |
| 256 value_classes) | 256 value_classes) |
| 257 | 257 |
| 258 values = [] | 258 values = [] |
| 259 for value_dict in value_dicts: | 259 for value_dict in value_dicts: |
| 260 value_class = value_classes[value_json_types[value_dict['type']]] | 260 value_class = value_classes[value_json_types[value_dict['type']]] |
| 261 assert 'FromDict' in value_class.__dict__, \ | 261 assert 'FromDict' in value_class.__dict__, \ |
| 262 'Subclass doesn\'t override FromDict' | 262 'Subclass doesn\'t override FromDict' |
| 263 values.append(value_class.FromDict(value_dict, page_dict)) | 263 values.append(value_class.FromDict(value_dict, page_dict)) |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 whereas telemetry represents values with a chart_name.trace_name convention, | 327 whereas telemetry represents values with a chart_name.trace_name convention, |
| 328 where chart_name is optional. This convention is also used by chart_json. | 328 where chart_name is optional. This convention is also used by chart_json. |
| 329 | 329 |
| 330 This converts from the telemetry convention to the buildbot convention, | 330 This converts from the telemetry convention to the buildbot convention, |
| 331 returning a 2-tuple (measurement_name, trace_name). | 331 returning a 2-tuple (measurement_name, trace_name). |
| 332 """ | 332 """ |
| 333 if '.' in value_name: | 333 if '.' in value_name: |
| 334 return value_name.split('.', 1) | 334 return value_name.split('.', 1) |
| 335 else: | 335 else: |
| 336 return value_name, value_name | 336 return value_name, value_name |
| OLD | NEW |