ruby-prof 1.7.2 → 2.0.1

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 (122) hide show
  1. checksums.yaml +4 -4
  2. data/{CHANGES → CHANGELOG.md} +115 -178
  3. data/README.md +5 -5
  4. data/bin/ruby-prof +1 -4
  5. data/bin/ruby-prof-check-trace +45 -45
  6. data/docs/advanced-usage.md +132 -0
  7. data/docs/alternatives.md +98 -0
  8. data/docs/architecture.md +122 -0
  9. data/docs/best-practices.md +27 -0
  10. data/docs/getting-started.md +130 -0
  11. data/docs/history.md +11 -0
  12. data/docs/index.md +45 -0
  13. data/docs/profiling-rails.md +64 -0
  14. data/docs/public/examples/example.rb +33 -0
  15. data/docs/public/examples/generate_reports.rb +92 -0
  16. data/docs/public/examples/reports/call_info.txt +27 -0
  17. data/docs/public/examples/reports/call_stack.html +835 -0
  18. data/docs/public/examples/reports/callgrind.out +150 -0
  19. data/docs/public/examples/reports/flame_graph.html +408 -0
  20. data/docs/public/examples/reports/flat.txt +45 -0
  21. data/docs/public/examples/reports/graph.dot +129 -0
  22. data/docs/public/examples/reports/graph.html +1319 -0
  23. data/docs/public/examples/reports/graph.txt +100 -0
  24. data/docs/public/examples/reports/graphviz_viewer.html +1 -0
  25. data/docs/public/images/call_stack.png +0 -0
  26. data/docs/public/images/class_diagram.png +0 -0
  27. data/docs/public/images/dot_printer.png +0 -0
  28. data/docs/public/images/flame_graph.png +0 -0
  29. data/docs/public/images/flat.png +0 -0
  30. data/docs/public/images/graph.png +0 -0
  31. data/docs/public/images/graph_html.png +0 -0
  32. data/docs/public/images/ruby-prof-logo.svg +1 -0
  33. data/docs/reports.md +150 -0
  34. data/docs/stylesheets/extra.css +80 -0
  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.h +1 -4
  40. data/ext/ruby_prof/rp_measurement.c +0 -5
  41. data/ext/ruby_prof/rp_measurement.h +49 -53
  42. data/ext/ruby_prof/rp_method.c +3 -0
  43. data/ext/ruby_prof/rp_method.h +1 -4
  44. data/ext/ruby_prof/rp_profile.c +1 -1
  45. data/ext/ruby_prof/rp_profile.h +1 -5
  46. data/ext/ruby_prof/rp_stack.h +50 -53
  47. data/ext/ruby_prof/rp_thread.h +1 -4
  48. data/ext/ruby_prof/ruby_prof.h +1 -4
  49. data/ext/ruby_prof/vc/ruby_prof.vcxproj +7 -8
  50. data/lib/ruby-prof/assets/call_stack_printer.html.erb +746 -711
  51. data/lib/ruby-prof/assets/flame_graph_printer.html.erb +412 -0
  52. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -355
  53. data/lib/ruby-prof/call_tree.rb +57 -57
  54. data/lib/ruby-prof/call_tree_visitor.rb +36 -36
  55. data/lib/ruby-prof/measurement.rb +17 -17
  56. data/lib/ruby-prof/printers/abstract_printer.rb +19 -33
  57. data/lib/ruby-prof/printers/call_info_printer.rb +53 -53
  58. data/lib/ruby-prof/printers/call_stack_printer.rb +168 -180
  59. data/lib/ruby-prof/printers/call_tree_printer.rb +132 -145
  60. data/lib/ruby-prof/printers/dot_printer.rb +177 -132
  61. data/lib/ruby-prof/printers/flame_graph_printer.rb +79 -0
  62. data/lib/ruby-prof/printers/flat_printer.rb +52 -52
  63. data/lib/ruby-prof/printers/graph_html_printer.rb +62 -63
  64. data/lib/ruby-prof/printers/graph_printer.rb +112 -113
  65. data/lib/ruby-prof/printers/multi_printer.rb +134 -127
  66. data/lib/ruby-prof/profile.rb +13 -0
  67. data/lib/ruby-prof/rack.rb +114 -105
  68. data/lib/ruby-prof/task.rb +147 -147
  69. data/lib/ruby-prof/thread.rb +20 -20
  70. data/lib/ruby-prof/version.rb +1 -1
  71. data/lib/ruby-prof.rb +50 -52
  72. data/lib/unprof.rb +10 -10
  73. data/ruby-prof.gemspec +66 -66
  74. data/test/abstract_printer_test.rb +25 -27
  75. data/test/alias_test.rb +203 -117
  76. data/test/call_tree_builder.rb +9 -9
  77. data/test/call_tree_visitor_test.rb +27 -27
  78. data/test/call_trees_test.rb +66 -66
  79. data/test/duplicate_names_test.rb +32 -32
  80. data/test/dynamic_method_test.rb +50 -50
  81. data/test/exceptions_test.rb +1 -1
  82. data/test/exclude_threads_test.rb +48 -48
  83. data/test/fiber_test.rb +72 -72
  84. data/test/inverse_call_tree_test.rb +174 -174
  85. data/test/line_number_test.rb +138 -1
  86. data/test/marshal_test.rb +2 -3
  87. data/test/measure_allocations.rb +26 -26
  88. data/test/measure_allocations_test.rb +340 -1
  89. data/test/measure_process_time_test.rb +3098 -3142
  90. data/test/measure_times.rb +56 -56
  91. data/test/measure_wall_time_test.rb +511 -372
  92. data/test/measurement_test.rb +82 -82
  93. data/test/merge_test.rb +48 -48
  94. data/test/multi_printer_test.rb +52 -66
  95. data/test/no_method_class_test.rb +15 -15
  96. data/test/pause_resume_test.rb +171 -171
  97. data/test/prime.rb +54 -54
  98. data/test/prime_script.rb +5 -5
  99. data/test/printer_call_stack_test.rb +4 -3
  100. data/test/printer_call_tree_test.rb +30 -30
  101. data/test/printer_flame_graph_test.rb +82 -0
  102. data/test/printer_flat_test.rb +3 -3
  103. data/test/printer_graph_html_test.rb +12 -9
  104. data/test/printer_graph_test.rb +5 -3
  105. data/test/printers_test.rb +162 -178
  106. data/test/printing_recursive_graph_test.rb +4 -4
  107. data/test/profile_test.rb +2 -2
  108. data/test/rack_test.rb +15 -5
  109. data/test/recursive_test.rb +139 -139
  110. data/test/scheduler.rb +367 -363
  111. data/test/singleton_test.rb +2 -1
  112. data/test/stack_printer_test.rb +61 -61
  113. data/test/start_stop_test.rb +106 -106
  114. data/test/test_helper.rb +4 -0
  115. data/test/thread_test.rb +229 -229
  116. data/test/unique_call_path_test.rb +123 -123
  117. data/test/yarv_test.rb +2 -2
  118. metadata +53 -11
  119. data/ext/ruby_prof/rp_measure_memory.c +0 -46
  120. data/lib/ruby-prof/compatibility.rb +0 -113
  121. data/test/compatibility_test.rb +0 -49
  122. data/test/measure_memory_test.rb +0 -1193
