ruby-prof 1.7.1 → 2.0.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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/{CHANGES → CHANGELOG.md} +118 -176
  3. data/README.md +5 -5
  4. data/bin/ruby-prof +1 -4
  5. data/docs/advanced-usage.md +132 -0
  6. data/docs/alternatives.md +98 -0
  7. data/docs/architecture.md +122 -0
  8. data/docs/best-practices.md +27 -0
  9. data/docs/getting-started.md +130 -0
  10. data/docs/history.md +11 -0
  11. data/docs/index.md +45 -0
  12. data/docs/profiling-rails.md +64 -0
  13. data/docs/public/examples/example.rb +33 -0
  14. data/docs/public/examples/generate_reports.rb +92 -0
  15. data/docs/public/examples/reports/call_info.txt +27 -0
  16. data/docs/public/examples/reports/call_stack.html +835 -0
  17. data/docs/public/examples/reports/callgrind.out +150 -0
  18. data/docs/public/examples/reports/flame_graph.html +408 -0
  19. data/docs/public/examples/reports/flat.txt +45 -0
  20. data/docs/public/examples/reports/graph.dot +129 -0
  21. data/docs/public/examples/reports/graph.html +1319 -0
  22. data/docs/public/examples/reports/graph.txt +100 -0
  23. data/docs/public/examples/reports/graphviz_viewer.html +1 -0
  24. data/docs/public/images/call_stack.png +0 -0
  25. data/docs/public/images/class_diagram.png +0 -0
  26. data/docs/public/images/dot_printer.png +0 -0
  27. data/docs/public/images/flame_graph.png +0 -0
  28. data/docs/public/images/flat.png +0 -0
  29. data/docs/public/images/graph.png +0 -0
  30. data/docs/public/images/graph_html.png +0 -0
  31. data/docs/public/images/ruby-prof-logo.svg +1 -0
  32. data/docs/reports.md +150 -0
  33. data/docs/stylesheets/extra.css +80 -0
  34. data/ext/ruby_prof/extconf.rb +23 -22
  35. data/ext/ruby_prof/rp_allocation.c +0 -15
  36. data/ext/ruby_prof/rp_allocation.h +29 -33
  37. data/ext/ruby_prof/rp_call_tree.c +3 -0
  38. data/ext/ruby_prof/rp_call_tree.h +1 -4
  39. data/ext/ruby_prof/rp_call_trees.c +296 -296
  40. data/ext/ruby_prof/rp_call_trees.h +25 -28
  41. data/ext/ruby_prof/rp_measure_allocations.c +47 -47
  42. data/ext/ruby_prof/rp_measure_process_time.c +64 -66
  43. data/ext/ruby_prof/rp_measure_wall_time.c +52 -64
  44. data/ext/ruby_prof/rp_measurement.c +0 -5
  45. data/ext/ruby_prof/rp_measurement.h +49 -53
  46. data/ext/ruby_prof/rp_method.c +554 -551
  47. data/ext/ruby_prof/rp_method.h +1 -4
  48. data/ext/ruby_prof/rp_profile.c +1 -1
  49. data/ext/ruby_prof/rp_profile.h +1 -5
  50. data/ext/ruby_prof/rp_stack.c +212 -212
  51. data/ext/ruby_prof/rp_stack.h +50 -53
  52. data/ext/ruby_prof/rp_thread.h +1 -4
  53. data/ext/ruby_prof/ruby_prof.c +50 -50
  54. data/ext/ruby_prof/ruby_prof.h +4 -6
  55. data/ext/ruby_prof/vc/ruby_prof.vcxproj +7 -8
  56. data/lib/ruby-prof/assets/call_stack_printer.html.erb +746 -711
  57. data/lib/ruby-prof/assets/flame_graph_printer.html.erb +412 -0
  58. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -355
  59. data/lib/ruby-prof/call_tree.rb +57 -57
  60. data/lib/ruby-prof/call_tree_visitor.rb +36 -36
  61. data/lib/ruby-prof/exclude_common_methods.rb +204 -204
  62. data/lib/ruby-prof/measurement.rb +17 -17
  63. data/lib/ruby-prof/printers/abstract_printer.rb +142 -138
  64. data/lib/ruby-prof/printers/call_info_printer.rb +53 -53
  65. data/lib/ruby-prof/printers/call_stack_printer.rb +168 -180
  66. data/lib/ruby-prof/printers/call_tree_printer.rb +132 -145
  67. data/lib/ruby-prof/printers/dot_printer.rb +177 -132
  68. data/lib/ruby-prof/printers/flame_graph_printer.rb +79 -0
  69. data/lib/ruby-prof/printers/flat_printer.rb +52 -52
  70. data/lib/ruby-prof/printers/graph_html_printer.rb +62 -63
  71. data/lib/ruby-prof/printers/graph_printer.rb +112 -113
  72. data/lib/ruby-prof/printers/multi_printer.rb +134 -127
  73. data/lib/ruby-prof/profile.rb +13 -0
  74. data/lib/ruby-prof/rack.rb +114 -105
  75. data/lib/ruby-prof/task.rb +147 -147
  76. data/lib/ruby-prof/thread.rb +20 -20
  77. data/lib/ruby-prof/version.rb +3 -3
  78. data/lib/ruby-prof.rb +50 -52
  79. data/lib/unprof.rb +10 -10
  80. data/ruby-prof.gemspec +66 -65
  81. data/test/abstract_printer_test.rb +25 -27
  82. data/test/alias_test.rb +203 -117
  83. data/test/call_tree_builder.rb +126 -126
  84. data/test/call_tree_visitor_test.rb +27 -27
  85. data/test/call_trees_test.rb +66 -66
  86. data/test/duplicate_names_test.rb +32 -32
  87. data/test/dynamic_method_test.rb +50 -62
  88. data/test/enumerable_test.rb +23 -21
  89. data/test/exceptions_test.rb +24 -24
  90. data/test/exclude_methods_test.rb +363 -257
  91. data/test/exclude_threads_test.rb +48 -48
  92. data/test/fiber_test.rb +195 -195
  93. data/test/gc_test.rb +104 -102
  94. data/test/inverse_call_tree_test.rb +174 -174
  95. data/test/line_number_test.rb +563 -289
  96. data/test/marshal_test.rb +144 -145
  97. data/test/measure_allocations.rb +26 -26
  98. data/test/measure_allocations_test.rb +1511 -1081
  99. data/test/measure_process_time_test.rb +3286 -2477
  100. data/test/measure_times.rb +56 -56
  101. data/test/measure_wall_time_test.rb +773 -568
  102. data/test/measurement_test.rb +82 -82
  103. data/test/merge_test.rb +146 -146
  104. data/test/method_info_test.rb +100 -95
  105. data/test/multi_printer_test.rb +52 -66
  106. data/test/no_method_class_test.rb +15 -15
  107. data/test/pause_resume_test.rb +171 -171
  108. data/test/prime.rb +54 -54
  109. data/test/prime_script.rb +5 -5
  110. data/test/printer_call_stack_test.rb +28 -27
  111. data/test/printer_call_tree_test.rb +30 -30
  112. data/test/printer_flame_graph_test.rb +82 -0
  113. data/test/printer_flat_test.rb +99 -99
  114. data/test/printer_graph_html_test.rb +62 -59
  115. data/test/printer_graph_test.rb +42 -40
  116. data/test/printers_test.rb +162 -135
  117. data/test/printing_recursive_graph_test.rb +81 -81
  118. data/test/profile_test.rb +101 -101
  119. data/test/rack_test.rb +103 -93
  120. data/test/recursive_test.rb +796 -622
  121. data/test/scheduler.rb +4 -0
  122. data/test/singleton_test.rb +39 -38
  123. data/test/stack_printer_test.rb +61 -61
  124. data/test/start_stop_test.rb +106 -106
  125. data/test/test_helper.rb +24 -20
  126. data/test/thread_test.rb +229 -231
  127. data/test/unique_call_path_test.rb +123 -136
  128. data/test/yarv_test.rb +56 -60
  129. metadata +68 -16
  130. data/ext/ruby_prof/rp_measure_memory.c +0 -46
  131. data/lib/ruby-prof/compatibility.rb +0 -113
  132. data/test/compatibility_test.rb +0 -49
  133. data/test/crash2.rb +0 -144
  134. data/test/measure_memory_test.rb +0 -1456
