tick-tock¶ ↑
DESCRIPTION¶ ↑
A gem that provides a simple mechanism for timing and reporting how long your code takes to run. Benchmark is great but, for simple timing needs, I prefer a narrower API. Often, I just want to know how long something took without having to add temporary variables and fuss over the output.
INSTALL¶ ↑
gem install tick-tock
FEATURES¶ ↑
-
Easy API
-
Flexible API
-
Simple, easy to read output
-
Handles milliseconds, seconds, minutes, hours, days, weeks, and years
USAGE¶ ↑
Usage Scenario 0¶ ↑
$> TickTock.time
{ sleep 4 }
=> 4s 0ms
Usage Scenario 1¶ ↑
For simple, everyday use.
t = TickTock.time do # do stuff sleep 10 end puts "That took #{t}" That took 10s 0ms t = TickTock.time do sleep 314503737247018 end puts "That took #{t}" That took 10000y 12w 5d 13h 14m 7s 18ms
Usage Scenario 2¶ ↑
TickTock.time
returns a TickTock::Duration
. These can be added together like so:
thing1 = TickTock.time do sleep 10 end puts "Thing 1 took: #{thing1}" thing2 = TickTock.time do sleep 55 end puts "Thing 2 took: #{thing2}" puts "In total, that took #{thing1 + thing2}" Thing 1 took: 10s 0ms Thing 2 took: 55s 0ms In total, that took 1m 5s 0ms
Usage Scenario 3 - collecting parameter¶ ↑
If you'd rather, you can get a fresh instance of a TickTock::Duration
with a call to fresh. Then, you can pass the duration into TickTock::time
. This might be useful if you want to pass around a duration to other methods and accumualte timings. Do this, like so:
total = TickTock.fresh thing1 = TickTock.time(total) do sleep 10 end puts "Thing 1 took #{thing1}" thing2 = TickTock.time(total) do sleep 55 end puts "Thing 2 took #{thing2}" puts "In total, that took #{t}" Thing 1 took: 10s 0ms Thing 2 took: 55s 0ms In total, that took 1m 5s 0ms
Usage Scenario 4 - running total¶ ↑
Or, you might want to accumulate a running total like so:
total = TickTock.fresh total += TickTock.time do sleep 4 end total += TickTock.time do sleep 15 end total += TickTock.time do sleep 19 end puts "In total, that took #{t}" In total, that took 38s 0ms
Usage Scenario 5 - using duration on it's own¶ ↑
duraton = TickTock::Duration.new(314503737247018) puts "That's a long time: #{duration}" That's a long time: 10000y 12w 5d 13h 14m 7s 18ms duration = TickTock::Duration.from_start_to_finish(4.years.ago, Time.now) puts "That's not so long: #{duration}" That's not so long: 4y 0w 0d 0h 0m 0s 0s duration = TickTock::Duration.from_pieces(10, 20, 30) puts "Pieces example 1: #{duration}" Pieces example 1: 30m 20s 10ms duration = TickTock::Duration.from_pieces(5, 10, 15, 20, 25, 30, 35) puts "Pieces example 2: #{duration}" Pieces example 2: 35y 30w 25d 20h 15m 10s 5ms
Example Duration Output¶ ↑
to_s method only outputs as much as needed and in a brief, easy to understand format
With a duration of 5 milliseconds:
5ms
With a duration of 45 second, 5 milliseconds:
45s 5ms
With a duration of 5 minutes, 45 seconds, and 15 milliseconds
5m 45s 15ms
With a duration of 4 hours, 5 minutes, 45 seconds, and 15 milliseconds
4h 5m 45s 15ms
With a duration of 6 days, 4 hours, 5 minutes, 45 seconds, and 15 milliseconds
6d 4h 5m 45s 15ms
With a duration of 9 weeks, 6 days, 4 hours, 5 minutes, 45 seconds, and 15 milliseconds
9w 6d 4h 5m 45s 15ms
With a duration of 1014 years, 9 weeks, 6 days, 4 hours, 5 minutes, 45 seconds, and 15 milliseconds
1014y 9w 6d 4h 5m 45s 15ms
Contributing to tick-tock¶ ↑
Feel free to request a feature, point out a bug, or fork/etc.
-
Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
-
Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
-
Fork the project.
-
Start a feature/bugfix branch.
-
Commit and push until you are happy with your contribution.
-
Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
-
Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
Copyright¶ ↑
Copyright © 2012 Ian Goodrich. See LICENSE.txt for further details.