ruby-prof 1.7.2 → 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 (121) hide show
  1. checksums.yaml +4 -4
  2. data/{CHANGES → CHANGELOG.md} +112 -178
  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/rp_allocation.c +0 -15
  35. data/ext/ruby_prof/rp_allocation.h +29 -33
  36. data/ext/ruby_prof/rp_call_tree.c +3 -0
  37. data/ext/ruby_prof/rp_call_tree.h +1 -4
  38. data/ext/ruby_prof/rp_call_trees.h +1 -4
  39. data/ext/ruby_prof/rp_measurement.c +0 -5
  40. data/ext/ruby_prof/rp_measurement.h +49 -53
  41. data/ext/ruby_prof/rp_method.c +3 -0
  42. data/ext/ruby_prof/rp_method.h +1 -4
  43. data/ext/ruby_prof/rp_profile.c +1 -1
  44. data/ext/ruby_prof/rp_profile.h +1 -5
  45. data/ext/ruby_prof/rp_stack.h +50 -53
  46. data/ext/ruby_prof/rp_thread.h +1 -4
  47. data/ext/ruby_prof/ruby_prof.h +1 -4
  48. data/ext/ruby_prof/vc/ruby_prof.vcxproj +7 -8
  49. data/lib/ruby-prof/assets/call_stack_printer.html.erb +746 -711
  50. data/lib/ruby-prof/assets/flame_graph_printer.html.erb +412 -0
  51. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -355
  52. data/lib/ruby-prof/call_tree.rb +57 -57
  53. data/lib/ruby-prof/call_tree_visitor.rb +36 -36
  54. data/lib/ruby-prof/measurement.rb +17 -17
  55. data/lib/ruby-prof/printers/abstract_printer.rb +19 -33
  56. data/lib/ruby-prof/printers/call_info_printer.rb +53 -53
  57. data/lib/ruby-prof/printers/call_stack_printer.rb +168 -180
  58. data/lib/ruby-prof/printers/call_tree_printer.rb +132 -145
  59. data/lib/ruby-prof/printers/dot_printer.rb +177 -132
  60. data/lib/ruby-prof/printers/flame_graph_printer.rb +79 -0
  61. data/lib/ruby-prof/printers/flat_printer.rb +52 -52
  62. data/lib/ruby-prof/printers/graph_html_printer.rb +62 -63
  63. data/lib/ruby-prof/printers/graph_printer.rb +112 -113
  64. data/lib/ruby-prof/printers/multi_printer.rb +134 -127
  65. data/lib/ruby-prof/profile.rb +13 -0
  66. data/lib/ruby-prof/rack.rb +114 -105
  67. data/lib/ruby-prof/task.rb +147 -147
  68. data/lib/ruby-prof/thread.rb +20 -20
  69. data/lib/ruby-prof/version.rb +1 -1
  70. data/lib/ruby-prof.rb +50 -52
  71. data/lib/unprof.rb +10 -10
  72. data/ruby-prof.gemspec +5 -5
  73. data/test/abstract_printer_test.rb +25 -27
  74. data/test/alias_test.rb +203 -117
  75. data/test/call_tree_builder.rb +126 -126
  76. data/test/call_tree_visitor_test.rb +27 -27
  77. data/test/call_trees_test.rb +66 -66
  78. data/test/duplicate_names_test.rb +32 -32
  79. data/test/dynamic_method_test.rb +50 -50
  80. data/test/exceptions_test.rb +24 -24
  81. data/test/exclude_threads_test.rb +48 -48
  82. data/test/fiber_test.rb +72 -72
  83. data/test/inverse_call_tree_test.rb +174 -174
  84. data/test/line_number_test.rb +138 -1
  85. data/test/marshal_test.rb +144 -145
  86. data/test/measure_allocations.rb +26 -26
  87. data/test/measure_allocations_test.rb +340 -1
  88. data/test/measure_process_time_test.rb +3098 -3142
  89. data/test/measure_times.rb +56 -56
  90. data/test/measure_wall_time_test.rb +511 -372
  91. data/test/measurement_test.rb +82 -82
  92. data/test/merge_test.rb +48 -48
  93. data/test/multi_printer_test.rb +52 -66
  94. data/test/no_method_class_test.rb +15 -15
  95. data/test/pause_resume_test.rb +171 -171
  96. data/test/prime.rb +54 -54
  97. data/test/prime_script.rb +5 -5
  98. data/test/printer_call_stack_test.rb +28 -27
  99. data/test/printer_call_tree_test.rb +30 -30
  100. data/test/printer_flame_graph_test.rb +82 -0
  101. data/test/printer_flat_test.rb +99 -99
  102. data/test/printer_graph_html_test.rb +62 -59
  103. data/test/printer_graph_test.rb +42 -40
  104. data/test/printers_test.rb +28 -44
  105. data/test/printing_recursive_graph_test.rb +81 -81
  106. data/test/profile_test.rb +101 -101
  107. data/test/rack_test.rb +103 -93
  108. data/test/recursive_test.rb +139 -139
  109. data/test/scheduler.rb +4 -0
  110. data/test/singleton_test.rb +39 -38
  111. data/test/stack_printer_test.rb +61 -61
  112. data/test/start_stop_test.rb +106 -106
  113. data/test/test_helper.rb +4 -0
  114. data/test/thread_test.rb +29 -29
  115. data/test/unique_call_path_test.rb +123 -123
  116. data/test/yarv_test.rb +56 -56
  117. metadata +53 -11
  118. data/ext/ruby_prof/rp_measure_memory.c +0 -46
  119. data/lib/ruby-prof/compatibility.rb +0 -113
  120. data/test/compatibility_test.rb +0 -49
  121. 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