@@ -1,57 +1,57 @@
1
- # encoding: utf-8
2
-
3
- module RubyProf
4
- # The CallTree class is used to track the relationships between methods. It is a helper class used by
5
- # RubyProf::MethodInfo to keep track of which methods called a given method and which methods a given
6
- # method called. Each CallTree has a parent and target method. You cannot create a CallTree object directly,
7
- # they are generated while running a profile.
8
- class CallTree
9
- # The number of times the parent method called the target method
10
- def called
11
- self.measurement.called
12
- end
13
-
14
- # The total time resulting from the parent method calling the target method
15
- def total_time
16
- self.measurement.total_time
17
- end
18
-
19
- # The self time (of the parent) resulting from the parent method calling the target method
20
- def self_time
21
- self.measurement.self_time
22
- end
23
-
24
- # The wait time (of the parent) resulting from the parent method calling the target method
25
- def wait_time
26
- self.measurement.wait_time
27
- end
28
-
29
- # The time spent in child methods resulting from the parent method calling the target method
30
- def children_time
31
- self.total_time - self.self_time - self.wait_time
32
- end
33
-
34
- # Compares two CallTree instances. The comparison is based on the CallTree#parent, CallTree#target,
35
- # and total time.
36
- def <=>(other)
37
- if self.target == other.target && self.parent == other.parent
38
- 0
39
- elsif self.total_time < other.total_time
40
- -1
41
- elsif self.total_time > other.total_time
42
- 1
43
- else
44
- self.target.full_name <=> other.target.full_name
45
- end
46
- end
47
-
48
- # :nodoc:
49
- def to_s
50
- "<#{self.class.name} - #{self.target.full_name}>"
51
- end
52
-
53
- def inspect
54
- self.to_s
55
- end
56
- end
57
- end
1
+ # encoding: utf-8
2
+
3
+ module RubyProf
4
+ # The CallTree class is used to track the relationships between methods. It is a helper class used by
5
+ # RubyProf::MethodInfo to keep track of which methods called a given method and which methods a given
6
+ # method called. Each CallTree has a parent and target method. You cannot create a CallTree object directly,
7
+ # they are generated while running a profile.
8
+ class CallTree
9
+ # The number of times the parent method called the target method
10
+ def called
11
+ self.measurement.called
12
+ end
13
+
14
+ # The total time resulting from the parent method calling the target method
15
+ def total_time
16
+ self.measurement.total_time
17
+ end
18
+
19
+ # The self time (of the parent) resulting from the parent method calling the target method
20
+ def self_time
21
+ self.measurement.self_time
22
+ end
23
+
24
+ # The wait time (of the parent) resulting from the parent method calling the target method
25
+ def wait_time
26
+ self.measurement.wait_time
27
+ end
28
+
29
+ # The time spent in child methods resulting from the parent method calling the target method
30
+ def children_time
31
+ self.total_time - self.self_time - self.wait_time
32
+ end
33
+
34
+ # Compares two CallTree instances. The comparison is based on the CallTree#parent, CallTree#target,
35
+ # and total time.
36
+ def <=>(other)
37
+ if self.target == other.target && self.parent == other.parent
38
+ 0
39
+ elsif self.total_time < other.total_time
40
+ -1
41
+ elsif self.total_time > other.total_time
42
+ 1
43
+ else
44
+ self.target.full_name <=> other.target.full_name
45
+ end
46
+ end
47
+
48
+ # :nodoc:
49
+ def to_s
50
+ "<#{self.class.name} - #{self.target.full_name}>"
51
+ end
52
+
53
+ def inspect
54
+ self.to_s
55
+ end
56
+ end
57
+ end
@@ -1,36 +1,36 @@
1
- module RubyProf
2
- # The call info visitor class does a depth-first traversal across a
3
- # list of call infos. At each call_tree node, the visitor executes
4
- # the block provided in the #visit method. The block is passed two
5
- # parameters, the event and the call_tree instance. Event will be
6
- # either :enter or :exit.
7
- #
8
- # visitor = RubyProf::CallTreeVisitor.new(result.threads.first.call_tree)
9
- #
10
- # method_names = Array.new
11
- #
12
- # visitor.visit do |call_tree, event|
13
- # method_names << call_tree.target.full_name if event == :enter
14
- # end
15
- #
16
- # puts method_names
17
- class CallTreeVisitor
18
- def initialize(call_tree)
19
- @call_tree = call_tree
20
- end
21
-
22
- def visit(&block)
23
- visit_call_tree(@call_tree, &block)
24
- end
25
-
26
- private
27
-
28
- def visit_call_tree(call_tree, &block)
29
- yield call_tree, :enter
30
- call_tree.children.each do |child|
31
- visit_call_tree(child, &block)
32
- end
33
- yield call_tree, :exit
34
- end
35
- end
36
- end
1
+ module RubyProf
2
+ # The call info visitor class does a depth-first traversal across a
3
+ # list of call infos. At each call_tree node, the visitor executes
4
+ # the block provided in the #visit method. The block is passed two
5
+ # parameters, the event and the call_tree instance. Event will be
6
+ # either :enter or :exit.
7
+ #
8
+ # visitor = RubyProf::CallTreeVisitor.new(result.threads.first.call_tree)
9
+ #
10
+ # method_names = Array.new
11
+ #
12
+ # visitor.visit do |call_tree, event|
13
+ # method_names << call_tree.target.full_name if event == :enter
14
+ # end
15
+ #
16
+ # puts method_names
17
+ class CallTreeVisitor
18
+ def initialize(call_tree)
19
+ @call_tree = call_tree
20
+ end
21
+
22
+ def visit(&block)
23
+ visit_call_tree(@call_tree, &block)
24
+ end
25
+
26
+ private
27
+
28
+ def visit_call_tree(call_tree, &block)
29
+ yield call_tree, :enter
30
+ call_tree.children.each do |child|
31
+ visit_call_tree(child, &block)
32
+ end
33
+ yield call_tree, :exit
34
+ end
35
+ end
36
+ end
@@ -1,204 +1,204 @@
1
- require 'set'
2
-
3
- # :enddoc:
4
- module RubyProf
5
- module ExcludeCommonMethods
6
- ENUMERABLE_NAMES = Enumerable.instance_methods(false)
7
-
8
- def self.apply!(profile)
9
- ##
10
- # Kernel Methods
11
- ##
12
-
13
- exclude_methods(profile, Kernel, [
14
- :dup,
15
- :initialize_dup,
16
- :tap,
17
- :send,
18
- :public_send,
19
- ])
20
-
21
- ##
22
- # Fundamental Types
23
- ##
24
-
25
- exclude_methods(profile, BasicObject, :!=)
26
- exclude_methods(profile, Kernel, :"block_given?")
27
- exclude_methods(profile, Method, :[])
28
- exclude_methods(profile, Module, :new)
29
- exclude_methods(profile, Class, :new)
30
- exclude_methods(profile, Proc, :call, :yield)
31
- exclude_methods(profile, Range, :each)
32
-
33
- ##
34
- # Value Types
35
- ##
36
-
37
- exclude_methods(profile, Integer, [
38
- :times,
39
- :succ,
40
- :<
41
- ])
42
-
43
- exclude_methods(profile, String, [
44
- :sub,
45
- :sub!,
46
- :gsub,
47
- :gsub!,
48
- ])
49
-
50
- ##
51
- # Emumerables
52
- ##
53
-
54
- exclude_enumerable(profile, Enumerable)
55
- exclude_enumerable(profile, Enumerator)
56
-
57
- ##
58
- # Collections
59
- ##
60
-
61
- exclude_enumerable(profile, Array, [
62
- :each_index,
63
- :map!,
64
- :select!,
65
- :reject!,
66
- :collect!,
67
- :sort!,
68
- :sort_by!,
69
- :index,
70
- :delete_if,
71
- :keep_if,
72
- :drop_while,
73
- :uniq,
74
- :uniq!,
75
- :"==",
76
- :eql?,
77
- :hash,
78
- :to_json,
79
- :as_json,
80
- :encode_json,
81
- ])
82
-
83
- exclude_enumerable(profile, Hash, [
84
- :dup,
85
- :initialize_dup,
86
- :fetch,
87
- :"[]",
88
- :"[]=",
89
- :each_key,
90
- :each_value,
91
- :each_pair,
92
- :map!,
93
- :select!,
94
- :reject!,
95
- :collect!,
96
- :delete_if,
97
- :keep_if,
98
- :slice,
99
- :slice!,
100
- :except,
101
- :except!,
102
- :"==",
103
- :eql?,
104
- :hash,
105
- :to_json,
106
- :as_json,
107
- :encode_json,
108
- ])
109
-
110
- exclude_enumerable(profile, Set, [
111
- :map!,
112
- :select!,
113
- :reject!,
114
- :collect!,
115
- :classify,
116
- :delete_if,
117
- :keep_if,
118
- :divide,
119
- :"==",
120
- :eql?,
121
- :hash,
122
- :to_json,
123
- :as_json,
124
- :encode_json,
125
- ])
126
-
127
- ##
128
- # Garbage Collection
129
- ##
130
-
131
- exclude_singleton_methods(profile, GC, [
132
- :start
133
- ])
134
-
135
- ##
136
- # Unicorn
137
- ##
138
-
139
- if defined?(Unicorn)
140
- exclude_methods(profile, Unicorn::HttpServer, :process_client)
141
- end
142
-
143
- if defined?(Unicorn::OobGC)
144
- exclude_methods(profile, Unicorn::OobGC, :process_client)
145
- end
146
-
147
- ##
148
- # New Relic
149
- ##
150
-
151
- if defined?(NewRelic::Agent)
152
- if defined?(NewRelic::Agent::Instrumentation::MiddlewareTracing)
153
- exclude_methods(profile, NewRelic::Agent::Instrumentation::MiddlewareTracing, [
154
- :call
155
- ])
156
- end
157
-
158
- if defined?(NewRelic::Agent::MethodTracerHelpers)
159
- exclude_methods(profile, NewRelic::Agent::MethodTracerHelpers, [
160
- :trace_execution_scoped,
161
- :log_errors,
162
- ])
163
-
164
- exclude_singleton_methods(profile, NewRelic::Agent::MethodTracerHelpers, [
165
- :trace_execution_scoped,
166
- :log_errors,
167
- ])
168
- end
169
-
170
- if defined?(NewRelic::Agent::MethodTracer)
171
- exclude_methods(profile, NewRelic::Agent::MethodTracer, [
172
- :trace_execution_scoped,
173
- :trace_execution_unscoped,
174
- ])
175
- end
176
- end
177
-
178
- ##
179
- # Miscellaneous Methods
180
- ##
181
-
182
- if defined?(Mustache)
183
- exclude_methods(profile, Mustache::Context, [
184
- :fetch
185
- ])
186
- end
187
- end
188
-
189
- private
190
-
191
- def self.exclude_enumerable(profile, mod, *method_or_methods)
192
- exclude_methods(profile, mod, [:each, *method_or_methods])
193
- exclude_methods(profile, mod, ENUMERABLE_NAMES)
194
- end
195
-
196
- def self.exclude_methods(profile, mod, *method_or_methods)
197
- profile.exclude_methods!(mod, method_or_methods)
198
- end
199
-
200
- def self.exclude_singleton_methods(profile, mod, *method_or_methods)
201
- profile.exclude_singleton_methods!(mod, method_or_methods)
202
- end
203
- end
204
- end
1
+ require 'set'
2
+
3
+ # :enddoc:
4
+ module RubyProf
5
+ module ExcludeCommonMethods
6
+ ENUMERABLE_NAMES = Enumerable.instance_methods(false)
7
+
8
+ def self.apply!(profile)
9
+ ##
10
+ # Kernel Methods
11
+ ##
12
+
13
+ exclude_methods(profile, Kernel, [
14
+ :dup,
15
+ :initialize_dup,
16
+ :tap,
17
+ :send,
18
+ :public_send,
19
+ ])
20
+
21
+ ##
22
+ # Fundamental Types
23
+ ##
24
+
25
+ exclude_methods(profile, BasicObject, :!=)
26
+ exclude_methods(profile, Kernel, :"block_given?")
27
+ exclude_methods(profile, Method, :[])
28
+ exclude_methods(profile, Module, :new)
29
+ exclude_methods(profile, Class, :new)
30
+ exclude_methods(profile, Proc, :call, :yield)
31
+ exclude_methods(profile, Range, :each)
32
+
33
+ ##
34
+ # Value Types
35
+ ##
36
+
37
+ exclude_methods(profile, Integer, [
38
+ :times,
39
+ :succ,
40
+ :<
41
+ ])
42
+
43
+ exclude_methods(profile, String, [
44
+ :sub,
45
+ :sub!,
46
+ :gsub,
47
+ :gsub!,
48
+ ])
49
+
50
+ ##
51
+ # Emumerables
52
+ ##
53
+
54
+ exclude_enumerable(profile, Enumerable)
55
+ exclude_enumerable(profile, Enumerator)
56
+
57
+ ##
58
+ # Collections
59
+ ##
60
+
61
+ exclude_enumerable(profile, Array, [
62
+ :each_index,
63
+ :map!,
64
+ :select!,
65
+ :reject!,
66
+ :collect!,
67
+ :sort!,
68
+ :sort_by!,
69
+ :index,
70
+ :delete_if,
71
+ :keep_if,
72
+ :drop_while,
73
+ :uniq,
74
+ :uniq!,
75
+ :"==",
76
+ :eql?,
77
+ :hash,
78
+ :to_json,
79
+ :as_json,
80
+ :encode_json,
81
+ ])
82
+
83
+ exclude_enumerable(profile, Hash, [
84
+ :dup,
85
+ :initialize_dup,
86
+ :fetch,
87
+ :"[]",
88
+ :"[]=",
89
+ :each_key,
90
+ :each_value,
91
+ :each_pair,
92
+ :map!,
93
+ :select!,
94
+ :reject!,
95
+ :collect!,
96
+ :delete_if,
97
+ :keep_if,
98
+ :slice,
99
+ :slice!,
100
+ :except,
101
+ :except!,
102
+ :"==",
103
+ :eql?,
104
+ :hash,
105
+ :to_json,
106
+ :as_json,
107
+ :encode_json,
108
+ ])
109
+
110
+ exclude_enumerable(profile, Set, [
111
+ :map!,
112
+ :select!,
113
+ :reject!,
114
+ :collect!,
115
+ :classify,
116
+ :delete_if,
117
+ :keep_if,
118
+ :divide,
119
+ :"==",
120
+ :eql?,
121
+ :hash,
122
+ :to_json,
123
+ :as_json,
124
+ :encode_json,
125
+ ])
126
+
127
+ ##
128
+ # Garbage Collection
129
+ ##
130
+
131
+ exclude_singleton_methods(profile, GC, [
132
+ :start
133
+ ])
134
+
135
+ ##
136
+ # Unicorn
137
+ ##
138
+
139
+ if defined?(Unicorn)
140
+ exclude_methods(profile, Unicorn::HttpServer, :process_client)
141
+ end
142
+
143
+ if defined?(Unicorn::OobGC)
144
+ exclude_methods(profile, Unicorn::OobGC, :process_client)
145
+ end
146
+
147
+ ##
148
+ # New Relic
149
+ ##
150
+
151
+ if defined?(NewRelic::Agent)
152
+ if defined?(NewRelic::Agent::Instrumentation::MiddlewareTracing)
153
+ exclude_methods(profile, NewRelic::Agent::Instrumentation::MiddlewareTracing, [
154
+ :call
155
+ ])
156
+ end
157
+
158
+ if defined?(NewRelic::Agent::MethodTracerHelpers)
159
+ exclude_methods(profile, NewRelic::Agent::MethodTracerHelpers, [
160
+ :trace_execution_scoped,
161
+ :log_errors,
162
+ ])
163
+
164
+ exclude_singleton_methods(profile, NewRelic::Agent::MethodTracerHelpers, [
165
+ :trace_execution_scoped,
166
+ :log_errors,
167
+ ])
168
+ end
169
+
170
+ if defined?(NewRelic::Agent::MethodTracer)
171
+ exclude_methods(profile, NewRelic::Agent::MethodTracer, [
172
+ :trace_execution_scoped,
173
+ :trace_execution_unscoped,
174
+ ])
175
+ end
176
+ end
177
+
178
+ ##
179
+ # Miscellaneous Methods
180
+ ##
181
+
182
+ if defined?(Mustache)
183
+ exclude_methods(profile, Mustache::Context, [
184
+ :fetch
185
+ ])
186
+ end
187
+ end
188
+
189
+ private
190
+
191
+ def self.exclude_enumerable(profile, mod, *method_or_methods)
192
+ exclude_methods(profile, mod, [:each, *method_or_methods])
193
+ exclude_methods(profile, mod, ENUMERABLE_NAMES)
194
+ end
195
+
196
+ def self.exclude_methods(profile, mod, *method_or_methods)
197
+ profile.exclude_methods!(mod, method_or_methods)
198
+ end
199
+
200
+ def self.exclude_singleton_methods(profile, mod, *method_or_methods)
201
+ profile.exclude_singleton_methods!(mod, method_or_methods)
202
+ end
203
+ end
204
+ end
@@ -1,17 +1,17 @@
1
- module RubyProf
2
- # The Measurement class is a helper class used by RubyProf::MethodInfo to store information about the method.
3
- # You cannot create a CallTree object directly, they are generated while running a profile.
4
- class Measurement
5
- def children_time
6
- self.total_time - self.self_time - self.wait_time
7
- end
8
-
9
- def to_s
10
- "c: #{called}, tt: #{total_time}, st: #{self_time}"
11
- end
12
-
13
- def inspect
14
- super + "(#{self.to_s})"
15
- end
16
- end
17
- end
1
+ module RubyProf
2
+ # The Measurement class is a helper class used by RubyProf::MethodInfo to store information about the method.
3
+ # You cannot create a CallTree object directly, they are generated while running a profile.
4
+ class Measurement
5
+ def children_time
6
+ self.total_time - self.self_time - self.wait_time
7
+ end
8
+
9
+ def to_s
10
+ "c: #{called}, tt: #{total_time}, st: #{self_time}"
11
+ end
12
+
13
+ def inspect
14
+ super + "(#{self.to_s})"
15
+ end
16
+ end
17
+ end