// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/// Strings used for MetricPoint tag keys
const String kGithubRepoKey = 'gitRepo';

/// Strings used for MetricPoint tag keys
const String kGitRevisionKey = 'gitRevision';

/// Strings used for MetricPoint tag keys
const String kUnitKey = 'unit';

/// Strings used for MetricPoint tag keys
const String kNameKey = 'name';

/// Strings used for MetricPoint tag keys
const String kSubResultKey = 'subResult';

/// Flutter repo name.
const String kFlutterFrameworkRepo = 'flutter/flutter';

/// Engine repo name.
const String kFlutterEngineRepo = 'flutter/engine';

/// The key for the GCP project id in the credentials json.
const String kProjectId = 'project_id';

/// Timeline key in JSON.
const String kSourceTimeMicrosName = 'sourceTimeMicros';

/// The prod bucket name for Flutter's instance of Skia Perf.
const String kBucketName = 'flutter-skia-perf-prod';

/// The test bucket name for Flutter's instance of Skia Perf.
const String kTestBucketName = 'flutter-skia-perf-test';

/// JSON key for Skia Perf's git hash entry.
const String kSkiaPerfGitHashKey = 'gitHash';

/// JSON key for Skia Perf's results entry.
const String kSkiaPerfResultsKey = 'results';

/// JSON key for Skia Perf's value entry.
const String kSkiaPerfValueKey = 'value';

/// JSON key for Skia Perf's options entry.
const String kSkiaPerfOptionsKey = 'options';

/// JSON key for Skia Perf's default config entry.
const String kSkiaPerfDefaultConfig = 'default';
