toSkiaPerfJson static method

Map<String, dynamic> toSkiaPerfJson(
  1. List<SkiaPerfPoint> points
)

Convert a list of SkiaPoints with the same git repo and git revision into a single json file in the Skia perf format.

The list must be non-empty.

Implementation

static Map<String, dynamic> toSkiaPerfJson(List<SkiaPerfPoint> points) {
  assert(points.isNotEmpty);
  assert(() {
    for (final SkiaPerfPoint p in points) {
      if (p.githubRepo != points[0].githubRepo ||
          p.gitHash != points[0].gitHash) {
        return false;
      }
    }
    return true;
  }(), 'All points must have same githubRepo and gitHash');

  final Map<String, dynamic> results = <String, dynamic>{};
  for (final SkiaPerfPoint p in points) {
    final Map<String, dynamic> subResultJson = p._toSubResultJson();
    if (results[p.testName] == null) {
      results[p.testName] = <String, dynamic>{
        kSkiaPerfDefaultConfig: subResultJson,
      };
    } else {
      // Flutter currently doesn't support having the same name but different
      // options/configurations. If this actually happens in the future, we
      // probably can use different values of config (currently there's only
      // one kSkiaPerfDefaultConfig) to resolve the conflict.
      assert(results[p.testName][kSkiaPerfDefaultConfig][kSkiaPerfOptionsKey]
              .toString() ==
          subResultJson[kSkiaPerfOptionsKey].toString());
      assert(
          results[p.testName][kSkiaPerfDefaultConfig][p.subResult] == null);
      results[p.testName][kSkiaPerfDefaultConfig][p.subResult] = p.value;
    }
  }

  return <String, dynamic>{
    kSkiaPerfGitHashKey: points[0].gitHash,
    kSkiaPerfResultsKey: results,
  };
}