copiousfreetime / hitimes

a fast, high resolution timer library for recording performance metrics

This URL has Read+Write access

hitimes / README
100644 135 lines (92 sloc) 3.681 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
== hitimes
 
* Homepage[http://copiousfreetime.rubyforge.org/hitimes]
* {Rubyforge project}[http://rubyforge.org/projects/copiousfreetime/]
* email jeremy at copiousfreetime dot org
* git clone url git://github.com/copiousfreetime/hitimes.git
 
== INSTALL
 
* gem install hitimes
 
== DESCRIPTION
 
Hitimes is a fast, high resolution timer library for recording
performance metrics. It uses the appropriate C method calls for each
system to get the highest granularity time increments possible.
 
It currently supports any of the following systems:
 
* any system with the POSIX call <tt>clock_gettime()</tt>,
* Mac OS X
* Windows
 
Using Hitimes can be faster than using a series of +Time.new+ calls, and
it will have a much higher granularity. It is definitely faster than
using +Process.times+.
 
== SYNOPSIS
 
=== Interval
 
Use Hitimes::Interval to calculate only the duration of a block of code
 
  duration = Hitimes::Interval.measure do
               # some operation ...
             end
 
  puts duration
 
=== TimedMetric
 
Use a Hitimes::TimedMetric to calculate statistics about an iterative operation
 
  timed_metric = Hitimes::TimedMetric.new('operation on items')
 
Explicitly use +start+ and +stop+:
 
  collection.each do |item|
    timed_metric.start
    # .. do something with item
    timed_metric.stop
  end
 
Or use the block. In TimedMetric the return value of +measure+ is the return
value of the block
 
  collection.each do |item|
    result_of_do_something = timed_metric.measure { do_something( item ) }
  end
 
And then look at the stats
 
  puts timed_metric.mean
  puts timed_metric.max
  puts timed_metric.min
  puts timed_metric.stddev
  puts timed_metric.rate
 
=== ValueMetric
 
Use a Hitimes::ValueMetric to calculate statistics about measured samples
 
  value_metric = Hitimes::ValueMetric.new( 'size of thing' )
  loop do
    # ... do stuff changing sizes of 'thing'
    value_metric.measure( thing.size )
    # ... do other stuff that may change size of thing
  end
 
  puts value_metric.mean
  puts value_metric.max
  puts value_metric.min
  puts value_metric.stddev
  puts value_metric.rate
 
 
=== TimedValueMetric
 
Use a Hitimes::TimedValueMetric to calculate statistics about batches of samples
 
  timed_value_metric = Hitimes::TimedValueMetric.new( 'batch times' )
  loop do
    batch = ... # get a batch of things
    timed_value_metric.start
    # .. do something with batch
    timed_value_metric.stop( batch.size )
  end
 
  puts timed_value_metric.rate
 
  puts timed_value_metric.timed_stats.mean
  puts timed_value_metric.timed_stats.max
  puts timed_value_metric.timed_stats.min
  puts timed_value_metric.timed_stats.stddev
 
  puts timed_value_metric.value_stats.mean
  puts timed_value_metric.value_stats.max
  puts timed_value_metric.value_stats.min
  puts timed_value_metric.value_stats.stddev
 
 
== CHANGES
 
Read the HISTORY file.
 
== CREDITS
 
* Bruce Williams for suggesting the idea
 
== ISC License
 
Copyright (c) 2008 Jeremy Hinegardner
 
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
 
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.