36 lines
721 B
Ruby
36 lines
721 B
Ruby
# typed: strict
|
|
# A simple stopwatch utility for measuring elapsed time
|
|
class Stopwatch
|
|
extend T::Sig
|
|
|
|
sig { params(start_time: T.any(Time, ActiveSupport::TimeWithZone)).void }
|
|
def initialize(start_time)
|
|
@start_time = T.let(start_time, T.any(Time, ActiveSupport::TimeWithZone))
|
|
end
|
|
|
|
sig { returns(Stopwatch) }
|
|
def self.start
|
|
new(Time.current)
|
|
end
|
|
|
|
sig { returns(Float) }
|
|
def elapsed
|
|
Time.current - @start_time
|
|
end
|
|
|
|
sig { returns(String) }
|
|
def elapsed_ms
|
|
"#{(elapsed * 1000).round(1)}ms"
|
|
end
|
|
|
|
sig { returns(String) }
|
|
def elapsed_s
|
|
"#{sprintf("%.3f", elapsed)}s"
|
|
end
|
|
|
|
sig { returns(T.any(Time, ActiveSupport::TimeWithZone)) }
|
|
def start_time
|
|
@start_time
|
|
end
|
|
end
|