ruby-prof 0.17.0 → 0.18.0

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.
Files changed (185) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +500 -482
  3. data/LICENSE +24 -24
  4. data/README.rdoc +487 -485
  5. data/Rakefile +113 -113
  6. data/bin/ruby-prof +345 -345
  7. data/bin/ruby-prof-check-trace +45 -45
  8. data/examples/flat.txt +50 -50
  9. data/examples/graph.dot +84 -84
  10. data/examples/graph.html +823 -823
  11. data/examples/graph.txt +139 -139
  12. data/examples/multi.flat.txt +23 -23
  13. data/examples/multi.graph.html +760 -760
  14. data/examples/multi.grind.dat +114 -114
  15. data/examples/multi.stack.html +547 -547
  16. data/examples/stack.html +547 -547
  17. data/ext/ruby_prof/extconf.rb +68 -68
  18. data/ext/ruby_prof/rp_call_info.c +425 -425
  19. data/ext/ruby_prof/rp_call_info.h +53 -53
  20. data/ext/ruby_prof/rp_measure.c +40 -40
  21. data/ext/ruby_prof/rp_measure.h +45 -45
  22. data/ext/ruby_prof/rp_measure_allocations.c +76 -76
  23. data/ext/ruby_prof/rp_measure_cpu_time.c +136 -136
  24. data/ext/ruby_prof/rp_measure_gc_runs.c +73 -73
  25. data/ext/ruby_prof/rp_measure_gc_time.c +60 -60
  26. data/ext/ruby_prof/rp_measure_memory.c +77 -77
  27. data/ext/ruby_prof/rp_measure_process_time.c +71 -71
  28. data/ext/ruby_prof/rp_measure_wall_time.c +45 -45
  29. data/ext/ruby_prof/rp_method.c +630 -636
  30. data/ext/ruby_prof/rp_method.h +75 -75
  31. data/ext/ruby_prof/rp_stack.c +173 -173
  32. data/ext/ruby_prof/rp_stack.h +63 -63
  33. data/ext/ruby_prof/rp_thread.c +277 -276
  34. data/ext/ruby_prof/rp_thread.h +27 -27
  35. data/ext/ruby_prof/ruby_prof.c +794 -774
  36. data/ext/ruby_prof/ruby_prof.h +60 -59
  37. data/ext/ruby_prof/vc/ruby_prof.sln +20 -21
  38. data/ext/ruby_prof/vc/{ruby_prof_20.vcxproj → ruby_prof.vcxproj} +31 -0
  39. data/lib/ruby-prof.rb +68 -68
  40. data/lib/ruby-prof/aggregate_call_info.rb +76 -76
  41. data/lib/ruby-prof/assets/call_stack_printer.css.html +116 -116
  42. data/lib/ruby-prof/assets/call_stack_printer.js.html +384 -384
  43. data/lib/ruby-prof/call_info.rb +115 -115
  44. data/lib/ruby-prof/call_info_visitor.rb +40 -40
  45. data/lib/ruby-prof/compatibility.rb +179 -178
  46. data/lib/ruby-prof/method_info.rb +121 -121
  47. data/lib/ruby-prof/printers/abstract_printer.rb +104 -103
  48. data/lib/ruby-prof/printers/call_info_printer.rb +41 -41
  49. data/lib/ruby-prof/printers/call_stack_printer.rb +265 -265
  50. data/lib/ruby-prof/printers/call_tree_printer.rb +143 -143
  51. data/lib/ruby-prof/printers/dot_printer.rb +132 -132
  52. data/lib/ruby-prof/printers/flat_printer.rb +70 -70
  53. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +83 -83
  54. data/lib/ruby-prof/printers/graph_html_printer.rb +249 -249
  55. data/lib/ruby-prof/printers/graph_printer.rb +116 -116
  56. data/lib/ruby-prof/printers/multi_printer.rb +84 -84
  57. data/lib/ruby-prof/profile.rb +26 -26
  58. data/lib/ruby-prof/profile/exclude_common_methods.rb +207 -201
  59. data/lib/ruby-prof/profile/legacy_method_elimination.rb +50 -49
  60. data/lib/ruby-prof/rack.rb +174 -174
  61. data/lib/ruby-prof/task.rb +147 -147
  62. data/lib/ruby-prof/thread.rb +35 -35
  63. data/lib/ruby-prof/version.rb +3 -3
  64. data/lib/unprof.rb +10 -10
  65. data/ruby-prof.gemspec +58 -58
  66. data/test/abstract_printer_test.rb +53 -0
  67. data/test/aggregate_test.rb +136 -136
  68. data/test/basic_test.rb +128 -128
  69. data/test/block_test.rb +74 -74
  70. data/test/call_info_test.rb +78 -78
  71. data/test/call_info_visitor_test.rb +31 -31
  72. data/test/duplicate_names_test.rb +32 -32
  73. data/test/dynamic_method_test.rb +55 -55
  74. data/test/enumerable_test.rb +21 -21
  75. data/test/exceptions_test.rb +24 -16
  76. data/test/exclude_methods_test.rb +146 -146
  77. data/test/exclude_threads_test.rb +53 -53
  78. data/test/fiber_test.rb +79 -79
  79. data/test/issue137_test.rb +63 -63
  80. data/test/line_number_test.rb +80 -80
  81. data/test/measure_allocations_test.rb +26 -26
  82. data/test/measure_cpu_time_test.rb +212 -213
  83. data/test/measure_gc_runs_test.rb +32 -32
  84. data/test/measure_gc_time_test.rb +36 -36
  85. data/test/measure_memory_test.rb +33 -33
  86. data/test/measure_process_time_test.rb +61 -63
  87. data/test/measure_wall_time_test.rb +255 -255
  88. data/test/method_elimination_test.rb +84 -84
  89. data/test/module_test.rb +45 -45
  90. data/test/multi_printer_test.rb +104 -104
  91. data/test/no_method_class_test.rb +15 -15
  92. data/test/pause_resume_test.rb +166 -166
  93. data/test/prime.rb +54 -54
  94. data/test/printers_test.rb +275 -275
  95. data/test/printing_recursive_graph_test.rb +127 -127
  96. data/test/rack_test.rb +157 -157
  97. data/test/recursive_test.rb +215 -215
  98. data/test/singleton_test.rb +38 -38
  99. data/test/stack_printer_test.rb +77 -78
  100. data/test/stack_test.rb +138 -138
  101. data/test/start_stop_test.rb +112 -112
  102. data/test/test_helper.rb +267 -275
  103. data/test/thread_test.rb +187 -187
  104. data/test/unique_call_path_test.rb +202 -202
  105. data/test/yarv_test.rb +55 -55
  106. metadata +17 -96
  107. data/doc/LICENSE.html +0 -115
  108. data/doc/README_rdoc.html +0 -637
  109. data/doc/Rack.html +0 -96
  110. data/doc/Rack/RubyProf.html +0 -233
  111. data/doc/Rack/RubyProf/RackProfiler.html +0 -343
  112. data/doc/RubyProf.html +0 -974
  113. data/doc/RubyProf/AbstractPrinter.html +0 -625
  114. data/doc/RubyProf/AggregateCallInfo.html +0 -552
  115. data/doc/RubyProf/CallInfo.html +0 -579
  116. data/doc/RubyProf/CallInfoPrinter.html +0 -121
  117. data/doc/RubyProf/CallInfoVisitor.html +0 -199
  118. data/doc/RubyProf/CallStackPrinter.html +0 -1127
  119. data/doc/RubyProf/CallTreePrinter.html +0 -725
  120. data/doc/RubyProf/Cmd.html +0 -637
  121. data/doc/RubyProf/DeprecationWarnings.html +0 -148
  122. data/doc/RubyProf/DotPrinter.html +0 -258
  123. data/doc/RubyProf/FlatPrinter.html +0 -164
  124. data/doc/RubyProf/FlatPrinterWithLineNumbers.html +0 -210
  125. data/doc/RubyProf/GraphHtmlPrinter.html +0 -558
  126. data/doc/RubyProf/GraphPrinter.html +0 -140
  127. data/doc/RubyProf/MethodInfo.html +0 -676
  128. data/doc/RubyProf/MultiPrinter.html +0 -574
  129. data/doc/RubyProf/Profile.html +0 -908
  130. data/doc/RubyProf/Profile/ExcludeCommonMethods.html +0 -411
  131. data/doc/RubyProf/Profile/LegacyMethodElimination.html +0 -158
  132. data/doc/RubyProf/ProfileTask.html +0 -491
  133. data/doc/RubyProf/Thread.html +0 -275
  134. data/doc/created.rid +0 -33
  135. data/doc/css/fonts.css +0 -167
  136. data/doc/css/rdoc.css +0 -590
  137. data/doc/examples/flat_txt.html +0 -139
  138. data/doc/examples/graph_html.html +0 -910
  139. data/doc/examples/graph_txt.html +0 -248
  140. data/doc/fonts/Lato-Light.ttf +0 -0
  141. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  142. data/doc/fonts/Lato-Regular.ttf +0 -0
  143. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  144. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  145. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  146. data/doc/images/add.png +0 -0
  147. data/doc/images/arrow_up.png +0 -0
  148. data/doc/images/brick.png +0 -0
  149. data/doc/images/brick_link.png +0 -0
  150. data/doc/images/bug.png +0 -0
  151. data/doc/images/bullet_black.png +0 -0
  152. data/doc/images/bullet_toggle_minus.png +0 -0
  153. data/doc/images/bullet_toggle_plus.png +0 -0
  154. data/doc/images/date.png +0 -0
  155. data/doc/images/delete.png +0 -0
  156. data/doc/images/find.png +0 -0
  157. data/doc/images/loadingAnimation.gif +0 -0
  158. data/doc/images/macFFBgHack.png +0 -0
  159. data/doc/images/package.png +0 -0
  160. data/doc/images/page_green.png +0 -0
  161. data/doc/images/page_white_text.png +0 -0
  162. data/doc/images/page_white_width.png +0 -0
  163. data/doc/images/plugin.png +0 -0
  164. data/doc/images/ruby.png +0 -0
  165. data/doc/images/tag_blue.png +0 -0
  166. data/doc/images/tag_green.png +0 -0
  167. data/doc/images/transparent.png +0 -0
  168. data/doc/images/wrench.png +0 -0
  169. data/doc/images/wrench_orange.png +0 -0
  170. data/doc/images/zoom.png +0 -0
  171. data/doc/index.html +0 -666
  172. data/doc/js/darkfish.js +0 -161
  173. data/doc/js/jquery.js +0 -4
  174. data/doc/js/navigation.js +0 -142
  175. data/doc/js/navigation.js.gz +0 -0
  176. data/doc/js/search.js +0 -109
  177. data/doc/js/search_index.js +0 -1
  178. data/doc/js/search_index.js.gz +0 -0
  179. data/doc/js/searcher.js +0 -229
  180. data/doc/js/searcher.js.gz +0 -0
  181. data/doc/table_of_contents.html +0 -1052
  182. data/examples/cachegrind.out.1 +0 -114
  183. data/examples/cachegrind.out.1.32313213 +0 -114
  184. data/ext/ruby_prof/vc/ruby_prof_18.vcxproj +0 -108
  185. data/ext/ruby_prof/vc/ruby_prof_19.vcxproj +0 -110
