trace_tree 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f3387337a1f93ab9355cc6813b288acfd9272a62
4
- data.tar.gz: 8f9398c42e22c9e156689665f08999e25fcf07e0
3
+ metadata.gz: 5ee0aca382b4cf453d1a686ee889f6dd7717bc55
4
+ data.tar.gz: 45677cc8e22cf0b570c956ef0ddb4900fab9856f
5
5
  SHA512:
6
- metadata.gz: a2d35a39fcfb8333ebc8c505ff6a518071c092e8e29fe451ec9935024b5bc12001d726c98231b1387157ebdbb3b5fdd6c8193d6a754f8eaae85eaa626a74cbbb
7
- data.tar.gz: 3b2f25e2b6e3d49788ecba875a18bbf1c70dc4c5b92822d2b57c9c979f96facb494b435f618a22db251229d7fccc686a86f9e6630f21439ce354d3cc7ba0a2bf
6
+ metadata.gz: bfa005442e08b5293d2c6a8b26eb98155e4c678b96e015ed41deb863dbefa9534f17fb09d8a7eaa75c5b6ba09f7d5420dd61ea6054f2b2b959df8898d6e2206a
7
+ data.tar.gz: beca1bd006605d215528f349ea34cf49dbece736d403b2e8402ce4261320370bc3641e748275e545def5b176b80ed534228074f7aebee73958845468b2815890
data/README.md CHANGED
@@ -43,6 +43,7 @@ end
43
43
  * `:gem => true` by default. Replace the gem paths in source_location with $GemPathN, can make the lines shorter. To see what are replaced, inspect `TraceTree::GemPaths`.
44
44
  * `:html => nil` by default. Set it true to generate a html in which a tree constructed with `<ul>`, `<li>`. (No need to set `color`).
45
45
  * `:tmp => nil` by default. Set it true or an array of string to specify a tmp file under the default tmp dir of your system. (No need to provide `file` argument)
46
+ * `:timer => nil` by default. Set it true if you want to know how much time spent in tracing and drawing tree. Notice the `file` should be appendable, otherwise the time will overwrite the tree.
46
47
 
47
48
  ### Example
48
49
 
@@ -13,7 +13,7 @@ class TraceTree
13
13
  def initialize trace_point
14
14
  @event = trace_point.event
15
15
  @method_id = trace_point.method_id
16
- @bindings = filter_call_stack trace_point.binding.of_callers!
16
+ @bindings = filter_call_stack trace_point.binding.of_callers
17
17
  end
18
18
 
19
19
  def << node
@@ -0,0 +1,27 @@
1
+ class TraceTree
2
+ class Timer
3
+
4
+ attr_reader :record
5
+
6
+ def initialize
7
+ @record = Hash.new do |h, k|
8
+ h[k] = []
9
+ end
10
+ end
11
+
12
+ def [](name)
13
+ record[name] << Time.now
14
+ end
15
+
16
+ def to_s
17
+ record.map{|k,v| "#{k}: #{ftime v[0]} ~ #{ftime v[-1]} = #{v[-1] - v[0]}"}
18
+ end
19
+
20
+ private
21
+
22
+ def ftime time
23
+ time.strftime '%F %T %L'
24
+ end
25
+
26
+ end
27
+ end
@@ -12,7 +12,7 @@ class TraceTree
12
12
  end
13
13
 
14
14
  def puts *content
15
- File.open @tmp, 'w' do |f|
15
+ File.open @tmp, 'a' do |f|
16
16
  f.puts *content
17
17
  end
18
18
  end
@@ -1,3 +1,3 @@
1
1
  class TraceTree
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/trace_tree.rb CHANGED
@@ -4,6 +4,7 @@ require 'trace_tree/node'
4
4
  require 'trace_tree/short_gem_path'
5
5
  require 'trace_tree/color'
6
6
  require 'trace_tree/tmp_file'
7
+ require 'trace_tree/timer'
7
8
 
8
9
  class Binding
9
10
  def trace_tree *log, **opt, &to_do
@@ -16,28 +17,39 @@ class TraceTree
16
17
  def initialize bi
17
18
  @bi = bi
18
19
  @trace_points = []
20
+ @timer = Timer.new
19
21
  end
20
22
 
21
23
  def generate *log, **opt, &to_do
22
- @log = dump_location *log, **opt
23
- node_class = optional_node opt
24
+ @opt = opt
25
+ @log = dump_location *log
26
+ @node_class = optional_node **opt
24
27
  @build_command = opt[:html] ? :tree_html_full : :tree_graph
25
-
26
- tp = TracePoint.trace(:call, :b_call, :raise, :c_call) do |point|
27
- trace_points << node_class.new(point) if wanted? point
28
- end
29
-
28
+ start_trace
30
29
  bi.eval('self').instance_eval &to_do
31
30
  ensure
32
- tp.disable
33
- dump_trace_tree
31
+ stop_trace
34
32
  end
35
33
 
36
34
  private
37
35
 
38
- attr_reader :bi, :trace_points, :log, :build_command
36
+ attr_reader :bi, :trace_points, :log, :build_command, :timer, :opt
37
+
38
+ def start_trace
39
+ timer[:to_do]
40
+ @tp = TracePoint.trace(:call, :b_call, :raise, :c_call) do |point|
41
+ trace_points << @node_class.new(point) if wanted? point
42
+ end
43
+ end
44
+
45
+ def stop_trace
46
+ return unless @tp
47
+ @tp.disable
48
+ timer[:to_do]
49
+ dump_trace_tree
50
+ end
39
51
 
40
- def dump_location *log, **opt
52
+ def dump_location *log
41
53
  return TmpFile.new opt[:tmp] if opt[:tmp]
42
54
  log.empty? ? STDOUT : log[0]
43
55
  end
@@ -50,8 +62,11 @@ class TraceTree
50
62
  end
51
63
 
52
64
  def dump_trace_tree
65
+ timer[:tree]
53
66
  tree = sort(trace_points).send build_command
67
+ timer[:tree]
54
68
  log.puts tree
69
+ log.puts timer.to_s if opt[:timer]
55
70
  end
56
71
 
57
72
  def wanted? trace_point
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trace_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - ken
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-16 00:00:00.000000000 Z
11
+ date: 2017-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -115,6 +115,7 @@ files:
115
115
  - lib/trace_tree/gem_paths.rb
116
116
  - lib/trace_tree/node.rb
117
117
  - lib/trace_tree/short_gem_path.rb
118
+ - lib/trace_tree/timer.rb
118
119
  - lib/trace_tree/tmp_file.rb
119
120
  - lib/trace_tree/tree_graphable.rb
120
121
  - lib/trace_tree/tree_htmlable.rb
@@ -140,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
141
  version: '0'
141
142
  requirements: []
142
143
  rubyforge_project:
143
- rubygems_version: 2.6.8
144
+ rubygems_version: 2.5.2
144
145
  signing_key:
145
146
  specification_version: 4
146
147
  summary: Print TracePoint(normal ruby call, block call, raise call, throw call) in