fireblade-ecs/Sources/FirebladeECS/Timer.swift

51 lines
1.0 KiB
Swift

//
// Timer.swift
// FirebladeECS
//
// Created by Christian Treffs on 28.10.17.
//
import Darwin.Mach.mach_time
public struct Timer {
private let numerator: UInt64
private let denominator: UInt64
private var startTime: UInt64 = 0
private var stopTime: UInt64 = 0
public init() {
var timeBaseInfo = mach_timebase_info.init(numer: 0, denom: 0 )
let success: kern_return_t = mach_timebase_info(&timeBaseInfo)
assert(KERN_SUCCESS == success)
numerator = UInt64(timeBaseInfo.numer)
denominator = UInt64(timeBaseInfo.denom)
}
public mutating func start() {
startTime = mach_absolute_time()
}
public mutating func stop() {
stopTime = mach_absolute_time()
}
public mutating func reset() {
startTime = 0
stopTime = 0
}
public var nanoSeconds: UInt64 {
return ((stopTime - startTime) * numerator) / denominator
}
public var microSeconds: Double {
return Double(nanoSeconds) / 1.0e3
}
public var milliSeconds: Double {
return Double(nanoSeconds) / 1.0e6
}
public var seconds: Double {
return Double(nanoSeconds) / 1.0e9
}
}