func stopTrackingObjects()

in Sources/_TracingBenchmarkTools/DriverUtils.swift [340:394]


func stopTrackingObjects(_: UnsafePointer<CChar>) -> Int

#endif

public final class Timer {
    #if os(Linux)
    public typealias TimeT = timespec

    public init() {}

    public func getTime() -> TimeT {
        var ts = timespec(tv_sec: 0, tv_nsec: 0)
        clock_gettime(CLOCK_REALTIME, &ts)
        return ts
    }

    public func getTimeAsInt() -> UInt64 {
        UInt64(getTime().tv_nsec)
    }

    public func diffTimeInNanoSeconds(from start: TimeT, to end: TimeT) -> UInt64 {
        let oneSecond = 1_000_000_000 // ns
        var elapsed = timespec(tv_sec: 0, tv_nsec: 0)
        if end.tv_nsec - start.tv_nsec < 0 {
            elapsed.tv_sec = end.tv_sec - start.tv_sec - 1
            elapsed.tv_nsec = end.tv_nsec - start.tv_nsec + oneSecond
        } else {
            elapsed.tv_sec = end.tv_sec - start.tv_sec
            elapsed.tv_nsec = end.tv_nsec - start.tv_nsec
        }
        return UInt64(elapsed.tv_sec) * UInt64(oneSecond) + UInt64(elapsed.tv_nsec)
    }

    #else
    public typealias TimeT = UInt64
    var info = mach_timebase_info_data_t(numer: 0, denom: 0)

    public init() {
        mach_timebase_info(&info)
    }

    public func getTime() -> TimeT {
        mach_absolute_time()
    }

    public func getTimeAsInt() -> UInt64 {
        UInt64(getTime())
    }

    public func diffTimeInNanoSeconds(from start: TimeT, to end: TimeT) -> UInt64 {
        let elapsed = end - start
        return elapsed * UInt64(info.numer) / UInt64(info.denom)
    }
    #endif
}