hotch 0.0.1 → 0.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7b5d9d923cc25d830ae5bdf7c250767e5c036d9a
4
- data.tar.gz: 2600d46dd7b9c7b2554fe3a28e20fe2ed9ac26b6
3
+ metadata.gz: 38cc02398ab2755f8c90da8ae6ea973db46de9b7
4
+ data.tar.gz: 938117da7ad53717ba52d5507c9b4b8575317068
5
5
  SHA512:
6
- metadata.gz: f1f8a1519c968110d4696b7476a98dd0444a3681ec8d93b7c103d34de1f0817925661c9868907fa6f3b85095d7efdc2bb119ff0f39e163e778795e6eade66091
7
- data.tar.gz: a46d658d2b27f15889c0a936c0d8abdb6896d31c54a66aa525fadc0f0d1cfce48784d7e9536119d99bdf7039b83d4c2ab6e058e982c7d1b3180b15d3e01e916e
6
+ metadata.gz: 91eaa4af1f66add4591182e39b47192325b5842e7bb87176aba19491e071880394d6421288590943683f2103e970e143f07bd535b3eb758fc393ba1919187f17
7
+ data.tar.gz: 485b40654f50784ec3e08483fac13b4b01b41fefa47790e8d25abf9cf99d32ab720f49169517cda9b662de3ddd72128415c52054b28f1c0850b2313be4e1a8c2
data/README.md CHANGED
@@ -27,10 +27,40 @@ Or install it yourself as:
27
27
 
28
28
  ## Usage
29
29
 
30
- $ ruby -rhotch my_program.rb
30
+ ### Profile complete program
31
+
32
+ $ ruby -rhotch/run my_program.rb
31
33
  Profile SVG: /tmp/hotch.my_program20150104-17330-18t4171/profile.svg
32
34
  $ view /tmp/hotch.my_program20150104-17330-18t4171/profile.svg
33
35
 
36
+ ### Profile blocks in your program
37
+
38
+ ```ruby
39
+ require 'hotch'
40
+
41
+ def expensive_method
42
+ # ...
43
+ end
44
+
45
+ Hotch() do
46
+ 1000.times do
47
+ expensive_method
48
+ end
49
+ end
50
+
51
+ Hotch(aggregate: false) do
52
+ 1000.times do
53
+ # this run is not aggregated
54
+ end
55
+ end
56
+
57
+ Hotch() do
58
+ 1000.times do
59
+ # aggregated again
60
+ end
61
+ end
62
+ ```
63
+
34
64
  ### Auto-view
35
65
 
36
66
  Set envvar `HOTCH_VIEWER` to enable auto-view after profiling.
@@ -0,0 +1,23 @@
1
+ require 'hotch'
2
+
3
+ COUNT = ENV.fetch('COUNT', 10_000)
4
+
5
+ def foo
6
+ "x" * 23
7
+ end
8
+
9
+ def bar
10
+ ["x"] * 23
11
+ end
12
+
13
+ Hotch(aggregate: false) do
14
+ COUNT.times do
15
+ foo
16
+ end
17
+ end
18
+
19
+ Hotch() do
20
+ COUNT.times do
21
+ bar
22
+ end
23
+ end
data/lib/hotch.rb CHANGED
@@ -1,32 +1,92 @@
1
1
  require 'stackprof'
2
2
  require 'tmpdir'
3
3
 
4
- HOTCH_VIEWER = ENV['HOTCH_VIEWER']
4
+ class Hotch
5
+ attr_reader :name
5
6
 
6
- NAME = $0.gsub(/\W/, '_')
7
+ def initialize(name)
8
+ @name = name
9
+ @reports = []
10
+ end
7
11
 
8
- StackProf.start
12
+ def start(*args)
13
+ StackProf.start(*args) unless StackProf.running?
14
+ end
9
15
 
