| # Copyright 2023 The ANGLE Project Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # Utility for handling ANGLE perf metrics, separate file as it's |
| # called by both the test runner and the post-processing script. |
| |
| import collections |
| import json |
| import logging |
| import statistics |
| |
| |
| def ConvertToSkiaPerf(angle_metrics_json_files): |
| grouped_results = collections.defaultdict(list) |
| for fn in angle_metrics_json_files: |
| with open(fn) as f: |
| metrics = json.load(f) |
| for group in metrics: |
| for d in group: |
| k = (('suite', d['name']), ('renderer', d['backend'].lstrip('_')), |
| ('test', d['story']), ('metric', d['metric'].lstrip('.')), ('units', |
| d['units'])) |
| grouped_results[k].append(float(d['value'])) |
| |
| results = [] |
| for k, v in grouped_results.items(): |
| results.append({ |
| 'key': dict(k), |
| 'measurements': { |
| 'stat': [{ |
| 'value': 'mean', |
| 'measurement': statistics.mean(v), |
| }, { |
| 'value': 'stdev', |
| 'measurement': statistics.stdev(v) if len(v) > 1 else 0, |
| }], |
| }, |
| }) |
| |
| logging.info('angle_metrics to skia perf: %d entries' % len(results)) |
| |
| return results |