micro_bench 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +25 -2
- data/lib/micro_bench/version.rb +1 -1
- data/lib/micro_bench.rb +12 -1
- data/spec/micro_bench/micro_bench_spec.rb +26 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8c91db76af4392989e7cef3b27ab9bd4b421c77
|
4
|
+
data.tar.gz: 609656197b6121fab78832159497579b63c0b877
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 295ec1527e81d7c5954dd949cb084b65c3c634bccacaed32a2ca16b8e86e5d4d1bb1ec6f759a523b201a4023d0b0e1d54d69e09c44f9a999240fece436b90306
|
7
|
+
data.tar.gz: d7d06b06eb69cc307900a9a3e6833815d61d7fa694b7830456d9d079560b3f13ec8395c30e0f041debfebd939417aad28adbbf330504e462f333dfd13ac4c570
|
data/README.md
CHANGED
@@ -81,13 +81,36 @@ MicroBench.duration("timer1")
|
|
81
81
|
# 1.628093000501394
|
82
82
|
```
|
83
83
|
|
84
|
+
### Multiple starts
|
85
|
+
|
86
|
+
Calling `.start` multiple times with the same `bench_id` (or none) will cause a "restart" of the given benchmark.
|
87
|
+
|
84
88
|
### Thread safety
|
85
89
|
|
86
90
|
A benchmark is tied to a thread, ensuring that `MicroBench` is thread-safe. At the same time, it doesn't allow to share a benchmark between multiple threads.
|
87
91
|
|
88
|
-
###
|
92
|
+
### Methods isolation
|
93
|
+
|
94
|
+
A benchmark is tied to its calling method so the following code will output 2 separated durations for `method_1` and `method_2`. This prevent collisions when using `MicroBench` in a large codebase.
|
89
95
|
|
90
|
-
|
96
|
+
```ruby
|
97
|
+
def method_1
|
98
|
+
MicroBench.start
|
99
|
+
method_2
|
100
|
+
# Do something
|
101
|
+
MicroBench.stop
|
102
|
+
puts "method_1 duration : #{MicroBench.duration}"
|
103
|
+
end
|
104
|
+
|
105
|
+
def method_2
|
106
|
+
MicroBench.start
|
107
|
+
# Do something
|
108
|
+
MicroBench.stop
|
109
|
+
puts "method_2 duration : #{MicroBench.duration}"
|
110
|
+
end
|
111
|
+
|
112
|
+
method_1
|
113
|
+
```
|
91
114
|
|
92
115
|
## Versioning
|
93
116
|
|
data/lib/micro_bench/version.rb
CHANGED
data/lib/micro_bench.rb
CHANGED
@@ -62,7 +62,18 @@ module MicroBench
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def benchmark_key(bench_id = nil)
|
65
|
-
"#{
|
65
|
+
"#{thread_key}||#{caller_key}||#{bench_id}"
|
66
|
+
end
|
67
|
+
|
68
|
+
def thread_key
|
69
|
+
Thread.current.object_id
|
70
|
+
end
|
71
|
+
|
72
|
+
def caller_key
|
73
|
+
caller_location = caller_locations(2..4).detect do |loc|
|
74
|
+
!loc.absolute_path.include?(__FILE__)
|
75
|
+
end
|
76
|
+
"#{caller_location.absolute_path}:#{caller_location.label}"
|
66
77
|
end
|
67
78
|
end
|
68
79
|
end
|
@@ -59,9 +59,35 @@ describe MicroBench do
|
|
59
59
|
Thread.current[:expected] = 0.01 * 2
|
60
60
|
Thread.current[:duration] = described_class.duration
|
61
61
|
end
|
62
|
+
|
62
63
|
[t1, t2].each do |t|
|
63
64
|
t.join
|
64
65
|
expect(t[:duration].round(2)).to eq(t[:expected])
|
65
66
|
end
|
66
67
|
end
|
68
|
+
|
69
|
+
it "prevents cross-method collisions" do
|
70
|
+
test_klass = Class.new do
|
71
|
+
attr_accessor :method_1_duration
|
72
|
+
attr_accessor :method_2_duration
|
73
|
+
def method_1
|
74
|
+
MicroBench.start
|
75
|
+
method_2
|
76
|
+
sleep(0.01)
|
77
|
+
MicroBench.stop
|
78
|
+
@method_1_duration = MicroBench.duration
|
79
|
+
end
|
80
|
+
def method_2
|
81
|
+
MicroBench.start
|
82
|
+
sleep(0.01)
|
83
|
+
MicroBench.stop
|
84
|
+
@method_2_duration = MicroBench.duration
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
subject = test_klass.new
|
89
|
+
subject.method_1
|
90
|
+
expect(subject.method_1_duration).to_not eq(subject.method_2_duration)
|
91
|
+
end
|
92
|
+
|
67
93
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: micro_bench
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyrille Courtière
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: byebug
|