def testConvertUnknownUnit(self):
    data = {
        'metric1': {
            'units': 'SomeUnknownUnit',
            'traces': {
                'story1': ['10', '1'],
                'story2': ['123.4', '7.89'],
            }
        }
    }
    histograms = gtest_json_converter.ConvertGtestJson(data)
    self.assertEqual(len(histograms), 2)

    metric_histograms = histograms.GetHistogramsNamed('metric1')
    self.assertEqual(len(metric_histograms), 2)
    story1 = None
    story2 = None
    if metric_histograms[0].diagnostics[
        reserved_infos.STORIES.name].GetOnlyElement() == 'story1':
      story1 = metric_histograms[0]
      story2 = metric_histograms[1]
    else:
      story2 = metric_histograms[0]
      story1 = metric_histograms[1]

    self.assertEqual(story1.average, 10)
    self.assertEqual(story1.standard_deviation, 1)
    self.assertEqual(story1.sum, story1.num_values * story1.average)
    self.assertAlmostEqual(story2.average, 123.4)
    self.assertAlmostEqual(story2.standard_deviation, 7.89)
    self.assertAlmostEqual(story2.sum, story2.num_values * story2.average)
    self.assertEqual(story1.unit, story2.unit)
    self.assertEqual(story1.unit, 'unitless_smallerIsBetter')
コード例 #2
0
ファイル: results2.py プロジェクト: zloop1982/catapult
def _FetchHistograms(job):
  for change in _ChangeList(job):
    for attempt in job.state._attempts[change]:
      for execution in attempt.executions:
        mode = None
        if isinstance(execution, read_value._ReadHistogramsJsonValueExecution):
          mode = 'histograms'
        elif isinstance(execution, read_value._ReadGraphJsonValueExecution):
          mode = 'graphjson'
        elif isinstance(execution, read_value.ReadValueExecution):
          mode = execution.mode or 'histograms'

        if mode is None:
          continue

        histogram_sets = None
        if mode == 'graphjson':
          histograms = gtest_json_converter.ConvertGtestJson(
              _JsonFromExecution(execution))
          histograms.AddSharedDiagnosticToAllHistograms(
              reserved_infos.LABELS.name, generic_set.GenericSet([str(change)]))
          histogram_sets = histograms.AsDicts()
        else:
          histogram_sets = _JsonFromExecution(execution)

        logging.debug('Found %s histograms for %s', len(histogram_sets), change)

        for histogram in histogram_sets:
          yield histogram

        # Force deletion of histogram_set objects which can be O(100MB).
        del histogram_sets
コード例 #3
0
 def testConvertOverlappingUnit(self):
     # Some units in the legacy unit mapping are the same as the units defined
     # for histograms - the former should be used since it gives us improvement
     # direction.
     data = {
         'metric1': {
             'units': 'Hz',
             'traces': {
                 'story1': ['60', '0'],
             }
         }
     }
     histograms = gtest_json_converter.ConvertGtestJson(data)
     self.assertEqual(len(histograms), 1)
     self.assertEqual(histograms.GetFirstHistogram().unit,
                      'Hz_biggerIsBetter')
コード例 #4
0
ファイル: results2.py プロジェクト: sanjana87/catapult
def _FetchHistograms(job):
  for change in _ChangeList(job):
    for attempt in job.state._attempts[change]:
      for execution in attempt.executions:
        if isinstance(
            execution, read_value._ReadHistogramsJsonValueExecution):
          # The histogram sets are very big. Since we have limited
          # memory, delete the histogram sets as we go along.
          histogram_set = _JsonFromExecution(execution)
          for histogram in histogram_set:
            yield histogram
          del histogram_set
        elif isinstance(
            execution, read_value._ReadGraphJsonValueExecution):
          graphjson_results = _JsonFromExecution(execution)
          hs = gtest_json_converter.ConvertGtestJson(graphjson_results)
          hs.AddSharedDiagnosticToAllHistograms(
              reserved_infos.LABELS.name,
              generic_set.GenericSet([str(change)]))
          hs = hs.AsDicts()
          for histogram in hs:
            yield histogram
          del hs
