in Sources/SwiftBenchmarkTools/DriverUtils.swift [326:382]
func startTrackingObjects(_: UnsafePointer<CChar>) -> Void
@_silgen_name("_swift_leaks_stopTrackingObjects")
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
}