@@ -1,82 +1,82 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path('../test_helper', __FILE__)
4
-
5
- class MeasurementTest < Minitest::Test
6
- def test_initialize
7
- measurement = RubyProf::Measurement.new(3.3, 2.2, 1.1, 4)
8
- assert_equal(3.3, measurement.total_time)
9
- assert_equal(2.2, measurement.self_time)
10
- assert_equal(1.1, measurement.wait_time)
11
- assert_equal(4, measurement.called)
12
- end
13
-
14
- def test_clone
15
- measurement_1 = RubyProf::Measurement.new(3.3, 2.2, 1.1, 4)
16
- measurement_2 = measurement_1.clone
17
-
18
- refute(measurement_1.equal?(measurement_2))
19
- refute(measurement_1.eql?(measurement_2))
20
- refute(measurement_1 == measurement_2)
21
-
22
- assert_equal(measurement_1.total_time, measurement_2.total_time)
23
- assert_equal(measurement_1.self_time, measurement_2.self_time)
24
- assert_equal(measurement_1.wait_time, measurement_2.wait_time)
25
- assert_equal(measurement_1.called, measurement_2.called)
26
- end
27
-
28
- def test_dup
29
- measurement_1 = RubyProf::Measurement.new(3.3, 2.2, 1.1, 4)
30
- measurement_2 = measurement_1.dup
31
-
32
- refute(measurement_1.equal?(measurement_2))
33
- refute(measurement_1.eql?(measurement_2))
34
- refute(measurement_1 == measurement_2)
35
-
36
- assert_equal(measurement_1.total_time, measurement_2.total_time)
37
- assert_equal(measurement_1.self_time, measurement_2.self_time)
38
- assert_equal(measurement_1.wait_time, measurement_2.wait_time)
39
- assert_equal(measurement_1.called, measurement_2.called)
40
- end
41
-
42
- def test_merge!
43
- measurement1 = RubyProf::Measurement.new(3.3, 2.2, 1.1, 4)
44
- measurement2 = RubyProf::Measurement.new(3, 2, 1, 3)
45
-
46
- measurement1.merge!(measurement2)
47
-
48
- assert_equal(6.3, measurement1.total_time)
49
- assert_equal(4.2, measurement1.self_time)
50
- assert_equal(2.1, measurement1.wait_time)
51
- assert_equal(7, measurement1.called)
52
-
53
- assert_equal(3, measurement2.total_time)
54
- assert_equal(2, measurement2.self_time)
55
- assert_equal(1, measurement2.wait_time)
56
- assert_equal(3, measurement2.called)
57
- end
58
-
59
- def test_set_total_time
60
- measurement = RubyProf::Measurement.new(4, 3, 1, 1)
61
- measurement.total_time = 5.1
62
- assert_equal(5.1, measurement.total_time)
63
- end
64
-
65
- def test_set_self_time
66
- measurement = RubyProf::Measurement.new(4, 3, 1, 1)
67
- measurement.self_time = 3.1
68
- assert_equal(3.1, measurement.self_time)
69
- end
70
-
71
- def test_set_wait_time
72
- measurement = RubyProf::Measurement.new(4, 3, 1, 1)
73
- measurement.wait_time = 1.1
74
- assert_equal(1.1, measurement.wait_time)
75
- end
76
-
77
- def test_set_called
78
- measurement = RubyProf::Measurement.new(4, 3, 1, 1)
79
- measurement.called = 2
80
- assert_equal(2, measurement.called)
81
- end
82
- end
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('../test_helper', __FILE__)
4
+
5
+ class MeasurementTest < Minitest::Test
6
+ def test_initialize
7
+ measurement = RubyProf::Measurement.new(3.3, 2.2, 1.1, 4)
8
+ assert_equal(3.3, measurement.total_time)
9
+ assert_equal(2.2, measurement.self_time)
10
+ assert_equal(1.1, measurement.wait_time)
11
+ assert_equal(4, measurement.called)
12
+ end
13
+
14
+ def test_clone
15
+ measurement_1 = RubyProf::Measurement.new(3.3, 2.2, 1.1, 4)
16
+ measurement_2 = measurement_1.clone
17
+
18
+ refute(measurement_1.equal?(measurement_2))
19
+ refute(measurement_1.eql?(measurement_2))
20
+ refute(measurement_1 == measurement_2)
21
+
22
+ assert_equal(measurement_1.total_time, measurement_2.total_time)
23
+ assert_equal(measurement_1.self_time, measurement_2.self_time)
24
+ assert_equal(measurement_1.wait_time, measurement_2.wait_time)
25
+ assert_equal(measurement_1.called, measurement_2.called)
26
+ end
27
+
28
+ def test_dup
29
+ measurement_1 = RubyProf::Measurement.new(3.3, 2.2, 1.1, 4)
30
+ measurement_2 = measurement_1.dup
31
+
32
+ refute(measurement_1.equal?(measurement_2))
33
+ refute(measurement_1.eql?(measurement_2))
34
+ refute(measurement_1 == measurement_2)
35
+
36
+ assert_equal(measurement_1.total_time, measurement_2.total_time)
37
+ assert_equal(measurement_1.self_time, measurement_2.self_time)
38
+ assert_equal(measurement_1.wait_time, measurement_2.wait_time)
39
+ assert_equal(measurement_1.called, measurement_2.called)
40
+ end
41
+
42
+ def test_merge!
43
+ measurement1 = RubyProf::Measurement.new(3.3, 2.2, 1.1, 4)
44
+ measurement2 = RubyProf::Measurement.new(3, 2, 1, 3)
45
+
46
+ measurement1.merge!(measurement2)
47
+
48
+ assert_equal(6.3, measurement1.total_time)
49
+ assert_equal(4.2, measurement1.self_time)
50
+ assert_equal(2.1, measurement1.wait_time)
51
+ assert_equal(7, measurement1.called)
52
+
53
+ assert_equal(3, measurement2.total_time)
54
+ assert_equal(2, measurement2.self_time)
55
+ assert_equal(1, measurement2.wait_time)
56
+ assert_equal(3, measurement2.called)
57
+ end
58
+
59
+ def test_set_total_time
60
+ measurement = RubyProf::Measurement.new(4, 3, 1, 1)
61
+ measurement.total_time = 5.1
62
+ assert_equal(5.1, measurement.total_time)
63
+ end
64
+
65
+ def test_set_self_time
66
+ measurement = RubyProf::Measurement.new(4, 3, 1, 1)
67
+ measurement.self_time = 3.1
68
+ assert_equal(3.1, measurement.self_time)
69
+ end
70
+
71
+ def test_set_wait_time
72
+ measurement = RubyProf::Measurement.new(4, 3, 1, 1)
73
+ measurement.wait_time = 1.1
74
+ assert_equal(1.1, measurement.wait_time)
75
+ end
76
+
77
+ def test_set_called
78
+ measurement = RubyProf::Measurement.new(4, 3, 1, 1)
79
+ measurement.called = 2
80
+ assert_equal(2, measurement.called)
81
+ end
82
+ end
data/test/merge_test.rb CHANGED
@@ -52,28 +52,28 @@ class MergeTest < TestCase
52
52
  assert_equal(4, result.threads.size)
