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,32 +1,32 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class MeasureGCRunsTest < TestCase
7
- include MemoryTestHelper
8
-
9
- def test_gc_runs_mode
10
- RubyProf::measure_mode = RubyProf::GC_RUNS
11
- assert_equal(RubyProf::GC_RUNS, RubyProf::measure_mode)
12
- end
13
-
14
- def test_gc_runs_enabled_defined
15
- assert(defined?(RubyProf::GC_RUNS_ENABLED))
16
- end
17
-
18
- if RubyProf::GC_RUNS_ENABLED
19
- def test_gc_runs
20
- t = RubyProf.measure_gc_runs
21
- assert_kind_of Integer, t
22
-
23
- GC.enable_stats if GC.respond_to?(:enable_stats)
24
- GC.start
25
-
26
- u = RubyProf.measure_gc_runs
27
- assert u > t, [t, u].inspect
28
- RubyProf::measure_mode = RubyProf::GC_RUNS
29
- memory_test_helper
30
- end
31
- end
32
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ class MeasureGCRunsTest < TestCase
7
+ include MemoryTestHelper
8
+
9
+ def test_gc_runs_mode
10
+ RubyProf::measure_mode = RubyProf::GC_RUNS
11
+ assert_equal(RubyProf::GC_RUNS, RubyProf::measure_mode)
12
+ end
13
+
14
+ def test_gc_runs_enabled_defined
15
+ assert(defined?(RubyProf::GC_RUNS_ENABLED))
16
+ end
17
+
18
+ if RubyProf::GC_RUNS_ENABLED
19
+ def test_gc_runs
20
+ t = RubyProf.measure_gc_runs
21
+ assert_kind_of Integer, t
22
+
23
+ GC.enable_stats if GC.respond_to?(:enable_stats)
24
+ GC.start
25
+
26
+ u = RubyProf.measure_gc_runs
27
+ assert u > t, [t, u].inspect
28
+ RubyProf::measure_mode = RubyProf::GC_RUNS
29
+ memory_test_helper
30
+ end
31
+ end
32
+ end
@@ -1,36 +1,36 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class MeasureGCTimeTest < TestCase
7
- include MemoryTestHelper
8
-
9
- def test_gc_time_mode
10
- RubyProf::measure_mode = RubyProf::GC_TIME
11
- assert_equal(RubyProf::GC_TIME, RubyProf::measure_mode)
12
- end
13
-
14
- def test_gc_time_enabled_defined
15
- assert(defined?(RubyProf::GC_TIME_ENABLED))
16
- end
17
-
18
- if RubyProf::GC_TIME_ENABLED
19
- def test_gc_time
20
- RubyProf::measure_mode = RubyProf::GC_TIME
21
- RubyProf.enable_gc_stats_if_needed
22
-
23
- t = RubyProf.measure_gc_time
24
- assert_kind_of Float, t
25
-
26
- GC.start
27
-
28
- u = RubyProf.measure_gc_time
29
- assert u > t, [t, u].inspect
30
-
31
- memory_test_helper
32
- ensure
33
- RubyProf.disable_gc_stats_if_needed
34
- end
35
- end
36
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ class MeasureGCTimeTest < TestCase
7
+ include MemoryTestHelper
8
+
9
+ def test_gc_time_mode
10
+ RubyProf::measure_mode = RubyProf::GC_TIME
11
+ assert_equal(RubyProf::GC_TIME, RubyProf::measure_mode)
12
+ end
13
+
14
+ def test_gc_time_enabled_defined
15
+ assert(defined?(RubyProf::GC_TIME_ENABLED))
16
+ end
17
+
18
+ if RubyProf::GC_TIME_ENABLED
19
+ def test_gc_time
20
+ RubyProf::measure_mode = RubyProf::GC_TIME
21
+ RubyProf.enable_gc_stats_if_needed
22
+
23
+ t = RubyProf.measure_gc_time
24
+ assert_kind_of Float, t
25
+
26
+ GC.start
27
+
28
+ u = RubyProf.measure_gc_time
29
+ assert u > t, [t, u].inspect
30
+
31
+ memory_test_helper
32
+ ensure
33
+ RubyProf.disable_gc_stats_if_needed
34
+ end
35
+ end
36
+ end
@@ -1,33 +1,33 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class MeasureMemoryTest < TestCase
7
- include MemoryTestHelper
8
-
9
- def test_memory_mode
10
- RubyProf::measure_mode = RubyProf::MEMORY
11
- assert_equal(RubyProf::MEMORY, RubyProf::measure_mode)
12
- end
13
-
14
- def test_memory_enabled_defined
15
- assert(defined?(RubyProf::MEMORY_ENABLED))
16
- end
17
-
18
- if RubyProf::MEMORY_ENABLED
19
- def test_memory
20
- RubyProf::measure_mode = RubyProf::MEMORY
21
- RubyProf.enable_gc_stats_if_needed
22
- t = RubyProf.measure_memory
23
- assert_kind_of Float, t
24
- u = RubyProf.measure_memory
25
- assert_operator u, :>, t
26
- total = memory_test_helper
27
- assert(total > 0, 'Should measure more than zero kilobytes of memory usage')
28
- refute_equal(0, total % 1, 'Should not truncate fractional kilobyte measurements')
29
- ensure
30
- RubyProf.disable_gc_stats_if_needed
31
- end
32
- end
33
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ class MeasureMemoryTest < TestCase
7
+ include MemoryTestHelper
8
+
9
+ def test_memory_mode
10
+ RubyProf::measure_mode = RubyProf::MEMORY
11
+ assert_equal(RubyProf::MEMORY, RubyProf::measure_mode)
12
+ end
13
+
14
+ def test_memory_enabled_defined
15
+ assert(defined?(RubyProf::MEMORY_ENABLED))
16
+ end
17
+
18
+ if RubyProf::MEMORY_ENABLED
19
+ def test_memory
20
+ RubyProf::measure_mode = RubyProf::MEMORY
21
+ RubyProf.enable_gc_stats_if_needed
22
+ t = RubyProf.measure_memory
23
+ assert_kind_of Float, t
24
+ u = RubyProf.measure_memory
25
+ assert_operator u, :>, t
26
+ total = memory_test_helper
27
+ assert(total > 0, 'Should measure more than zero kilobytes of memory usage')
28
+ refute_equal(0, total % 1, 'Should not truncate fractional kilobyte measurements')
29
+ ensure
30
+ RubyProf.disable_gc_stats_if_needed
31
+ end
32
+ end
33
+ end
@@ -1,63 +1,61 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class MeasureProcessTimeTest < TestCase
7
- def setup
8
- # Need to fix this for linux (windows works since PROCESS_TIME is WALL_TIME anyway)
9
- RubyProf::measure_mode = RubyProf::PROCESS_TIME
10
- end
11
-
12
- def test_mode
13
- assert_equal(RubyProf::PROCESS_TIME, RubyProf::measure_mode)
14
- end
15
-
16
- def test_process_time_enabled_defined
17
- assert(defined?(RubyProf::PROCESS_TIME_ENABLED))
18
- end
19
-
20
- def test_primes
21
- start = Process.times
22
- result = RubyProf.profile do
23
- run_primes(10000)
24
- end
25
- finish = Process.times
26
-
27
- total_time = (finish.utime - start.utime) + (finish.stime - start.stime)
28
-
29
- thread = result.threads.first
30
- assert_in_delta(total_time, thread.total_time, 0.03)
31
-
32
- methods = result.threads.first.methods.sort.reverse
33
-
34
- expected_number_of_methods =
35
- case RUBY_VERSION
36
- when /^1\.9\.3/ then 16
37
- when /^2\.0/ then 15
38
- when /^2\.(1|2)/ then 14
39
- else 13
40
- end
41
- # puts methods.map(&:full_name).inspect
42
- assert_equal expected_number_of_methods, methods.length
43
-
44
- # Check times
45
- assert_equal("MeasureProcessTimeTest#test_primes", methods[0].full_name)
46
- assert_in_delta(total_time, methods[0].total_time, 0.02)
47
- assert_in_delta(0.0, methods[0].wait_time, 0.01)
48
- assert_in_delta(0.0, methods[0].self_time, 0.01)
49
-
50
- assert_equal("Object#run_primes", methods[1].full_name)
51
- assert_in_delta(total_time, methods[1].total_time, 0.02)
52
- assert_in_delta(0.0, methods[1].wait_time, 0.01)
53
- assert_in_delta(0.0, methods[1].self_time, 0.01)
54
-
55
- assert_equal("Object#find_primes", methods[2].full_name)
56
- assert_equal("Array#select", methods[3].full_name)
57
- assert_equal("Object#is_prime", methods[4].full_name)
58
- assert_equal("Integer#upto", methods[5].full_name)
59
- assert_equal("Object#make_random_array", methods[6].full_name)
60
- assert_equal("Array#each_index", methods[7].full_name)
61
- assert_equal("Kernel#rand", methods[8].full_name)
62
- end
63
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ class MeasureProcessTimeTest < TestCase
7
+ def setup
8
+ # Need to fix this for linux (windows works since PROCESS_TIME is WALL_TIME anyway)
9
+ RubyProf::measure_mode = RubyProf::PROCESS_TIME
10
+ end
11
+
12
+ def test_mode
13
+ assert_equal(RubyProf::PROCESS_TIME, RubyProf::measure_mode)
14
+ end
15
+
16
+ def test_process_time_enabled_defined
17
+ assert(defined?(RubyProf::PROCESS_TIME_ENABLED))
18
+ end
19
+
20
+ def test_primes
21
+ start = Process.times
22
+ result = RubyProf.profile do
23
+ run_primes(10000)
24
+ end
25
+ finish = Process.times
26
+
27
+ total_time = (finish.utime - start.utime) + (finish.stime - start.stime)
28
+
29
+ thread = result.threads.first
30
+ assert_in_delta(total_time, thread.total_time, 0.03)
31
+
32
+ methods = result.threads.first.methods.sort.reverse
33
+
34
+ expected_number_of_methods =
35
+ case RUBY_VERSION
36
+ when /^2\.(1|2)/ then 14
37
+ else 13
38
+ end
39
+ # puts methods.map(&:full_name).inspect
40
+ assert_equal expected_number_of_methods, methods.length
41
+
42
+ # Check times
43
+ assert_equal("MeasureProcessTimeTest#test_primes", methods[0].full_name)
44
+ assert_in_delta(total_time, methods[0].total_time, 0.02)
45
+ assert_in_delta(0.0, methods[0].wait_time, 0.01)
46
+ assert_in_delta(0.0, methods[0].self_time, 0.01)
47
+
48
+ assert_equal("Object#run_primes", methods[1].full_name)
49
+ assert_in_delta(total_time, methods[1].total_time, 0.02)
50
+ assert_in_delta(0.0, methods[1].wait_time, 0.01)
51
+ assert_in_delta(0.0, methods[1].self_time, 0.01)
52
+
53
+ assert_equal("Object#find_primes", methods[2].full_name)
54
+ assert_equal("Array#select", methods[3].full_name)
55
+ assert_equal("Object#is_prime", methods[4].full_name)
56
+ assert_equal("Integer#upto", methods[5].full_name)
57
+ assert_equal("Object#make_random_array", methods[6].full_name)
58
+ assert_equal("Array#each_index", methods[7].full_name)
59
+ assert_equal("Kernel#rand", methods[8].full_name)
60
+ end
61
+ end
@@ -1,255 +1,255 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class MeasureWallTimeTest < TestCase
7
- def setup
8
- # Need to use wall time for this test due to the sleep calls
9
- RubyProf::measure_mode = RubyProf::WALL_TIME
10
- end
11
-
12
- def test_mode
13
- RubyProf::measure_mode = RubyProf::WALL_TIME
14
- assert_equal(RubyProf::WALL_TIME, RubyProf::measure_mode)
15
- end
16
-
17
- def test_wall_time_enabled_defined
18
- assert(defined?(RubyProf::WALL_TIME_ENABLED))
19
- end
20
-
21
- def test_class_methods
22
- result = RubyProf.profile do
23
- RubyProf::C1.hello
24
- end
25
-
26
- thread = result.threads.first
27
- assert_in_delta(0.1, thread.total_time, 0.01)
28
-
29
- top_methods = thread.top_methods
30
- assert_equal(1, top_methods.count)
31
- assert_equal("MeasureWallTimeTest#test_class_methods", top_methods[0].full_name)
32
-
33
- # Length should be 3:
34
- # MeasureWallTimeTest#test_class_methods
35
- # <Class::RubyProf::C1>#hello
36
- # Kernel#sleep
37
-
38
- methods = result.threads.first.methods.sort.reverse
39
- assert_equal(3, methods.length)
40
-
41
- # Check the names
42
- assert_equal('MeasureWallTimeTest#test_class_methods', methods[0].full_name)
43
- assert_equal('<Class::RubyProf::C1>#hello', methods[1].full_name)
44
- assert_equal('Kernel#sleep', methods[2].full_name)
45
-
46
- # Check times
47
- assert_in_delta(0.1, methods[0].total_time, 0.01)
48
- assert_in_delta(0, methods[0].wait_time, 0.01)
49
- assert_in_delta(0, methods[0].self_time, 0.01)
50
-
51
- assert_in_delta(0.1, methods[1].total_time, 0.01)
52
- assert_in_delta(0, methods[1].wait_time, 0.01)
53
- assert_in_delta(0, methods[1].self_time, 0.01)
54
-
55
- assert_in_delta(0.1, methods[2].total_time, 0.01)
56
- assert_in_delta(0, methods[2].wait_time, 0.01)
57
- assert_in_delta(0.1, methods[2].self_time, 0.01)
58
- end
59
-
60
- def test_instance_methods
61
- result = RubyProf.profile do
62
- RubyProf::C1.new.hello
63
- end
64
-
65
- thread = result.threads.first
66
- assert_in_delta(0.2, thread.total_time, 0.01)
67
-
68
- top_methods = thread.top_methods
69
- assert_equal(1, top_methods.count)
70
- assert_equal("MeasureWallTimeTest#test_instance_methods", top_methods[0].full_name)
71
-
72
- # Methods called
73
- # MeasureWallTimeTest#test_instance_methods
74
- # Class.new
75
- # Class:Object#allocate
76
- # for Object#initialize
77
- # C1#hello
78
- # Kernel#sleep
79
-
80
- methods = result.threads.first.methods.sort.reverse
81
- assert_equal(RubyProf.ruby_2? ? 5 : 6, methods.length)
82
- names = methods.map(&:full_name)
83
- assert_equal('MeasureWallTimeTest#test_instance_methods', names[0])
84
- assert_equal('RubyProf::C1#hello', names[1])
85
- assert_equal('Kernel#sleep', names[2])
86
- assert_equal('Class#new', names[3])
87
-
88
- # order can differ
89
- assert(names.include?("#{RubyProf.parent_object}#initialize"))
90
- unless RubyProf.ruby_2?
91
- assert(names.include?("<Class::#{RubyProf.parent_object}>#allocate"))
92
- end
93
-
94
- # Check times
95
- assert_in_delta(0.2, methods[0].total_time, 0.02)
96
- assert_in_delta(0, methods[0].wait_time, 0.02)
97
- assert_in_delta(0, methods[0].self_time, 0.02)
98
-
99
- assert_in_delta(0.2, methods[1].total_time, 0.02)
100
- assert_in_delta(0, methods[1].wait_time, 0.02)
101
- assert_in_delta(0, methods[1].self_time, 0.02)
102
-
103
- assert_in_delta(0.2, methods[2].total_time, 0.02)
104
- assert_in_delta(0, methods[2].wait_time, 0.02)
105
- assert_in_delta(0.2, methods[2].self_time, 0.02)
106
-
107
- assert_in_delta(0, methods[3].total_time, 0.01)
108
- assert_in_delta(0, methods[3].wait_time, 0.01)
109
- assert_in_delta(0, methods[3].self_time, 0.01)
110
-
111
- assert_in_delta(0, methods[4].total_time, 0.01)
112
- assert_in_delta(0, methods[4].wait_time, 0.01)
113
- assert_in_delta(0, methods[4].self_time, 0.01)
114
-
115
- unless RubyProf.ruby_2?
116
- assert_in_delta(0, methods[5].total_time, 0.01)
117
- assert_in_delta(0, methods[5].wait_time, 0.01)
118
- assert_in_delta(0, methods[5].self_time, 0.01)
119
- end
120
- end
121
-
122
- def test_module_methods
123
- result = RubyProf.profile do
124
- RubyProf::C2.hello
125
- end
126
-
127
- thread = result.threads.first
128
- assert_in_delta(0.3, thread.total_time, 0.01)
129
-
130
- top_methods = thread.top_methods
131
- assert_equal(1, top_methods.count)
132
- assert_equal("MeasureWallTimeTest#test_module_methods", top_methods[0].full_name)
133
-
134
- # Methods:
135
- # MeasureWallTimeTest#test_module_methods
136
- # M1#hello
137
- # Kernel#sleep
138
-
139
- methods = result.threads.first.methods.sort.reverse
140
- assert_equal(3, methods.length)
141
-
142
- assert_equal('MeasureWallTimeTest#test_module_methods', methods[0].full_name)
143
- assert_equal('RubyProf::M1#hello', methods[1].full_name)
144
- assert_equal('Kernel#sleep', methods[2].full_name)
145
-
146
- # Check times
147
- assert_in_delta(0.3, methods[0].total_time, 0.1)
148
- assert_in_delta(0, methods[0].wait_time, 0.02)
149
- assert_in_delta(0, methods[0].self_time, 0.02)
150
-
151
- assert_in_delta(0.3, methods[1].total_time, 0.1)
152
- assert_in_delta(0, methods[1].wait_time, 0.02)
153
- assert_in_delta(0, methods[1].self_time, 0.02)
154
-
155
- assert_in_delta(0.3, methods[2].total_time, 0.1)
156
- assert_in_delta(0, methods[2].wait_time, 0.02)
157
- assert_in_delta(0.3, methods[2].self_time, 0.1)
158
- end
159
-
160
- def test_module_instance_methods
161
- result = RubyProf.profile do
162
- RubyProf::C2.new.hello
163
- end
164
-
165
- thread = result.threads.first
166
- assert_in_delta(0.3, thread.total_time, 0.01)
167
-
168
- top_methods = thread.top_methods
169
- assert_equal(1, top_methods.count)
170
- assert_equal("MeasureWallTimeTest#test_module_instance_methods", top_methods[0].full_name)
171
-
172
- # Methods:
173
- # MeasureWallTimeTest#test_module_instance_methods
174
- # Class#new
175
- # <Class::Object>#allocate
176
- # Object#initialize
177
- # M1#hello
178
- # Kernel#sleep
179
-
180
- methods = result.threads.first.methods.sort.reverse
181
- assert_equal(RubyProf.ruby_2? ? 5 : 6, methods.length)
182
- names = methods.map(&:full_name)
183
- assert_equal('MeasureWallTimeTest#test_module_instance_methods', names[0])
184
- assert_equal('RubyProf::M1#hello', names[1])
185
- assert_equal('Kernel#sleep', names[2])
186
- assert_equal('Class#new', names[3])
187
-
188
- # order can differ
189
- assert(names.include?("#{RubyProf.parent_object}#initialize"))
190
- unless RubyProf.ruby_2?
191
- assert(names.include?("<Class::#{RubyProf.parent_object}>#allocate"))
192
- end
193
-
194
- # Check times
195
- assert_in_delta(0.3, methods[0].total_time, 0.1)
196
- assert_in_delta(0, methods[0].wait_time, 0.1)
197
- assert_in_delta(0, methods[0].self_time, 0.1)
198
-
199
- assert_in_delta(0.3, methods[1].total_time, 0.02)
200
- assert_in_delta(0, methods[1].wait_time, 0.01)
201
- assert_in_delta(0, methods[1].self_time, 0.01)
202
-
203
- assert_in_delta(0.3, methods[2].total_time, 0.02)
204
- assert_in_delta(0, methods[2].wait_time, 0.01)
205
- assert_in_delta(0.3, methods[2].self_time, 0.02)
206
-
207
- assert_in_delta(0, methods[3].total_time, 0.01)
208
- assert_in_delta(0, methods[3].wait_time, 0.01)
209
- assert_in_delta(0, methods[3].self_time, 0.01)
210
-
211
- assert_in_delta(0, methods[4].total_time, 0.01)
212
- assert_in_delta(0, methods[4].wait_time, 0.01)
213
- assert_in_delta(0, methods[4].self_time, 0.01)
214
-
215
- unless RubyProf.ruby_2?
216
- assert_in_delta(0, methods[5].total_time, 0.01)
217
- assert_in_delta(0, methods[5].wait_time, 0.01)
218
- assert_in_delta(0, methods[5].self_time, 0.01)
219
- end
220
- end
221
-
222
- def test_singleton
223
- c3 = RubyProf::C3.new
224
-
225
- class << c3
226
- def hello
227
- end
228
- end
229
-
230
- result = RubyProf.profile do
231
- c3.hello
232
- end
233
-
234
- thread = result.threads.first
235
- assert_in_delta(0.0, thread.total_time, 0.01)
236
-
237
- top_methods = thread.top_methods
238
- assert_equal(1, top_methods.count)
239
- assert_equal("MeasureWallTimeTest#test_singleton", top_methods[0].full_name)
240
-
241
- methods = result.threads.first.methods.sort.reverse
242
- assert_equal(2, methods.length)
243
-
244
- assert_equal('MeasureWallTimeTest#test_singleton', methods[0].full_name)
245
- assert_equal('<Object::RubyProf::C3>#hello', methods[1].full_name)
246
-
247
- assert_in_delta(0, methods[0].total_time, 0.01)
248
- assert_in_delta(0, methods[0].wait_time, 0.01)
249
- assert_in_delta(0, methods[0].self_time, 0.01)
250
-
251
- assert_in_delta(0, methods[1].total_time, 0.01)
252
- assert_in_delta(0, methods[1].wait_time, 0.01)
253
- assert_in_delta(0, methods[1].self_time, 0.01)
254
- end
255
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ class MeasureWallTimeTest < TestCase
7
+ def setup
8
+ # Need to use wall time for this test due to the sleep calls
9
+ RubyProf::measure_mode = RubyProf::WALL_TIME
10
+ end
11
+
12
+ def test_mode
13
+ RubyProf::measure_mode = RubyProf::WALL_TIME
14
+ assert_equal(RubyProf::WALL_TIME, RubyProf::measure_mode)
15
+ end
16
+
17
+ def test_wall_time_enabled_defined
18
+ assert(defined?(RubyProf::WALL_TIME_ENABLED))
19
+ end
20
+
21
+ def test_class_methods
22
+ result = RubyProf.profile do
23
+ RubyProf::C1.hello
24
+ end
25
+
26
+ thread = result.threads.first
27
+ assert_in_delta(0.1, thread.total_time, 0.01)
28
+
29
+ top_methods = thread.top_methods
30
+ assert_equal(1, top_methods.count)
31
+ assert_equal("MeasureWallTimeTest#test_class_methods", top_methods[0].full_name)
32
+
33
+ # Length should be 3:
34
+ # MeasureWallTimeTest#test_class_methods
35
+ # <Class::RubyProf::C1>#hello
36
+ # Kernel#sleep
37
+
38
+ methods = result.threads.first.methods.sort.reverse
39
+ assert_equal(3, methods.length)
40
+
41
+ # Check the names
42
+ assert_equal('MeasureWallTimeTest#test_class_methods', methods[0].full_name)
43
+ assert_equal('<Class::RubyProf::C1>#hello', methods[1].full_name)
44
+ assert_equal('Kernel#sleep', methods[2].full_name)
45
+
46
+ # Check times
47
+ assert_in_delta(0.1, methods[0].total_time, 0.01)
48
+ assert_in_delta(0, methods[0].wait_time, 0.01)
49
+ assert_in_delta(0, methods[0].self_time, 0.01)
50
+
51
+ assert_in_delta(0.1, methods[1].total_time, 0.01)
52
+ assert_in_delta(0, methods[1].wait_time, 0.01)
53
+ assert_in_delta(0, methods[1].self_time, 0.01)
54
+
55
+ assert_in_delta(0.1, methods[2].total_time, 0.01)
56
+ assert_in_delta(0, methods[2].wait_time, 0.01)
57
+ assert_in_delta(0.1, methods[2].self_time, 0.01)
58
+ end
59
+
60
+ def test_instance_methods
61
+ result = RubyProf.profile do
62
+ RubyProf::C1.new.hello
63
+ end
64
+
65
+ thread = result.threads.first
66
+ assert_in_delta(0.2, thread.total_time, 0.01)
67
+
68
+ top_methods = thread.top_methods
69
+ assert_equal(1, top_methods.count)
70
+ assert_equal("MeasureWallTimeTest#test_instance_methods", top_methods[0].full_name)
71
+
72
+ # Methods called
73
+ # MeasureWallTimeTest#test_instance_methods
74
+ # Class.new
75
+ # Class:Object#allocate
76
+ # for Object#initialize
77
+ # C1#hello
78
+ # Kernel#sleep
79
+
80
+ methods = result.threads.first.methods.sort.reverse
81
+ assert_equal(RubyProf.ruby_2? ? 5 : 6, methods.length)
82
+ names = methods.map(&:full_name)
83
+ assert_equal('MeasureWallTimeTest#test_instance_methods', names[0])
84
+ assert_equal('RubyProf::C1#hello', names[1])
85
+ assert_equal('Kernel#sleep', names[2])
86
+ assert_equal('Class#new', names[3])
87
+
88
+ # order can differ
89
+ assert(names.include?("#{RubyProf.parent_object}#initialize"))
90
+ unless RubyProf.ruby_2?
91
+ assert(names.include?("<Class::#{RubyProf.parent_object}>#allocate"))
92
+ end
93
+
94
+ # Check times
95
+ assert_in_delta(0.2, methods[0].total_time, 0.02)
96
+ assert_in_delta(0, methods[0].wait_time, 0.02)
97
+ assert_in_delta(0, methods[0].self_time, 0.02)
98
+
99
+ assert_in_delta(0.2, methods[1].total_time, 0.02)
100
+ assert_in_delta(0, methods[1].wait_time, 0.02)
101
+ assert_in_delta(0, methods[1].self_time, 0.02)
102
+
103
+ assert_in_delta(0.2, methods[2].total_time, 0.02)
104
+ assert_in_delta(0, methods[2].wait_time, 0.02)
105
+ assert_in_delta(0.2, methods[2].self_time, 0.02)
106
+
107
+ assert_in_delta(0, methods[3].total_time, 0.01)
108
+ assert_in_delta(0, methods[3].wait_time, 0.01)
109
+ assert_in_delta(0, methods[3].self_time, 0.01)
110
+
111
+ assert_in_delta(0, methods[4].total_time, 0.01)
112
+ assert_in_delta(0, methods[4].wait_time, 0.01)
113
+ assert_in_delta(0, methods[4].self_time, 0.01)
114
+
115
+ unless RubyProf.ruby_2?
116
+ assert_in_delta(0, methods[5].total_time, 0.01)
117
+ assert_in_delta(0, methods[5].wait_time, 0.01)
118
+ assert_in_delta(0, methods[5].self_time, 0.01)
119
+ end
120
+ end
121
+
122
+ def test_module_methods
123
+ result = RubyProf.profile do
124
+ RubyProf::C2.hello
125
+ end
126
+
127
+ thread = result.threads.first
128
+ assert_in_delta(0.3, thread.total_time, 0.01)
129
+
130
+ top_methods = thread.top_methods
131
+ assert_equal(1, top_methods.count)
132
+ assert_equal("MeasureWallTimeTest#test_module_methods", top_methods[0].full_name)
133
+
134
+ # Methods:
135
+ # MeasureWallTimeTest#test_module_methods
136
+ # M1#hello
137
+ # Kernel#sleep
138
+
139
+ methods = result.threads.first.methods.sort.reverse
140
+ assert_equal(3, methods.length)
141
+
142
+ assert_equal('MeasureWallTimeTest#test_module_methods', methods[0].full_name)
143
+ assert_equal('RubyProf::M1#hello', methods[1].full_name)
144
+ assert_equal('Kernel#sleep', methods[2].full_name)
145
+
146
+ # Check times
147
+ assert_in_delta(0.3, methods[0].total_time, 0.1)
148
+ assert_in_delta(0, methods[0].wait_time, 0.02)
149
+ assert_in_delta(0, methods[0].self_time, 0.02)
150
+
151
+ assert_in_delta(0.3, methods[1].total_time, 0.1)
152
+ assert_in_delta(0, methods[1].wait_time, 0.02)
153
+ assert_in_delta(0, methods[1].self_time, 0.02)
154
+
155
+ assert_in_delta(0.3, methods[2].total_time, 0.1)
156
+ assert_in_delta(0, methods[2].wait_time, 0.02)
157
+ assert_in_delta(0.3, methods[2].self_time, 0.1)
158
+ end
159
+
160
+ def test_module_instance_methods
161
+ result = RubyProf.profile do
162
+ RubyProf::C2.new.hello
163
+ end
164
+
165
+ thread = result.threads.first
166
+ assert_in_delta(0.3, thread.total_time, 0.01)
167
+
168
+ top_methods = thread.top_methods
169
+ assert_equal(1, top_methods.count)
170
+ assert_equal("MeasureWallTimeTest#test_module_instance_methods", top_methods[0].full_name)
171
+
172
+ # Methods:
173
+ # MeasureWallTimeTest#test_module_instance_methods
174
+ # Class#new
175
+ # <Class::Object>#allocate
176
+ # Object#initialize
177
+ # M1#hello
178
+ # Kernel#sleep
179
+
180
+ methods = result.threads.first.methods.sort.reverse
181
+ assert_equal(RubyProf.ruby_2? ? 5 : 6, methods.length)
182
+ names = methods.map(&:full_name)
183
+ assert_equal('MeasureWallTimeTest#test_module_instance_methods', names[0])
184
+ assert_equal('RubyProf::M1#hello', names[1])
185
+ assert_equal('Kernel#sleep', names[2])
186
+ assert_equal('Class#new', names[3])
187
+
188
+ # order can differ
189
+ assert(names.include?("#{RubyProf.parent_object}#initialize"))
190
+ unless RubyProf.ruby_2?
191
+ assert(names.include?("<Class::#{RubyProf.parent_object}>#allocate"))
192
+ end
193
+
194
+ # Check times
195
+ assert_in_delta(0.3, methods[0].total_time, 0.1)
196
+ assert_in_delta(0, methods[0].wait_time, 0.1)
197
+ assert_in_delta(0, methods[0].self_time, 0.1)
198
+
199
+ assert_in_delta(0.3, methods[1].total_time, 0.02)
200
+ assert_in_delta(0, methods[1].wait_time, 0.01)
201
+ assert_in_delta(0, methods[1].self_time, 0.01)
202
+
203
+ assert_in_delta(0.3, methods[2].total_time, 0.02)
204
+ assert_in_delta(0, methods[2].wait_time, 0.01)
205
+ assert_in_delta(0.3, methods[2].self_time, 0.02)
206
+
207
+ assert_in_delta(0, methods[3].total_time, 0.01)
208
+ assert_in_delta(0, methods[3].wait_time, 0.01)
209
+ assert_in_delta(0, methods[3].self_time, 0.01)
210
+
211
+ assert_in_delta(0, methods[4].total_time, 0.01)
212
+ assert_in_delta(0, methods[4].wait_time, 0.01)
213
+ assert_in_delta(0, methods[4].self_time, 0.01)
214
+
215
+ unless RubyProf.ruby_2?
216
+ assert_in_delta(0, methods[5].total_time, 0.01)
217
+ assert_in_delta(0, methods[5].wait_time, 0.01)
218
+ assert_in_delta(0, methods[5].self_time, 0.01)
219
+ end
220
+ end
221
+
222
+ def test_singleton
223
+ c3 = RubyProf::C3.new
224
+
225
+ class << c3
226
+ def hello
227
+ end
228
+ end
229
+
230
+ result = RubyProf.profile do
231
+ c3.hello
232
+ end
233
+
234
+ thread = result.threads.first
235
+ assert_in_delta(0.0, thread.total_time, 0.01)
236
+
237
+ top_methods = thread.top_methods
238
+ assert_equal(1, top_methods.count)
239
+ assert_equal("MeasureWallTimeTest#test_singleton", top_methods[0].full_name)
240
+
241
+ methods = result.threads.first.methods.sort.reverse
242
+ assert_equal(2, methods.length)
243
+
244
+ assert_equal('MeasureWallTimeTest#test_singleton', methods[0].full_name)
245
+ assert_equal('<Object::RubyProf::C3>#hello', methods[1].full_name)
246
+
247
+ assert_in_delta(0, methods[0].total_time, 0.01)
248
+ assert_in_delta(0, methods[0].wait_time, 0.01)
249
+ assert_in_delta(0, methods[0].self_time, 0.01)
250
+
251
+ assert_in_delta(0, methods[1].total_time, 0.01)
252
+ assert_in_delta(0, methods[1].wait_time, 0.01)
253
+ assert_in_delta(0, methods[1].self_time, 0.01)
254
+ end
255
+ end