10
- def system!(*args)
11
- system(*args) or raise "system call failed: #{args.join(' ')}"
12
- end
16
+ def stop
17
+ if StackProf.running?
18
+ StackProf.stop
19
+ @reports << StackProf::Report.new(results)
20
+ end
21
+ end
22
+
23
+ def run(*args)
24
+ start(*args)
25
+ yield
26
+ ensure
27
+ stop
28
+ end
29
+
30
+ def results
31
+ StackProf.results
32
+ end
33
+
34
+ def report
35
+ report = @reports.inject(:+) or return
36
+
37
+ dir = Dir.mktmpdir("hotch.#{name}.")
38
+ dump = File.open(File.join(dir, "profile.dump"), "wb")
39
+ svg = File.join(File.join(dir, "profile.svg"))
40
+
41
+
42
+ report.print_graphviz(nil, dump)
13
43
 
14
- at_exit do
15
- StackProf.stop
44
+ dump.close
16
45
 
17
- dir = Dir.mktmpdir("hotch.#{NAME}")
18
- dump = File.open(File.join(dir, "profile.dump"), "wb")
19
- svg = File.join(File.join(dir, "profile.svg"))
46
+ system! "dot", "-Tsvg", "-o", svg, dump.path
20
47
 
21
- StackProf::Report.new(StackProf.results).print_graphviz(nil, dump)
48
+ yield svg
49
+ end
50
+
51
+ def system!(*args)
52
+ Kernel.system(*args) or raise "system call failed: #{args.join(' ')}"
53
+ end
54
+
55
+ def report_at_exit(viewer=ENV['HOTCH_VIEWER'])
56
+ return if defined? @at_exit_installed
57
+
58
+ at_exit do
59
+ stop
60
+
61
+ report do |svg|
62
+ puts "Profile SVG: #{svg}"
22
63
 
23
- dump.close
64
+ if viewer
65
+ system viewer, svg
66
+ end
67
+ end
68
+ end
24
69
 
25
- system! "dot", "-Tsvg", "-o", svg, dump.path
70
+ @at_exit_installed = true
71
+ end
72
+
73
+ private
74
+
75
+ def name
76
+ @name.gsub(/\W+/, '_')
77
+ end
78
+ end
26
79
 
27
- puts "Profile SVG: #{svg}"
80
+ def Hotch(aggregate: true)
81
+ hotch = if aggregate
82
+ $hotch ||= Hotch.new($0)
83
+ else
84
+ caller = Kernel.caller_locations(1).first
85
+ Hotch.new("#$0:#{caller.path}:#{caller.lineno}")
86
+ end
28
87
 
29
- if viewer = HOTCH_VIEWER
30
- system! viewer, svg
88
+ hotch.report_at_exit
89
+ hotch.run do
90
+ yield
31
91
  end
32
92
  end
data/lib/hotch/run.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'hotch'
2
+
3
+ viewer = ENV['HOTCH_VIEWER']
4
+
5
+ hotch = Hotch.new($0)
6
+ hotch.start
7
+
8
+ hotch.report_at_exit(viewer)
data/lib/hotch/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hotch
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hotch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Suschlik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-04 00:00:00.000000000 Z
11
+ date: 2015-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: stackprof
@@ -64,8 +64,10 @@ files:
64
64
  - LICENSE.txt
65
65
  - README.md
66
66
  - Rakefile
67
+ - examples/simple.rb
67
68
  - hotch.gemspec
68
69
  - lib/hotch.rb
70
+ - lib/hotch/run.rb
69
71
  - lib/hotch/version.rb
70
72
  homepage: https://github.com/splattael/hotch
71
73
  licenses:
@@ -87,9 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
89
  version: '0'
88
90
  requirements: []
89
91
  rubyforge_project:
90
- rubygems_version: 2.4.5
92
+ rubygems_version: 2.2.2
91
93
  signing_key:
92
94
  specification_version: 4
93
95
  summary: Profile helper
94
96
  test_files: []
95
- has_rdoc: