| # Copyright 2021 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """ |
| Validates the media_metric. |
| """ |
| |
| from cli_tools.tbmv3.validators import simple_validator |
| |
| |
| def CompareHistograms(test_ctx): |
| v2_metric = 'mediaMetric' |
| v3_metric = 'media_metric' |
| v2_histograms = test_ctx.RunTBMv2(v2_metric) |
| v3_histograms = test_ctx.RunTBMv3(v3_metric) |
| |
| simple_config = { |
| 'v2_metric': v2_metric, |
| 'v3_metric': v3_metric, |
| # 1 microsecond precision - default for ms unit histograms. |
| 'float_precision': 1e-3, |
| 'histogram_mappings': { |
| # mappings are 'v2_histogram: 'v3_histogram'. |
| 'time_to_video_play': 'media::time_to_video_play', |
| 'time_to_audio_play': 'media::time_to_audio_play', |
| # Dropped frame count is broken in the TBMv2 metric. |
| # 'dropped_frame_count': 'media::dropped_frame_count', |
| 'buffering_time': 'media::buffering_time', |
| # Roughness is reported as double in the v3 metric, but as int in v2. |
| 'roughness': ('media::roughness', 1), |
| 'freezing': 'media::freezing' |
| }, |
| } |
| |
| simple_validator.CompareSimpleHistograms(test_ctx, simple_config, |
| v2_histograms, v3_histograms) |
| |
| # seek time histograms are merged. |
| seek_time_histograms = [ |
| # v3 histogram => set of v2 histograms that are merged into it. |
| ['media::seek_time', ['seek_time_0_5', 'seek_time_9']], |
| [ |
| 'media::pipeline_seek_time', |
| ['pipeline_seek_time_0_5', 'pipeline_seek_time_9'] |
| ], |
| ] |
| |
| for entry in seek_time_histograms: |
| v3_hist_name = entry[0] |
| v3_hist = simple_validator.OptionalGetHistogram(v3_histograms, v3_hist_name, |
| v3_metric, 'v3') |
| |
| v2_hists = [] |
| for v2_hist_name in entry[1]: |
| v2_hist = simple_validator.OptionalGetHistogram(v2_histograms, |
| v2_hist_name, v2_metric, |
| 'v2') |
| if v2_hist is None: |
| continue |
| v2_hists += [v2_hist] |
| |
| if v3_hist is None: |
| if len(v2_hists) > 0: |
| raise Exception('Expected a %s v3 histogram, but none exists' % |
| (v3_hist_name)) |
| continue |
| |
| if len(v2_hists) == 0: |
| raise Exception('Have a %s v3 histogram but no matching v2 ones' % |
| (v3_hist_name)) |
| |
| v2_samples = [] |
| for v2_hist in v2_hists: |
| v2_samples += [s for s in v2_hist.sample_values if s is not None] |
| v3_samples = [s for s in v3_hist.sample_values if s is not None] |
| |
| test_ctx.assertEqual(len(v2_samples), len(v3_samples)) |
| v2_samples.sort() |
| v3_samples.sort() |
| for v2_sample, v3_sample in zip(v2_samples, v3_samples): |
| test_ctx.assertAlmostEqual(v2_sample, |
| v3_sample, |
| delta=simple_config['float_precision']) |