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.
- checksums.yaml +5 -5
- data/CHANGES +500 -482
- data/LICENSE +24 -24
- data/README.rdoc +487 -485
- data/Rakefile +113 -113
- data/bin/ruby-prof +345 -345
- data/bin/ruby-prof-check-trace +45 -45
- data/examples/flat.txt +50 -50
- data/examples/graph.dot +84 -84
- data/examples/graph.html +823 -823
- data/examples/graph.txt +139 -139
- data/examples/multi.flat.txt +23 -23
- data/examples/multi.graph.html +760 -760
- data/examples/multi.grind.dat +114 -114
- data/examples/multi.stack.html +547 -547
- data/examples/stack.html +547 -547
- data/ext/ruby_prof/extconf.rb +68 -68
- data/ext/ruby_prof/rp_call_info.c +425 -425
- data/ext/ruby_prof/rp_call_info.h +53 -53
- data/ext/ruby_prof/rp_measure.c +40 -40
- data/ext/ruby_prof/rp_measure.h +45 -45
- data/ext/ruby_prof/rp_measure_allocations.c +76 -76
- data/ext/ruby_prof/rp_measure_cpu_time.c +136 -136
- data/ext/ruby_prof/rp_measure_gc_runs.c +73 -73
- data/ext/ruby_prof/rp_measure_gc_time.c +60 -60
- data/ext/ruby_prof/rp_measure_memory.c +77 -77
- data/ext/ruby_prof/rp_measure_process_time.c +71 -71
- data/ext/ruby_prof/rp_measure_wall_time.c +45 -45
- data/ext/ruby_prof/rp_method.c +630 -636
- data/ext/ruby_prof/rp_method.h +75 -75
- data/ext/ruby_prof/rp_stack.c +173 -173
- data/ext/ruby_prof/rp_stack.h +63 -63
- data/ext/ruby_prof/rp_thread.c +277 -276
- data/ext/ruby_prof/rp_thread.h +27 -27
- data/ext/ruby_prof/ruby_prof.c +794 -774
- data/ext/ruby_prof/ruby_prof.h +60 -59
- data/ext/ruby_prof/vc/ruby_prof.sln +20 -21
- data/ext/ruby_prof/vc/{ruby_prof_20.vcxproj → ruby_prof.vcxproj} +31 -0
- data/lib/ruby-prof.rb +68 -68
- data/lib/ruby-prof/aggregate_call_info.rb +76 -76
- data/lib/ruby-prof/assets/call_stack_printer.css.html +116 -116
- data/lib/ruby-prof/assets/call_stack_printer.js.html +384 -384
- data/lib/ruby-prof/call_info.rb +115 -115
- data/lib/ruby-prof/call_info_visitor.rb +40 -40
- data/lib/ruby-prof/compatibility.rb +179 -178
- data/lib/ruby-prof/method_info.rb +121 -121
- data/lib/ruby-prof/printers/abstract_printer.rb +104 -103
- data/lib/ruby-prof/printers/call_info_printer.rb +41 -41
- data/lib/ruby-prof/printers/call_stack_printer.rb +265 -265
- data/lib/ruby-prof/printers/call_tree_printer.rb +143 -143
- data/lib/ruby-prof/printers/dot_printer.rb +132 -132
- data/lib/ruby-prof/printers/flat_printer.rb +70 -70
- data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +83 -83
- data/lib/ruby-prof/printers/graph_html_printer.rb +249 -249
- data/lib/ruby-prof/printers/graph_printer.rb +116 -116
- data/lib/ruby-prof/printers/multi_printer.rb +84 -84
- data/lib/ruby-prof/profile.rb +26 -26
- data/lib/ruby-prof/profile/exclude_common_methods.rb +207 -201
- data/lib/ruby-prof/profile/legacy_method_elimination.rb +50 -49
- data/lib/ruby-prof/rack.rb +174 -174
- data/lib/ruby-prof/task.rb +147 -147
- data/lib/ruby-prof/thread.rb +35 -35
- data/lib/ruby-prof/version.rb +3 -3
- data/lib/unprof.rb +10 -10
- data/ruby-prof.gemspec +58 -58
- data/test/abstract_printer_test.rb +53 -0
- data/test/aggregate_test.rb +136 -136
- data/test/basic_test.rb +128 -128
- data/test/block_test.rb +74 -74
- data/test/call_info_test.rb +78 -78
- data/test/call_info_visitor_test.rb +31 -31
- data/test/duplicate_names_test.rb +32 -32
- data/test/dynamic_method_test.rb +55 -55
- data/test/enumerable_test.rb +21 -21
- data/test/exceptions_test.rb +24 -16
- data/test/exclude_methods_test.rb +146 -146
- data/test/exclude_threads_test.rb +53 -53
- data/test/fiber_test.rb +79 -79
- data/test/issue137_test.rb +63 -63
- data/test/line_number_test.rb +80 -80
- data/test/measure_allocations_test.rb +26 -26
- data/test/measure_cpu_time_test.rb +212 -213
- data/test/measure_gc_runs_test.rb +32 -32
- data/test/measure_gc_time_test.rb +36 -36
- data/test/measure_memory_test.rb +33 -33
- data/test/measure_process_time_test.rb +61 -63
- data/test/measure_wall_time_test.rb +255 -255
- data/test/method_elimination_test.rb +84 -84
- data/test/module_test.rb +45 -45
- data/test/multi_printer_test.rb +104 -104
- data/test/no_method_class_test.rb +15 -15
- data/test/pause_resume_test.rb +166 -166
- data/test/prime.rb +54 -54
- data/test/printers_test.rb +275 -275
- data/test/printing_recursive_graph_test.rb +127 -127
- data/test/rack_test.rb +157 -157
- data/test/recursive_test.rb +215 -215
- data/test/singleton_test.rb +38 -38
- data/test/stack_printer_test.rb +77 -78
- data/test/stack_test.rb +138 -138
- data/test/start_stop_test.rb +112 -112
- data/test/test_helper.rb +267 -275
- data/test/thread_test.rb +187 -187
- data/test/unique_call_path_test.rb +202 -202
- data/test/yarv_test.rb +55 -55
- metadata +17 -96
- data/doc/LICENSE.html +0 -115
- data/doc/README_rdoc.html +0 -637
- data/doc/Rack.html +0 -96
- data/doc/Rack/RubyProf.html +0 -233
- data/doc/Rack/RubyProf/RackProfiler.html +0 -343
- data/doc/RubyProf.html +0 -974
- data/doc/RubyProf/AbstractPrinter.html +0 -625
- data/doc/RubyProf/AggregateCallInfo.html +0 -552
- data/doc/RubyProf/CallInfo.html +0 -579
- data/doc/RubyProf/CallInfoPrinter.html +0 -121
- data/doc/RubyProf/CallInfoVisitor.html +0 -199
- data/doc/RubyProf/CallStackPrinter.html +0 -1127
- data/doc/RubyProf/CallTreePrinter.html +0 -725
- data/doc/RubyProf/Cmd.html +0 -637
- data/doc/RubyProf/DeprecationWarnings.html +0 -148
- data/doc/RubyProf/DotPrinter.html +0 -258
- data/doc/RubyProf/FlatPrinter.html +0 -164
- data/doc/RubyProf/FlatPrinterWithLineNumbers.html +0 -210
- data/doc/RubyProf/GraphHtmlPrinter.html +0 -558
- data/doc/RubyProf/GraphPrinter.html +0 -140
- data/doc/RubyProf/MethodInfo.html +0 -676
- data/doc/RubyProf/MultiPrinter.html +0 -574
- data/doc/RubyProf/Profile.html +0 -908
- data/doc/RubyProf/Profile/ExcludeCommonMethods.html +0 -411
- data/doc/RubyProf/Profile/LegacyMethodElimination.html +0 -158
- data/doc/RubyProf/ProfileTask.html +0 -491
- data/doc/RubyProf/Thread.html +0 -275
- data/doc/created.rid +0 -33
- data/doc/css/fonts.css +0 -167
- data/doc/css/rdoc.css +0 -590
- data/doc/examples/flat_txt.html +0 -139
- data/doc/examples/graph_html.html +0 -910
- data/doc/examples/graph_txt.html +0 -248
- data/doc/fonts/Lato-Light.ttf +0 -0
- data/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/doc/fonts/Lato-Regular.ttf +0 -0
- data/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +0 -666
- data/doc/js/darkfish.js +0 -161
- data/doc/js/jquery.js +0 -4
- data/doc/js/navigation.js +0 -142
- data/doc/js/navigation.js.gz +0 -0
- data/doc/js/search.js +0 -109
- data/doc/js/search_index.js +0 -1
- data/doc/js/search_index.js.gz +0 -0
- data/doc/js/searcher.js +0 -229
- data/doc/js/searcher.js.gz +0 -0
- data/doc/table_of_contents.html +0 -1052
- data/examples/cachegrind.out.1 +0 -114
- data/examples/cachegrind.out.1.32313213 +0 -114
- data/ext/ruby_prof/vc/ruby_prof_18.vcxproj +0 -108
- 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
|
-
#
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
#
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
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
|