File: Metrics.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (43 lines) | stat: -rw-r--r-- 1,416 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021 Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See https://swift.org/LICENSE.txt for license information
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

import Foundation

///A metric value which is either a duration, a number of bytes, or a checksum.
public typealias MetricValue = BenchmarkResults.Metric.Value

/// A generic, named metric.
public protocol BenchmarkMetric {
    /// A textual identifier for the metric.
    static var identifier: String { get }
    /// A human-friendly display name for the metric.
    static var displayName: String { get }
    /// The result of the metric.
    var result: MetricValue? { get }
}

/// A metric which could dynamically provide a custom id and name.
public protocol DynamicallyIdentifiableMetric: BenchmarkMetric {
    var identifier: String { get }
    var displayName: String { get }
}

/// A metric that runs over a period of time and needs to be started and stopped to produce its result.
public protocol BenchmarkBlockMetric: BenchmarkMetric {
    func begin() -> Void
    func end() -> Void
}

/// A metric result which can be encoded.
public struct BenchmarkResult: Encodable {
    public var identifier: String
    public var displayName: String
    public var result: MetricValue?
}