コード例 #5
0
 def testConvertKnownNonLegacyUnit(self):
     # A unit not in the legacy mapping but present in the list of histogram
     # units should still be converted to a non-unitless unit.
     data = {
         'metric1': {
             'units': 'V',
             'traces': {
                 'story1': ['10', '1'],
             },
         },
         'metric2': {
             'units': 'V_smallerIsBetter',
             'traces': {
                 'story1': ['1', '1'],
             },
         },
     }
     histograms = gtest_json_converter.ConvertGtestJson(data)
     self.assertEqual(len(histograms), 2)
     self.assertEqual(histograms.GetHistogramsNamed('metric1')[0].unit, 'V')
     self.assertEqual(
         histograms.GetHistogramsNamed('metric2')[0].unit,
         'V_smallerIsBetter')
  def testConvertBasic(self):
    data = {
        'metric1': {
            'units': 'ms',
            'traces': {
                'story1': ['10.12345', '0.54321'],
                'story2': ['30', '0'],
            }
        },
        'metric2': {
            'units': 'ns',
            'traces': {
                'story1': ['100000.0', '2543.543'],
                'story2': ['12345.6789', '301.2'],
            },
        }
    }
    histograms = gtest_json_converter.ConvertGtestJson(data)
    self.assertEqual(len(histograms), 4)

    metric_histograms = histograms.GetHistogramsNamed('metric1')
    self.assertEqual(len(metric_histograms), 2)
    story1 = None
    story2 = None
    if metric_histograms[0].diagnostics[
        reserved_infos.STORIES.name].GetOnlyElement() == 'story1':
      story1 = metric_histograms[0]
      story2 = metric_histograms[1]
    else:
      story2 = metric_histograms[0]
      story1 = metric_histograms[1]

    # assertAlmostEqual necessary to avoid floating point precision issues.
    self.assertAlmostEqual(story1.average, 10.12345)
    self.assertAlmostEqual(story1.standard_deviation, 0.54321)
    self.assertAlmostEqual(story1.sum, story1.num_values * story1.average)
    self.assertEqual(story2.average, 30)
    self.assertEqual(story2.standard_deviation, 0)
    self.assertEqual(story2.sum, story2.num_values * story2.average)
    self.assertEqual(story1.unit, story2.unit)
    self.assertEqual(story1.unit, 'ms_smallerIsBetter')

    metric_histograms = histograms.GetHistogramsNamed('metric2')
    self.assertEqual(len(metric_histograms), 2)
    if metric_histograms[0].diagnostics[
        reserved_infos.STORIES.name].GetOnlyElement() == 'story1':
      story1 = metric_histograms[0]
      story2 = metric_histograms[1]
    else:
      story2 = metric_histograms[0]
      story1 = metric_histograms[1]

    # assertAlmostEqual necessary to avoid floating point precision issues.
    # We expect the numbers to be different than what was initially provided
    # since this should be converted to milliseconds.
    self.assertAlmostEqual(story1.average, 100000 * NANO_TO_MILLISECONDS)
    self.assertAlmostEqual(story1.standard_deviation,
                           2543.543 * NANO_TO_MILLISECONDS)
    self.assertAlmostEqual(story1.sum, story1.num_values * story1.average)
    self.assertAlmostEqual(story2.average, 12345.6789 * NANO_TO_MILLISECONDS)
    self.assertAlmostEqual(story2.standard_deviation,
                           301.2 * NANO_TO_MILLISECONDS)
    self.assertAlmostEqual(story2.sum, story2.num_values * story2.average)
    self.assertEqual(story1.unit, story2.unit)
    self.assertEqual(story1.unit, 'msBestFitFormat_smallerIsBetter')