@@ -1,121 +1,121 @@
1
- # encoding: utf-8
2
-
3
- module RubyProf
4
- class MethodInfo
5
- include Comparable
6
-
7
- def <=>(other)
8
- if self.total_time < other.total_time
9
- -1
10
- elsif self.total_time > other.total_time
11
- 1
12
- elsif self.min_depth < other.min_depth
13
- 1
14
- elsif self.min_depth > other.min_depth
15
- -1
16
- else
17
- self.full_name <=> other.full_name
18
- end
19
- end
20
-
21
- def called
22
- @called ||= begin
23
- call_infos.inject(0) do |sum, call_info|
24
- sum + call_info.called
25
- end
26
- end
27
- end
28
-
29
- def total_time
30
- @total_time ||= begin
31
- call_infos.inject(0) do |sum, call_info|
32
- sum += call_info.total_time if !call_info.recursive?
33
- sum
34
- end
35
- end
36
- end
37
-
38
- def self_time
39
- @self_time ||= begin
40
- call_infos.inject(0) do |sum, call_info|
41
- sum += call_info.self_time if !call_info.recursive?
42
- sum
43
- end
44
- end
45
- end
46
-
47
- def wait_time
48
- @wait_time ||= begin
49
- call_infos.inject(0) do |sum, call_info|
50
- sum += call_info.wait_time if !call_info.recursive?
51
- sum
52
- end
53
- end
54
- end
55
-
56
- def children_time
57
- @children_time ||= begin
58
- call_infos.inject(0) do |sum, call_info|
59
- sum += call_info.children_time if !call_info.recursive?
60
- sum
61
- end
62
- end
63
- end
64
-
65
- def min_depth
66
- @min_depth ||= call_infos.map(&:depth).min
67
- end
68
-
69
- def root?
70
- @root ||= begin
71
- call_infos.find do |call_info|
72
- not call_info.root?
73
- end.nil?
74
- end
75
- end
76
-
77
- def children
78
- @children ||= call_infos.map(&:children).flatten
79
- end
80
-
81
- def parents
82
- @parents ||= call_infos.map(&:parent)
83
- end
84
-
85
- def aggregate_parents
86
- # group call infos based on their parents
87
- groups = self.call_infos.each_with_object({}) do |call_info, hash|
88
- key = call_info.parent ? call_info.parent.target : self
89
- (hash[key] ||= []) << call_info
90
- end
91
-
92
- groups.map do |key, value|
93
- AggregateCallInfo.new(value, self)
94
- end
95
- end
96
-
97
- def aggregate_children
98
- # group call infos based on their targets
99
- groups = self.children.each_with_object({}) do |call_info, hash|
100
- key = call_info.target
101
- (hash[key] ||= []) << call_info
102
- end
103
-
104
- groups.map do |key, value|
105
- AggregateCallInfo.new(value, self)
106
- end
107
- end
108
-
109
- def to_s
110
- "#{self.full_name} (c: #{self.called}, tt: #{self.total_time}, st: #{self.self_time}, wt: #{wait_time}, ct: #{self.children_time})"
111
- end
112
-
113
- # remove method from the call graph. should not be called directly.
114
- def eliminate!
115
- # $stderr.puts "eliminating #{self}"
116
- call_infos.each{ |call_info| call_info.eliminate! }
117
- call_infos.clear
118
- end
119
-
120
- end
121
- end
1
+ # encoding: utf-8
2
+
3
+ module RubyProf
4
+ class MethodInfo
5
+ include Comparable
6
+
7
+ def <=>(other)
8
+ if self.total_time < other.total_time
9
+ -1
10
+ elsif self.total_time > other.total_time
11
+ 1
12
+ elsif self.min_depth < other.min_depth
13
+ 1
14
+ elsif self.min_depth > other.min_depth
15
+ -1
16
+ else
17
+ self.full_name <=> other.full_name
18
+ end
19
+ end
20
+
21
+ def called
22
+ @called ||= begin
23
+ call_infos.inject(0) do |sum, call_info|
24
+ sum + call_info.called
25
+ end
26
+ end
27
+ end
28
+
29
+ def total_time
30
+ @total_time ||= begin
31
+ call_infos.inject(0) do |sum, call_info|
32
+ sum += call_info.total_time if !call_info.recursive?
33
+ sum
34
+ end
35
+ end
36
+ end
37
+
38
+ def self_time
39
+ @self_time ||= begin
40
+ call_infos.inject(0) do |sum, call_info|
41
+ sum += call_info.self_time if !call_info.recursive?
42
+ sum
43
+ end
44
+ end
45
+ end
46
+
47
+ def wait_time
48
+ @wait_time ||= begin
49
+ call_infos.inject(0) do |sum, call_info|
50
+ sum += call_info.wait_time if !call_info.recursive?
51
+ sum
52
+ end
53
+ end
54
+ end
55
+
56
+ def children_time
57
+ @children_time ||= begin
58
+ call_infos.inject(0) do |sum, call_info|
59
+ sum += call_info.children_time if !call_info.recursive?
60
+ sum
61
+ end
62
+ end
63
+ end
64
+
65
+ def min_depth
66
+ @min_depth ||= call_infos.map(&:depth).min
67
+ end
68
+
69
+ def root?
70
+ @root ||= begin
71
+ call_infos.find do |call_info|
72
+ not call_info.root?
73
+ end.nil?
74
+ end
75
+ end
76
+
77
+ def children
78
+ @children ||= call_infos.map(&:children).flatten
79
+ end
80
+
81
+ def parents
82
+ @parents ||= call_infos.map(&:parent)
83
+ end
84
+
85
+ def aggregate_parents
86
+ # group call infos based on their parents
87
+ groups = self.call_infos.each_with_object({}) do |call_info, hash|
88
+ key = call_info.parent ? call_info.parent.target : self
89
+ (hash[key] ||= []) << call_info
90
+ end
91
+
92
+ groups.map do |key, value|
93
+ AggregateCallInfo.new(value, self)
94
+ end
95
+ end
96
+
97
+ def aggregate_children
98
+ # group call infos based on their targets
99
+ groups = self.children.each_with_object({}) do |call_info, hash|
100
+ key = call_info.target
101
+ (hash[key] ||= []) << call_info
102
+ end
103
+
104
+ groups.map do |key, value|
105
+ AggregateCallInfo.new(value, self)
106
+ end
107
+ end
108
+
109
+ def to_s
110
+ "#{self.full_name} (c: #{self.called}, tt: #{self.total_time}, st: #{self.self_time}, wt: #{wait_time}, ct: #{self.children_time})"
111
+ end
112
+
113
+ # remove method from the call graph. should not be called directly.
114
+ def eliminate!
115
+ # $stderr.puts "eliminating #{self}"
116
+ call_infos.each{ |call_info| call_info.eliminate! }
117
+ call_infos.clear
118
+ end
119
+
120
+ end
121
+ end
@@ -1,103 +1,104 @@
1
- # encoding: utf-8
2
-
3
- module RubyProf
4
- class AbstractPrinter
5
- # Create a new printer.
6
- #
7
- # result should be the output generated from a profiling run
8
- def initialize(result)
9
- @result = result
10
- @output = nil
11
- end
12
-
13
- # Specify print options.
14
- #
15
- # options - Hash table
16
- # :min_percent - Number 0 to 100 that specifes the minimum
17
- # %self (the methods self time divided by the
18
- # overall total time) that a method must take
19
- # for it to be printed out in the report.
20
- # Default value is 0.
21
- #
22
- # :print_file - True or false. Specifies if a method's source
23
- # file should be printed. Default value if false.
24
- #
25
- # :sort_method - Specifies method used for sorting method infos.
26
- # Available values are :total_time, :self_time,
27
- # :wait_time, :children_time
28
- # Default value is :total_time
29
- # :editor_uri - Specifies editor uri scheme used for opening files
30
- # e.g. :atm or :mvim. For OS X default is :txmt.
31
- # Use RUBY_PROF_EDITOR_URI environment variable to overide.
32
- def setup_options(options = {})
33
- @options = options
34
- end
35
-
36
- def min_percent
37
- @options[:min_percent] || 0
38
- end
39
-
40
- def print_file
41
- @options[:print_file] || false
42
- end
43
-
44
- def sort_method
45
- @options[:sort_method] || :total_time
46
- end
47
-
48
- def editor_uri
49
- default_uri = if RUBY_PLATFORM =~ /darwin/ \
50
- && !ENV['RUBY_PROF_EDITOR_URI']
51
- 'txmt'
52
- else
53
- false
54
- end
55
- ENV['RUBY_PROF_EDITOR_URI'] || @options[:editor_uri] || default_uri
56
- end
57
-
58
- def method_name(method)
59
- name = method.full_name
60
- if print_file
61
- name += " (#{method.source_file}:#{method.line}}"
62
- end
63
- name
64
- end
65
-
66
- # Print a profiling report to the provided output.
67
- #
68
- # output - Any IO object, including STDOUT or a file.
69
- # The default value is STDOUT.
70
- #
71
- # options - Hash of print options. See #setup_options
72
- # for more information. Note that each printer can
73
- # define its own set of options.
74
- def print(output = STDOUT, options = {})
75
- @output = output
76
- setup_options(options)
77
- print_threads
78
- end
79
-
80
- def print_threads
81
- @result.threads.each do |thread|
82
- print_thread(thread)
83
- end
84
- end
85
-
86
- def print_thread(thread)
87
- print_header(thread)
88
- print_methods(thread)
89
- print_footer(thread)
90
- end
91
-
92
- def print_header(thread)
93
- end
94
-
95
- def print_footer(thread)
96
- end
97
-
98
- # whether this printer need a :path option pointing to a directory
99
- def self.needs_dir?
100
- false
101
- end
102
- end
103
- end
1
+ # encoding: utf-8
2
+
3
+ module RubyProf
4
+ class AbstractPrinter
5
+ # Create a new printer.
6
+ #
7
+ # result should be the output generated from a profiling run
8
+ def initialize(result)
9
+ @result = result
10
+ @output = nil
11
+ end
12
+
13
+ # Specify print options.
14
+ #
15
+ # options - Hash table
16
+ # :min_percent - Number 0 to 100 that specifes the minimum
17
+ # %self (the methods self time divided by the
18
+ # overall total time) that a method must take
19
+ # for it to be printed out in the report.
20
+ # Default value is 0.
21
+ #
22
+ # :print_file - True or false. Specifies if a method's source
23
+ # file should be printed. Default value if false.
24
+ #
25
+ # :sort_method - Specifies method used for sorting method infos.
26
+ # Available values are :total_time, :self_time,
27
+ # :wait_time, :children_time
28
+ # Default value is :total_time
29
+ # :editor_uri - Specifies editor uri scheme used for opening files
30
+ # e.g. :atm or :mvim. For OS X default is :txmt.
31
+ # Pass false to print bare filenames.
32
+ # Use RUBY_PROF_EDITOR_URI environment variable to override.
33
+ def setup_options(options = {})
34
+ @options = options
35
+ end
36
+
37
+ def min_percent
38
+ @options[:min_percent] || 0
39
+ end
40
+
41
+ def print_file
42
+ @options[:print_file] || false
43
+ end
44
+
45
+ def sort_method
46
+ @options[:sort_method] || :total_time
47
+ end
48
+
49
+ def editor_uri
50
+ if ENV.key?('RUBY_PROF_EDITOR_URI')
51
+ ENV['RUBY_PROF_EDITOR_URI'] || false
52
+ elsif @options.key?(:editor_uri)
53
+ @options[:editor_uri]
54
+ else
55
+ RUBY_PLATFORM =~ /darwin/ ? 'txmt' : false
56
+ end
57
+ end
58
+
59
+ def method_name(method)
60
+ name = method.full_name
61
+ if print_file
62
+ name += " (#{method.source_file}:#{method.line}}"
63
+ end
64
+ name
65
+ end
66
+
67
+ # Print a profiling report to the provided output.
68
+ #
69
+ # output - Any IO object, including STDOUT or a file.
70
+ # The default value is STDOUT.
71
+ #
72
+ # options - Hash of print options. See #setup_options
73
+ # for more information. Note that each printer can
74
+ # define its own set of options.
75
+ def print(output = STDOUT, options = {})
76
+ @output = output
77
+ setup_options(options)
78
+ print_threads
79
+ end
80
+
81
+ def print_threads
82
+ @result.threads.each do |thread|
83
+ print_thread(thread)
84
+ end
85
+ end
86
+
87
+ def print_thread(thread)
88
+ print_header(thread)
89
+ print_methods(thread)
90
+ print_footer(thread)
91
+ end
92
+
93
+ def print_header(thread)
94
+ end
95
+
96
+ def print_footer(thread)
97
+ end
98
+
99
+ # whether this printer need a :path option pointing to a directory
100
+ def self.needs_dir?
101
+ false
102
+ end
103
+ end
104
+ end
@@ -1,41 +1,41 @@
1
- # encoding: utf-8
2
-
3
- module RubyProf
4
- # Prints out the call graph based on CallInfo instances. This
5
- # is mainly for debugging purposes as it provides access into
6
- # into RubyProf's internals.
7
-
8
- class CallInfoPrinter < AbstractPrinter
9
- TIME_WIDTH = 0
10
-
11
- private
12
-
13
- def print_header(thread)
14
- @output << "Thread ID: #{thread.id}\n"
15
- @output << "Fiber ID: #{thread.fiber_id}\n"
16
- @output << "Total Time: #{thread.total_time}\n"
17
- @output << "Sort by: #{sort_method}\n"
18
- @output << "\n"
19
- end
20
-
21
- def print_methods(thread)
22
- visitor = CallInfoVisitor.new(thread.top_call_infos)
23
-
24
- visitor.visit do |call_info, event|
25
- if event == :enter
26
- @output << " " * call_info.depth
27
- @output << call_info.target.full_name
28
- @output << " ("
29
- @output << "tt:#{sprintf("%#{TIME_WIDTH}.2f", call_info.total_time)}, "
30
- @output << "st:#{sprintf("%#{TIME_WIDTH}.2f", call_info.self_time)}, "
31
- @output << "wt:#{sprintf("%#{TIME_WIDTH}.2f", call_info.wait_time)}, "
32
- @output << "ct:#{sprintf("%#{TIME_WIDTH}.2f", call_info.children_time)}, "
33
- @output << "call:#{call_info.called}, "
34
- @output << "rec:#{call_info.recursive?}"
35
- @output << ")"
36
- @output << "\n"
37
- end
38
- end
39
- end
40
- end
41
- end
1
+ # encoding: utf-8
2
+
3
+ module RubyProf
4
+ # Prints out the call graph based on CallInfo instances. This
5
+ # is mainly for debugging purposes as it provides access into
6
+ # into RubyProf's internals.
7
+
8
+ class CallInfoPrinter < AbstractPrinter
9
+ TIME_WIDTH = 0
10
+
11
+ private
12
+
13
+ def print_header(thread)
14
+ @output << "Thread ID: #{thread.id}\n"
15
+ @output << "Fiber ID: #{thread.fiber_id}\n"
16
+ @output << "Total Time: #{thread.total_time}\n"
17
+ @output << "Sort by: #{sort_method}\n"
18
+ @output << "\n"
19
+ end
20
+
21
+ def print_methods(thread)
22
+ visitor = CallInfoVisitor.new(thread.top_call_infos)
23
+
24
+ visitor.visit do |call_info, event|
25
+ if event == :enter
26
+ @output << " " * call_info.depth
27
+ @output << call_info.target.full_name
28
+ @output << " ("
29
+ @output << "tt:#{sprintf("%#{TIME_WIDTH}.2f", call_info.total_time)}, "
30
+ @output << "st:#{sprintf("%#{TIME_WIDTH}.2f", call_info.self_time)}, "
31
+ @output << "wt:#{sprintf("%#{TIME_WIDTH}.2f", call_info.wait_time)}, "
32
+ @output << "ct:#{sprintf("%#{TIME_WIDTH}.2f", call_info.children_time)}, "
33
+ @output << "call:#{call_info.called}, "
34
+ @output << "rec:#{call_info.recursive?}"
35
+ @output << ")"
36
+ @output << "\n"
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end