53
53
 
54
54
  thread = result.threads[0]
55
- assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1)
56
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
57
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
58
- assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1)
55
+ assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
56
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
57
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
58
+ assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
59
59
 
60
60
  thread = result.threads[1]
61
- assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1)
62
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
63
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
64
- assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1)
61
+ assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
62
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
63
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
64
+ assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
65
65
 
66
66
  thread = result.threads[2]
67
- assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1)
68
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
69
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
70
- assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1)
67
+ assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
68
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
69
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
70
+ assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
71
71
 
72
72
  thread = result.threads[3]
73
- assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1)
74
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
75
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
76
- assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1)
73
+ assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
74
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
75
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
76
+ assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
77
77
  end
78
78
 
79
79
  def test_single_worker_merged
@@ -83,16 +83,16 @@ class MergeTest < TestCase
83
83
  assert_equal(2, result.threads.size)
84
84
 
85
85
  thread = result.threads[0]
86
- assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1)
87
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
88
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
89
- assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1)
86
+ assert_in_delta(0.5, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
87
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
88
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
89
+ assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
90
90
 
91
91
  thread = result.threads[1]
92
- assert_in_delta(1.5, thread.call_tree.target.total_time, 0.1)
93
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
94
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
95
- assert_in_delta(1.5, thread.call_tree.target.children_time, 0.1)
92
+ assert_in_delta(1.5, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
93
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
94
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
95
+ assert_in_delta(1.5, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
96
96
  end
97
97
 
98
98
  def test_multiple_workers_unmerged
@@ -100,28 +100,28 @@ class MergeTest < TestCase
100
100
  assert_equal(4, result.threads.count)
101
101
 
102
102
  thread = result.threads[0]
103
- assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1)
104
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
105
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
106
- assert_in_delta(1.0, thread.call_tree.target.children_time, 0.1)
103
+ assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
104
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
105
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
106
+ assert_in_delta(1.0, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
107
107
 
108
108
  thread = result.threads[1]
109
- assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1)
110
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
111
- assert_in_delta(0.5, thread.call_tree.target.wait_time, 0.1)
112
- assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1)
109
+ assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
110
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
111
+ assert_in_delta(0.5, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
112
+ assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
113
113
 
114
114
  thread = result.threads[2]
115
- assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1)
116
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
117
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
118
- assert_in_delta(1.0, thread.call_tree.target.children_time, 0.1)
115
+ assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
116
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
117
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
118
+ assert_in_delta(1.0, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
119
119
 
120
120
  thread = result.threads[3]
121
- assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1)
122
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
123
- assert_in_delta(0.5, thread.call_tree.target.wait_time, 0.1)
124
- assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1)
121
+ assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
122
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
123
+ assert_in_delta(0.5, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
124
+ assert_in_delta(0.5, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
125
125
  end
126
126
 
127
127
  def test_multiple_workers_merged
@@ -131,16 +131,16 @@ class MergeTest < TestCase
131
131
  assert_equal(2, result.threads.count)
132
132
 
133
133
  thread = result.threads[0]
134
- assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1)
135
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
136
- assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1)
137
- assert_in_delta(1.0, thread.call_tree.target.children_time, 0.1)
134
+ assert_in_delta(1.0, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
135
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
136
+ assert_in_delta(0.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
137
+ assert_in_delta(1.0, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
138
138
 
139
139
  thread = result.threads[1]
140
- assert_in_delta(3.0, thread.call_tree.target.total_time, 0.1)
141
- assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1)
142
- assert_in_delta(1.0, thread.call_tree.target.wait_time, 0.1)
143
- assert_in_delta(2.0, thread.call_tree.target.children_time, 0.1)
140
+ assert_in_delta(3.0, thread.call_tree.target.total_time, 0.1 * delta_multiplier)
141
+ assert_in_delta(0.0, thread.call_tree.target.self_time, 0.1 * delta_multiplier)
142
+ assert_in_delta(1.0, thread.call_tree.target.wait_time, 0.1 * delta_multiplier)
143
+ assert_in_delta(2.0, thread.call_tree.target.children_time, 0.1 * delta_multiplier)
144
144
  end
145
145
  end
146
146
  end
@@ -1,66 +1,52 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- # Test data
7
- # A
8
- # / \
9
- # B C
10
- # \
11
- # B
12
-
13
- class MSTPT
14
- def a
15
- 100.times{b}
16
- 300.times{c}
17
- c;c;c
18
- end
19
-
20
- def b
21
- sleep 0
22
- end
23
-
24
- def c
25
- 5.times{b}
26
- end
27
- end
28
-
29
- class MultiPrinterTest < TestCase
30
- def test_refuses_io_objects
31
- # we don't need a real profile for this test
32
- p = RubyProf::MultiPrinter.new nil
33
- begin
34
- p.print(STDOUT)
35
- flunk "should have raised an ArgumentError"
36
- rescue ArgumentError => e
37
- assert_match(/IO/, e.to_s)
38
- end
39
- end
40
-
41
- def test_refuses_non_hashes
42
- # we don't need a real profile for this test
43
- p = RubyProf::MultiPrinter.new nil
44
- begin
45
- p.print([])
46
- flunk "should have raised an ArgumentError"
47
- rescue ArgumentError => e
48
- assert_match(/hash/, e.to_s)
49
- end
50
- end
51
-
52
- private
53
-
54
- def print(result)
55
- test = caller.first =~ /in `(.*)'/ ? $1 : "test"
56
- path = Dir.tmpdir
57
- profile = "ruby_prof_#{test}"
58
- printer = RubyProf::MultiPrinter.new(result)
59
- printer.print(:path => path, :profile => profile,
60
- :threshold => 0, :min_percent => 0, :title => "ruby_prof #{test}")
61
- if RUBY_PLATFORM =~ /darwin/ && ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT']=="1"
62
- system("open '#{printer.stack_profile}'")
63
- end
64
- [File.read(printer.stack_profile), File.read(printer.graph_profile)]
65
- end
66
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ # Test data
7
+ # A
8
+ # / \
9
+ # B C
10
+ # \
11
+ # B
12
+
13
+ class MSTPT
14
+ def a
15
+ 100.times{b}
16
+ 300.times{c}
17
+ c;c;c
18
+ end
19
+
20
+ def b
21
+ sleep 0
22
+ end
23
+
24
+ def c
25
+ 5.times{b}
26
+ end
27
+ end
28
+
29
+ class MultiPrinterTest < TestCase
30
+ def test_refuses_positional_arguments
31
+ # we don't need a real profile for this test
32
+ p = RubyProf::MultiPrinter.new nil
33
+ assert_raises(ArgumentError) do
34
+ p.print(STDOUT)
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def print(result)
41
+ test = caller.first =~ /in `(.*)'/ ? $1 : "test"
42
+ path = Dir.tmpdir
43
+ profile = "ruby_prof_#{test}"
44
+ printer = RubyProf::MultiPrinter.new(result)
45
+ printer.print(path: path, profile: profile,
46
+ threshold: 0, min_percent: 0, title: "ruby_prof #{test}")
47
+ if RUBY_PLATFORM =~ /darwin/ && ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT']=="1"
48
+ system("open '#{printer.stack_profile}'")
49
+ end
50
+ [File.read(printer.stack_profile), File.read(printer.graph_profile)]
51
+ end
52
+ end
@@ -1,15 +1,15 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- # Make sure this works with no class or method
7
- result = RubyProf::Profile.profile do
8
- sleep 1
9
- end
10
-
11
- methods = result.threads.first.methods
12
- global_method = methods.sort_by {|method| method.full_name}.first
13
- if global_method.full_name != 'Kernel#sleep'
14
- raise(RuntimeError, "Wrong method name. Expected: Global#[No method]. Actual: #{global_method.full_name}")
15
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ # Make sure this works with no class or method
7
+ result = RubyProf::Profile.profile do
8
+ sleep 1
9
+ end
10
+
11
+ methods = result.threads.first.methods
12
+ global_method = methods.sort_by {|method| method.full_name}.first
13
+ if global_method.full_name != 'Kernel#sleep'
14
+ raise(RuntimeError, "Wrong method name. Expected: Global#[No method]. Actual: #{global_method.full_name}")
15
+ end