micro_bench 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|