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,201 +1,207 @@
|
|
1
|
-
require 'set'
|
2
|
-
|
3
|
-
module RubyProf
|
4
|
-
class Profile
|
5
|
-
class ExcludeCommonMethods
|
6
|
-
ENUMERABLE_NAMES = Enumerable.instance_methods(false)
|
7
|
-
|
8
|
-
def self.apply!(profile)
|
9
|
-
new(profile).apply!
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize(profile)
|
13
|
-
@profile = profile
|
14
|
-
end
|
15
|
-
|
16
|
-
def apply!
|
17
|
-
##
|
18
|
-
# Kernel Methods
|
19
|
-
##
|
20
|
-
|
21
|
-
exclude_methods Kernel, [
|
22
|
-
:dup,
|
23
|
-
:initialize_dup,
|
24
|
-
:tap,
|
25
|
-
:send,
|
26
|
-
:public_send,
|
27
|
-
]
|
28
|
-
|
29
|
-
##
|
30
|
-
# Fundamental Types
|
31
|
-
##
|
32
|
-
|
33
|
-
exclude_methods BasicObject, :"!="
|
34
|
-
exclude_methods Method, :"[]"
|
35
|
-
exclude_methods Module, :new
|
36
|
-
exclude_methods Class, :new
|
37
|
-
exclude_methods Proc, :call, :yield
|
38
|
-
exclude_methods Range, :each
|
39
|
-
exclude_methods Integer, :times
|
40
|
-
|
41
|
-
##
|
42
|
-
# Value Types
|
43
|
-
##
|
44
|
-
|
45
|
-
exclude_methods String, [
|
46
|
-
:sub,
|
47
|
-
:sub!,
|
48
|
-
:gsub,
|
49
|
-
:gsub!,
|
50
|
-
]
|
51
|
-
|
52
|
-
##
|
53
|
-
# Emumerables
|
54
|
-
##
|
55
|
-
|
56
|
-
exclude_enumerable Enumerable
|
57
|
-
exclude_enumerable Enumerator
|
58
|
-
|
59
|
-
##
|
60
|
-
# Collections
|
61
|
-
##
|
62
|
-
|
63
|
-
exclude_enumerable Array, [
|
64
|
-
:each_index,
|
65
|
-
:map!,
|
66
|
-
:select!,
|
67
|
-
:reject!,
|
68
|
-
:collect!,
|
69
|
-
:sort!,
|
70
|
-
:sort_by!,
|
71
|
-
:index,
|
72
|
-
:delete_if,
|
73
|
-
:keep_if,
|
74
|
-
:drop_while,
|
75
|
-
:uniq,
|
76
|
-
:uniq!,
|
77
|
-
:"==",
|
78
|
-
:eql?,
|
79
|
-
:hash,
|
80
|
-
:to_json,
|
81
|
-
:as_json,
|
82
|
-
:encode_json,
|
83
|
-
]
|
84
|
-
|
85
|
-
exclude_enumerable Hash, [
|
86
|
-
:dup,
|
87
|
-
:initialize_dup,
|
88
|
-
:fetch,
|
89
|
-
:"[]",
|
90
|
-
:"[]=",
|
91
|
-
:each_key,
|
92
|
-
:each_value,
|
93
|
-
:each_pair,
|
94
|
-
:map!,
|
95
|
-
:select!,
|
96
|
-
:reject!,
|
97
|
-
:collect!,
|
98
|
-
:delete_if,
|
99
|
-
:keep_if,
|
100
|
-
:slice,
|
101
|
-
:slice!,
|
102
|
-
:except,
|
103
|
-
:except!,
|
104
|
-
:"==",
|
105
|
-
:eql?,
|
106
|
-
:hash,
|
107
|
-
:to_json,
|
108
|
-
:as_json,
|
109
|
-
:encode_json,
|
110
|
-
]
|
111
|
-
|
112
|
-
exclude_enumerable Set, [
|
113
|
-
:map!,
|
114
|
-
:select!,
|
115
|
-
:reject!,
|
116
|
-
:collect!,
|
117
|
-
:classify,
|
118
|
-
:delete_if,
|
119
|
-
:keep_if,
|
120
|
-
:divide,
|
121
|
-
:"==",
|
122
|
-
:eql?,
|
123
|
-
:hash,
|
124
|
-
:to_json,
|
125
|
-
:as_json,
|
126
|
-
:encode_json,
|
127
|
-
]
|
128
|
-
|
129
|
-
##
|
130
|
-
# Garbage Collection
|
131
|
-
##
|
132
|
-
|
133
|
-
exclude_singleton_methods GC, [
|
134
|
-
:start
|
135
|
-
]
|
136
|
-
|
137
|
-
##
|
138
|
-
# Unicorn
|
139
|
-
##
|
140
|
-
|
141
|
-
if defined?(Unicorn)
|
142
|
-
exclude_methods Unicorn::HttpServer, :process_client
|
143
|
-
end
|
144
|
-
|
145
|
-
if defined?(Unicorn::OobGC)
|
146
|
-
exclude_methods Unicorn::OobGC, :process_client
|
147
|
-
end
|
148
|
-
|
149
|
-
##
|
150
|
-
# New Relic
|
151
|
-
##
|
152
|
-
|
153
|
-
if defined?(NewRelic)
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
end
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module RubyProf
|
4
|
+
class Profile
|
5
|
+
class ExcludeCommonMethods
|
6
|
+
ENUMERABLE_NAMES = Enumerable.instance_methods(false)
|
7
|
+
|
8
|
+
def self.apply!(profile)
|
9
|
+
new(profile).apply!
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(profile)
|
13
|
+
@profile = profile
|
14
|
+
end
|
15
|
+
|
16
|
+
def apply!
|
17
|
+
##
|
18
|
+
# Kernel Methods
|
19
|
+
##
|
20
|
+
|
21
|
+
exclude_methods Kernel, [
|
22
|
+
:dup,
|
23
|
+
:initialize_dup,
|
24
|
+
:tap,
|
25
|
+
:send,
|
26
|
+
:public_send,
|
27
|
+
]
|
28
|
+
|
29
|
+
##
|
30
|
+
# Fundamental Types
|
31
|
+
##
|
32
|
+
|
33
|
+
exclude_methods BasicObject, :"!="
|
34
|
+
exclude_methods Method, :"[]"
|
35
|
+
exclude_methods Module, :new
|
36
|
+
exclude_methods Class, :new
|
37
|
+
exclude_methods Proc, :call, :yield
|
38
|
+
exclude_methods Range, :each
|
39
|
+
exclude_methods Integer, :times
|
40
|
+
|
41
|
+
##
|
42
|
+
# Value Types
|
43
|
+
##
|
44
|
+
|
45
|
+
exclude_methods String, [
|
46
|
+
:sub,
|
47
|
+
:sub!,
|
48
|
+
:gsub,
|
49
|
+
:gsub!,
|
50
|
+
]
|
51
|
+
|
52
|
+
##
|
53
|
+
# Emumerables
|
54
|
+
##
|
55
|
+
|
56
|
+
exclude_enumerable Enumerable
|
57
|
+
exclude_enumerable Enumerator
|
58
|
+
|
59
|
+
##
|
60
|
+
# Collections
|
61
|
+
##
|
62
|
+
|
63
|
+
exclude_enumerable Array, [
|
64
|
+
:each_index,
|
65
|
+
:map!,
|
66
|
+
:select!,
|
67
|
+
:reject!,
|
68
|
+
:collect!,
|
69
|
+
:sort!,
|
70
|
+
:sort_by!,
|
71
|
+
:index,
|
72
|
+
:delete_if,
|
73
|
+
:keep_if,
|
74
|
+
:drop_while,
|
75
|
+
:uniq,
|
76
|
+
:uniq!,
|
77
|
+
:"==",
|
78
|
+
:eql?,
|
79
|
+
:hash,
|
80
|
+
:to_json,
|
81
|
+
:as_json,
|
82
|
+
:encode_json,
|
83
|
+
]
|
84
|
+
|
85
|
+
exclude_enumerable Hash, [
|
86
|
+
:dup,
|
87
|
+
:initialize_dup,
|
88
|
+
:fetch,
|
89
|
+
:"[]",
|
90
|
+
:"[]=",
|
91
|
+
:each_key,
|
92
|
+
:each_value,
|
93
|
+
:each_pair,
|
94
|
+
:map!,
|
95
|
+
:select!,
|
96
|
+
:reject!,
|
97
|
+
:collect!,
|
98
|
+
:delete_if,
|
99
|
+
:keep_if,
|
100
|
+
:slice,
|
101
|
+
:slice!,
|
102
|
+
:except,
|
103
|
+
:except!,
|
104
|
+
:"==",
|
105
|
+
:eql?,
|
106
|
+
:hash,
|
107
|
+
:to_json,
|
108
|
+
:as_json,
|
109
|
+
:encode_json,
|
110
|
+
]
|
111
|
+
|
112
|
+
exclude_enumerable Set, [
|
113
|
+
:map!,
|
114
|
+
:select!,
|
115
|
+
:reject!,
|
116
|
+
:collect!,
|
117
|
+
:classify,
|
118
|
+
:delete_if,
|
119
|
+
:keep_if,
|
120
|
+
:divide,
|
121
|
+
:"==",
|
122
|
+
:eql?,
|
123
|
+
:hash,
|
124
|
+
:to_json,
|
125
|
+
:as_json,
|
126
|
+
:encode_json,
|
127
|
+
]
|
128
|
+
|
129
|
+
##
|
130
|
+
# Garbage Collection
|
131
|
+
##
|
132
|
+
|
133
|
+
exclude_singleton_methods GC, [
|
134
|
+
:start
|
135
|
+
]
|
136
|
+
|
137
|
+
##
|
138
|
+
# Unicorn
|
139
|
+
##
|
140
|
+
|
141
|
+
if defined?(Unicorn)
|
142
|
+
exclude_methods Unicorn::HttpServer, :process_client
|
143
|
+
end
|
144
|
+
|
145
|
+
if defined?(Unicorn::OobGC)
|
146
|
+
exclude_methods Unicorn::OobGC, :process_client
|
147
|
+
end
|
148
|
+
|
149
|
+
##
|
150
|
+
# New Relic
|
151
|
+
##
|
152
|
+
|
153
|
+
if defined?(NewRelic::Agent)
|
154
|
+
if defined?(NewRelic::Agent::Instrumentation::MiddlewareTracing)
|
155
|
+
exclude_methods NewRelic::Agent::Instrumentation::MiddlewareTracing, [
|
156
|
+
:call
|
157
|
+
]
|
158
|
+
end
|
159
|
+
|
160
|
+
if defined?(NewRelic::Agent::MethodTracerHelpers)
|
161
|
+
exclude_methods NewRelic::Agent::MethodTracerHelpers, [
|
162
|
+
:trace_execution_scoped,
|
163
|
+
:log_errors,
|
164
|
+
]
|
165
|
+
|
166
|
+
exclude_singleton_methods NewRelic::Agent::MethodTracerHelpers, [
|
167
|
+
:trace_execution_scoped,
|
168
|
+
:log_errors,
|
169
|
+
]
|
170
|
+
end
|
171
|
+
|
172
|
+
if defined?(NewRelic::Agent::MethodTracer)
|
173
|
+
exclude_methods NewRelic::Agent::MethodTracer, [
|
174
|
+
:trace_execution_scoped,
|
175
|
+
:trace_execution_unscoped,
|
176
|
+
]
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
##
|
181
|
+
# Miscellaneous Methods
|
182
|
+
##
|
183
|
+
|
184
|
+
if defined?(Mustache)
|
185
|
+
exclude_methods Mustache::Context, [
|
186
|
+
:fetch
|
187
|
+
]
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
private
|
192
|
+
|
193
|
+
def exclude_methods(mod, *method_or_methods)
|
194
|
+
@profile.exclude_methods!(mod, method_or_methods)
|
195
|
+
end
|
196
|
+
|
197
|
+
def exclude_singleton_methods(mod, *method_or_methods)
|
198
|
+
@profile.exclude_singleton_methods!(mod, method_or_methods)
|
199
|
+
end
|
200
|
+
|
201
|
+
def exclude_enumerable(mod, *method_or_methods)
|
202
|
+
exclude_methods(mod, [:each, *method_or_methods])
|
203
|
+
exclude_methods(mod, ENUMERABLE_NAMES)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -1,49 +1,50 @@
|
|
1
|
-
module RubyProf
|
2
|
-
class Profile
|
3
|
-
module LegacyMethodElimination
|
4
|
-
# eliminate some calls from the graph by merging the information into callers.
|
5
|
-
# matchers can be a list of strings or regular expressions or the name of a file containing regexps.
|
6
|
-
def eliminate_methods!(matchers)
|
7
|
-
RubyProf.deprecation_warning(
|
8
|
-
"Method 'eliminate_methods!' is
|
9
|
-
"Please call 'exclude_methods!' before starting the profile run instead."
|
10
|
-
)
|
11
|
-
matchers = read_regexps_from_file(matchers) if matchers.is_a?(String)
|
12
|
-
eliminated = []
|
13
|
-
threads.each do |thread|
|
14
|
-
matchers.each{ |matcher| eliminated.concat(eliminate_methods(thread.methods, matcher)) }
|
15
|
-
end
|
16
|
-
eliminated
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
# read regexps from file
|
22
|
-
def read_regexps_from_file(file_name)
|
23
|
-
matchers = []
|
24
|
-
File.open(file_name).each_line do |l|
|
25
|
-
next if (l =~ /^(#.*|\s*)$/) # emtpy lines and lines starting with #
|
26
|
-
matchers << Regexp.new(l.strip)
|
27
|
-
end
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
1
|
+
module RubyProf
|
2
|
+
class Profile
|
3
|
+
module LegacyMethodElimination
|
4
|
+
# eliminate some calls from the graph by merging the information into callers.
|
5
|
+
# matchers can be a list of strings or regular expressions or the name of a file containing regexps.
|
6
|
+
def eliminate_methods!(matchers)
|
7
|
+
RubyProf.deprecation_warning(
|
8
|
+
"Method 'eliminate_methods!' is deprecated",
|
9
|
+
"Please call 'exclude_methods!' before starting the profile run instead."
|
10
|
+
)
|
11
|
+
matchers = read_regexps_from_file(matchers) if matchers.is_a?(String)
|
12
|
+
eliminated = []
|
13
|
+
threads.each do |thread|
|
14
|
+
matchers.each{ |matcher| eliminated.concat(eliminate_methods(thread.methods, matcher)) }
|
15
|
+
end
|
16
|
+
eliminated
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
# read regexps from file
|
22
|
+
def read_regexps_from_file(file_name)
|
23
|
+
matchers = []
|
24
|
+
File.open(file_name).each_line do |l|
|
25
|
+
next if (l =~ /^(#.*|\s*)$/) # emtpy lines and lines starting with #
|
26
|
+
matchers << Regexp.new(l.strip)
|
27
|
+
end
|
28
|
+
matchers
|
29
|
+
end
|
30
|
+
|
31
|
+
# eliminate methods matching matcher
|
32
|
+
def eliminate_methods(methods, matcher)
|
33
|
+
eliminated = []
|
34
|
+
i = 0
|
35
|
+
while i < methods.size
|
36
|
+
method_info = methods[i]
|
37
|
+
method_name = method_info.full_name
|
38
|
+
if matcher === method_name
|
39
|
+
raise "can't eliminate root method" if method_info.root?
|
40
|
+
eliminated << methods.delete_at(i)
|
41
|
+
method_info.eliminate!
|
42
|
+
else
|
43
|
+
i += 1
|
44
|
+
end
|
45
|
+
end
|
46
|
+
eliminated
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|