ruby-prof 1.4.4-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +608 -0
  3. data/LICENSE +25 -0
  4. data/README.md +5 -0
  5. data/Rakefile +98 -0
  6. data/bin/ruby-prof +328 -0
  7. data/bin/ruby-prof-check-trace +45 -0
  8. data/ext/ruby_prof/extconf.rb +22 -0
  9. data/ext/ruby_prof/rp_aggregate_call_tree.c +59 -0
  10. data/ext/ruby_prof/rp_aggregate_call_tree.h +13 -0
  11. data/ext/ruby_prof/rp_allocation.c +287 -0
  12. data/ext/ruby_prof/rp_allocation.h +31 -0
  13. data/ext/ruby_prof/rp_call_tree.c +367 -0
  14. data/ext/ruby_prof/rp_call_tree.h +43 -0
  15. data/ext/ruby_prof/rp_call_trees.c +288 -0
  16. data/ext/ruby_prof/rp_call_trees.h +28 -0
  17. data/ext/ruby_prof/rp_measure_allocations.c +47 -0
  18. data/ext/ruby_prof/rp_measure_memory.c +46 -0
  19. data/ext/ruby_prof/rp_measure_process_time.c +66 -0
  20. data/ext/ruby_prof/rp_measure_wall_time.c +64 -0
  21. data/ext/ruby_prof/rp_measurement.c +237 -0
  22. data/ext/ruby_prof/rp_measurement.h +50 -0
  23. data/ext/ruby_prof/rp_method.c +491 -0
  24. data/ext/ruby_prof/rp_method.h +62 -0
  25. data/ext/ruby_prof/rp_profile.c +915 -0
  26. data/ext/ruby_prof/rp_profile.h +35 -0
  27. data/ext/ruby_prof/rp_stack.c +212 -0
  28. data/ext/ruby_prof/rp_stack.h +53 -0
  29. data/ext/ruby_prof/rp_thread.c +362 -0
  30. data/ext/ruby_prof/rp_thread.h +39 -0
  31. data/ext/ruby_prof/ruby_prof.c +52 -0
  32. data/ext/ruby_prof/ruby_prof.h +26 -0
  33. data/ext/ruby_prof/vc/ruby_prof.sln +39 -0
  34. data/ext/ruby_prof/vc/ruby_prof.vcxproj +160 -0
  35. data/lib/3.1/ruby_prof.so +0 -0
  36. data/lib/ruby-prof/assets/call_stack_printer.html.erb +711 -0
  37. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  38. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -0
  39. data/lib/ruby-prof/call_tree.rb +57 -0
  40. data/lib/ruby-prof/call_tree_visitor.rb +36 -0
  41. data/lib/ruby-prof/compatibility.rb +99 -0
  42. data/lib/ruby-prof/exclude_common_methods.rb +198 -0
  43. data/lib/ruby-prof/measurement.rb +17 -0
  44. data/lib/ruby-prof/method_info.rb +78 -0
  45. data/lib/ruby-prof/printers/abstract_printer.rb +137 -0
  46. data/lib/ruby-prof/printers/call_info_printer.rb +53 -0
  47. data/lib/ruby-prof/printers/call_stack_printer.rb +180 -0
  48. data/lib/ruby-prof/printers/call_tree_printer.rb +147 -0
  49. data/lib/ruby-prof/printers/dot_printer.rb +132 -0
  50. data/lib/ruby-prof/printers/flat_printer.rb +53 -0
  51. data/lib/ruby-prof/printers/graph_html_printer.rb +63 -0
  52. data/lib/ruby-prof/printers/graph_printer.rb +113 -0
  53. data/lib/ruby-prof/printers/multi_printer.rb +127 -0
  54. data/lib/ruby-prof/profile.rb +37 -0
  55. data/lib/ruby-prof/rack.rb +95 -0
  56. data/lib/ruby-prof/task.rb +147 -0
  57. data/lib/ruby-prof/thread.rb +20 -0
  58. data/lib/ruby-prof/version.rb +3 -0
  59. data/lib/ruby-prof.rb +52 -0
  60. data/lib/unprof.rb +10 -0
  61. data/ruby-prof.gemspec +64 -0
  62. data/test/abstract_printer_test.rb +26 -0
  63. data/test/alias_test.rb +122 -0
  64. data/test/basic_test.rb +43 -0
  65. data/test/call_tree_visitor_test.rb +32 -0
  66. data/test/call_trees_test.rb +66 -0
  67. data/test/duplicate_names_test.rb +32 -0
  68. data/test/dynamic_method_test.rb +67 -0
  69. data/test/enumerable_test.rb +21 -0
  70. data/test/exceptions_test.rb +24 -0
  71. data/test/exclude_methods_test.rb +151 -0
  72. data/test/exclude_threads_test.rb +53 -0
  73. data/test/fiber_test.rb +129 -0
  74. data/test/gc_test.rb +100 -0
  75. data/test/inverse_call_tree_test.rb +175 -0
  76. data/test/line_number_test.rb +158 -0
  77. data/test/marshal_test.rb +145 -0
  78. data/test/measure_allocations.rb +26 -0
  79. data/test/measure_allocations_test.rb +333 -0
  80. data/test/measure_memory_test.rb +688 -0
  81. data/test/measure_process_time_test.rb +1614 -0
  82. data/test/measure_times.rb +56 -0
  83. data/test/measure_wall_time_test.rb +426 -0
  84. data/test/multi_printer_test.rb +71 -0
  85. data/test/no_method_class_test.rb +15 -0
  86. data/test/pause_resume_test.rb +175 -0
  87. data/test/prime.rb +54 -0
  88. data/test/prime_script.rb +6 -0
  89. data/test/printer_call_stack_test.rb +27 -0
  90. data/test/printer_call_tree_test.rb +30 -0
  91. data/test/printer_flat_test.rb +99 -0
  92. data/test/printer_graph_html_test.rb +59 -0
  93. data/test/printer_graph_test.rb +40 -0
  94. data/test/printers_test.rb +141 -0
  95. data/test/printing_recursive_graph_test.rb +81 -0
  96. data/test/profile_test.rb +16 -0
  97. data/test/rack_test.rb +93 -0
  98. data/test/recursive_test.rb +430 -0
  99. data/test/singleton_test.rb +38 -0
  100. data/test/stack_printer_test.rb +64 -0
  101. data/test/start_stop_test.rb +109 -0
  102. data/test/test_helper.rb +13 -0
  103. data/test/thread_test.rb +144 -0
  104. data/test/unique_call_path_test.rb +136 -0
  105. data/test/yarv_test.rb +60 -0
  106. metadata +187 -0
@@ -0,0 +1,175 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ class InverseCallTreeTest < TestCase
7
+ INVERSE_DEPTH = 5
8
+
9
+ def setup
10
+ # Need to use wall time for this test due to the sleep calls
11
+ RubyProf::measure_mode = RubyProf::WALL_TIME
12
+ end
13
+
14
+ INVERSE_DEPTH.times do |i|
15
+ if i == 0
16
+ define_method("method_#{i}") do
17
+ sleep_amount = (i + 1) * 0.05
18
+ RubyProf.start
19
+ sleep(sleep_amount)
20
+ end
21
+ else
22
+ define_method("method_#{i}") do
23
+ method_name = "method_#{i-1}"
24
+ sleep_amount = (i + 1) * 0.05
25
+ self.send(method_name.to_sym)
26
+ sleep(sleep_amount)
27
+ end
28
+ end
29
+ end
30
+
31
+ def test_inverse
32
+ method_name = "method_#{INVERSE_DEPTH - 1}"
33
+ self.send(method_name.to_sym)
34
+ profile = RubyProf.stop
35
+
36
+ assert_equal(1, profile.threads.count)
37
+
38
+ thread = profile.threads.first
39
+ assert_in_delta(0.79, thread.total_time, 0.05)
40
+
41
+ assert_equal(7, thread.methods.length)
42
+ methods = thread.methods.sort.reverse
43
+
44
+ # InverseCallTreeTest#test_inverse
45
+ method = methods[0]
46
+ assert_equal('InverseCallTreeTest#test_inverse', method.full_name)
47
+ assert_equal(34, method.line)
48
+
49
+ assert_equal(0, method.call_trees.callers.count)
50
+
51
+ assert_equal(1, method.call_trees.callees.count)
52
+ call_tree = method.call_trees.callees[0]
53
+ assert_equal('InverseCallTreeTest#method_4', call_tree.target.full_name)
54
+ assert_equal(26, call_tree.line)
55
+
56
+ # InverseCallTreeTest#method_4
57
+ method = methods[1]
58
+ assert_equal('InverseCallTreeTest#method_4', method.full_name)
59
+ assert_equal(26, method.line)
60
+
61
+ assert_equal(1, method.call_trees.callers.count)
62
+ call_tree = method.call_trees.callers[0]
63
+ assert_equal('InverseCallTreeTest#test_inverse', call_tree.parent.target.full_name)
64
+ assert_equal(26, call_tree.line)
65
+
66
+ assert_equal(2, method.call_trees.callees.count)
67
+ call_tree = method.call_trees.callees[0]
68
+ assert_equal('InverseCallTreeTest#method_3', call_tree.target.full_name)
69
+ assert_equal(26, call_tree.line)
70
+
71
+ # Kernel#sleep
72
+ method = methods[2]
73
+ assert_equal('Kernel#sleep', method.full_name)
74
+ assert_equal(0, method.line)
75
+
76
+ assert_equal(5, method.call_trees.callers.count)
77
+ call_tree = method.call_trees.callers[0]
78
+ assert_equal('InverseCallTreeTest#method_0', call_tree.parent.target.full_name)
79
+ assert_equal(19, call_tree.line)
80
+
81
+ call_tree = method.call_trees.callers[1]
82
+ assert_equal('InverseCallTreeTest#method_1', call_tree.parent.target.full_name)
83
+ assert_equal(26, call_tree.line)
84
+
85
+ call_tree = method.call_trees.callers[2]
86
+ assert_equal('InverseCallTreeTest#method_2', call_tree.parent.target.full_name)
87
+ assert_equal(26, call_tree.line)
88
+ call_tree = method.call_trees.callers[3]
89
+
90
+ assert_equal('InverseCallTreeTest#method_3', call_tree.parent.target.full_name)
91
+ assert_equal(26, call_tree.line)
92
+
93
+ call_tree = method.call_trees.callers[4]
94
+ assert_equal('InverseCallTreeTest#method_4', call_tree.parent.target.full_name)
95
+ assert_equal(26, call_tree.line)
96
+
97
+ assert_equal(0, method.call_trees.callees.count)
98
+
99
+ # InverseCallTreeTest#method_3
100
+ method = methods[3]
101
+ assert_equal('InverseCallTreeTest#method_3', method.full_name)
102
+ assert_equal(26, method.line)
103
+
104
+ assert_equal(1, method.call_trees.callers.count)
105
+ call_tree = method.call_trees.callers[0]
106
+ assert_equal('InverseCallTreeTest#method_4', call_tree.parent.target.full_name)
107
+ assert_equal(26, call_tree.line)
108
+
109
+ assert_equal(2, method.call_trees.callees.count)
110
+ call_tree = method.call_trees.callees[0]
111
+ assert_equal('InverseCallTreeTest#method_2', call_tree.target.full_name)
112
+ assert_equal(26, call_tree.line)
113
+
114
+ call_tree = method.call_trees.callees[1]
115
+ assert_equal('Kernel#sleep', call_tree.target.full_name)
116
+ assert_equal(26, call_tree.line)
117
+
118
+ # InverseCallTreeTest#method_2
119
+ method = methods[4]
120
+ assert_equal('InverseCallTreeTest#method_2', method.full_name)
121
+ assert_equal(26, method.line)
122
+
123
+ assert_equal(1, method.call_trees.callers.count)
124
+ call_tree = method.call_trees.callers[0]
125
+ assert_equal('InverseCallTreeTest#method_3', call_tree.parent.target.full_name)
126
+ assert_equal(26, call_tree.line)
127
+
128
+ assert_equal(2, method.call_trees.callees.count)
129
+ call_tree = method.call_trees.callees[0]
130
+ assert_equal('InverseCallTreeTest#method_1', call_tree.target.full_name)
131
+ assert_equal(26, call_tree.line)
132
+
133
+ call_tree = method.call_trees.callees[1]
134
+ assert_equal('Kernel#sleep', call_tree.target.full_name)
135
+ assert_equal(26, call_tree.line)
136
+
137
+ call_tree = method.call_trees.callees[1]
138
+ assert_equal('Kernel#sleep', call_tree.target.full_name)
139
+ assert_equal(26, call_tree.line)
140
+
141
+ # InverseCallTreeTest#method_1
142
+ method = methods[5]
143
+ assert_equal('InverseCallTreeTest#method_1', method.full_name)
144
+ assert_equal(26, method.line)
145
+
146
+ assert_equal(1, method.call_trees.callers.count)
147
+ call_tree = method.call_trees.callers[0]
148
+ assert_equal('InverseCallTreeTest#method_2', call_tree.parent.target.full_name)
149
+ assert_equal(26, call_tree.line)
150
+
151
+ assert_equal(2, method.call_trees.callees.count)
152
+ call_tree = method.call_trees.callees[0]
153
+ assert_equal('InverseCallTreeTest#method_0', call_tree.target.full_name)
154
+ assert_equal(19, call_tree.line)
155
+
156
+ call_tree = method.call_trees.callees[1]
157
+ assert_equal('Kernel#sleep', call_tree.target.full_name)
158
+ assert_equal(26, call_tree.line)
159
+
160
+ # InverseCallTreeTest#method_0
161
+ method = methods[6]
162
+ assert_equal('InverseCallTreeTest#method_0', method.full_name)
163
+ assert_equal(19, method.line)
164
+
165
+ assert_equal(1, method.call_trees.callers.count)
166
+ call_tree = method.call_trees.callers[0]
167
+ assert_equal('InverseCallTreeTest#method_1', call_tree.parent.target.full_name)
168
+ assert_equal(19, call_tree.line)
169
+
170
+ assert_equal(1, method.call_trees.callees.count)
171
+ call_tree = method.call_trees.callees[0]
172
+ assert_equal('Kernel#sleep', call_tree.target.full_name)
173
+ assert_equal(19, call_tree.line)
174
+ end
175
+ end
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ class LineNumbers
7
+ def method_1
8
+ method_2
9
+ _filler = 1
10
+ method_3
11
+ end
12
+
13
+ def method_2
14
+ _filler = 1
15
+ 2.times do |i|
16
+ _filler = 2
17
+ method_3
18
+ end
19
+ end
20
+
21
+ def method_3
22
+ sleep(0.3)
23
+ method_4
24
+ end
25
+
26
+ def method_4
27
+ sleep(1.2)
28
+ end
29
+ end
30
+
31
+ # -- Tests ----
32
+ class LineNumbersTest < TestCase
33
+ def test_function_line_no
34
+ numbers = LineNumbers.new
35
+
36
+ result = RubyProf.profile do
37
+ numbers.method_1
38
+ end
39
+
40
+ methods = result.threads.first.methods.sort.reverse
41
+ assert_equal(7, methods.length)
42
+
43
+ # Method 0
44
+ method = methods[0]
45
+ assert_equal('LineNumbersTest#test_function_line_no', method.full_name)
46
+ assert_equal(37, method.line)
47
+
48
+ assert_equal(0, method.call_trees.callers.count)
49
+
50
+ assert_equal(1, method.call_trees.callees.count)
51
+ call_tree = method.call_trees.callees[0]
52
+ assert_equal('LineNumbers#method_1', call_tree.target.full_name)
53
+ assert_equal(37, call_tree.line)
54
+
55
+ # Method 1
56
+ method = methods[1]
57
+ assert_equal('LineNumbers#method_1', method.full_name)
58
+ assert_equal(7, method.line)
59
+
60
+ assert_equal(1, method.call_trees.callers.count)
61
+ call_tree = method.call_trees.callers[0]
62
+ assert_equal('LineNumbersTest#test_function_line_no', call_tree.parent.target.full_name)
63
+ assert_equal(37, call_tree.line)
64
+
65
+ assert_equal(2, method.call_trees.callees.count)
66
+ call_tree = method.call_trees.callees[0]
67
+ assert_equal('LineNumbers#method_2', call_tree.target.full_name)
68
+ assert_equal(8, call_tree.line)
69
+
70
+ call_tree = method.call_trees.callees[1]
71
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
72
+ assert_equal(10, call_tree.line)
73
+
74
+ # Method 2
75
+ method = methods[2]
76
+ assert_equal('LineNumbers#method_3', method.full_name)
77
+ assert_equal(21, method.line)
78
+
79
+ assert_equal(2, method.call_trees.callers.count)
80
+ call_tree = method.call_trees.callers[0]
81
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
82
+ assert_equal(17, call_tree.line)
83
+
84
+ call_tree = method.call_trees.callers[1]
85
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
86
+ assert_equal(10, call_tree.line)
87
+
88
+ assert_equal(2, method.call_trees.callees.count)
89
+ call_tree = method.call_trees.callees[0]
90
+ assert_equal('Kernel#sleep', call_tree.target.full_name)
91
+ assert_equal(22, call_tree.line)
92
+
93
+ call_tree = method.call_trees.callees[1]
94
+ assert_equal('LineNumbers#method_4', call_tree.target.full_name)
95
+ assert_equal(23, call_tree.line)
96
+
97
+ # Method 3
98
+ method = methods[3]
99
+ assert_equal('Kernel#sleep', method.full_name)
100
+ assert_equal(0, method.line)
101
+
102
+ assert_equal(2, method.call_trees.callers.count)
103
+ call_tree = method.call_trees.callers[0]
104
+ assert_equal('LineNumbers#method_3', call_tree.parent.target.full_name)
105
+ assert_equal(22, call_tree.line)
106
+
107
+ call_tree = method.call_trees.callers[1]
108
+ assert_equal('LineNumbers#method_4', call_tree.parent.target.full_name)
109
+ assert_equal(27, call_tree.line)
110
+
111
+ assert_equal(0, method.call_trees.callees.count)
112
+
113
+ # Method 4
114
+ method = methods[4]
115
+ assert_equal('LineNumbers#method_4', method.full_name)
116
+ assert_equal(26, method.line)
117
+
118
+ assert_equal(1, method.call_trees.callers.count)
119
+ call_tree = method.call_trees.callers[0]
120
+ assert_equal('LineNumbers#method_3', call_tree.parent.target.full_name)
121
+ assert_equal(23, call_tree.line)
122
+
123
+ assert_equal(1, method.call_trees.callees.count)
124
+ call_tree = method.call_trees.callees[0]
125
+ assert_equal('Kernel#sleep', call_tree.target.full_name)
126
+ assert_equal(27, call_tree.line)
127
+
128
+ # Method 5
129
+ method = methods[5]
130
+ assert_equal('LineNumbers#method_2', method.full_name)
131
+ assert_equal(13, method.line)
132
+
133
+ assert_equal(1, method.call_trees.callers.count)
134
+ call_tree = method.call_trees.callers[0]
135
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
136
+ assert_equal(8, call_tree.line)
137
+
138
+ assert_equal(1, method.call_trees.callees.count)
139
+ call_tree = method.call_trees.callees[0]
140
+ assert_equal('Integer#times', call_tree.target.full_name)
141
+ assert_equal(15, call_tree.line)
142
+
143
+ # Method 6
144
+ method = methods[6]
145
+ assert_equal('Integer#times', method.full_name)
146
+ assert_equal(0, method.line)
147
+
148
+ assert_equal(1, method.call_trees.callers.count)
149
+ call_tree = method.call_trees.callers[0]
150
+ assert_equal('LineNumbers#method_2', call_tree.parent.target.full_name)
151
+ assert_equal(15, call_tree.line)
152
+
153
+ assert_equal(1, method.call_trees.callees.count)
154
+ call_tree = method.call_trees.callees[0]
155
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
156
+ assert_equal(17, call_tree.line)
157
+ end
158
+ end
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path("../test_helper", __FILE__)
5
+ class MarshalTest < TestCase
6
+ def verify_profile(profile_1, profile_2)
7
+ verify_threads(profile_1.threads, profile_2.threads)
8
+ assert_equal(profile_1.measure_mode, profile_2.measure_mode)
9
+ assert_equal(profile_1.track_allocations?, profile_2.track_allocations?)
10
+ end
11
+
12
+ def verify_threads(threads_1, threads_2)
13
+ assert_equal(threads_1.count, threads_2.count)
14
+ threads_1.count.times do |i|
15
+ thread_1 = threads_1[i]
16
+ thread_2 = threads_2[i]
17
+ assert_nil(thread_2.id)
18
+ assert_equal(thread_1.fiber_id, thread_2.fiber_id)
19
+ verify_call_info(thread_1.call_tree, thread_2.call_tree)
20
+
21
+ verify_methods(thread_1.methods, thread_2.methods)
22
+ end
23
+ end
24
+
25
+ def verify_methods(methods_1, methods_2)
26
+ assert_equal(methods_1.count, methods_2.count)
27
+
28
+ methods_1.count.times do |i|
29
+ method_1 = methods_1[i]
30
+ method_2 = methods_2[i]
31
+
32
+ assert_equal(method_1.klass_name, method_2.klass_name)
33
+ assert_equal(method_1.klass_flags, method_2.klass_flags)
34
+
35
+ assert_equal(method_1.method_name, method_2.method_name)
36
+ assert_equal(method_1.full_name, method_2.full_name)
37
+
38
+ assert_equal(method_1.recursive?, method_2.recursive?)
39
+
40
+ if method_1.source_file
41
+ assert_equal(method_1.source_file, method_2.source_file)
42
+ else
43
+ assert_nil(method_1.source_file)
44
+ assert_nil(method_2.source_file)
45
+ end
46
+
47
+ assert_equal(method_1.line, method_2.line)
48
+
49
+ verify_measurement(method_1.measurement, method_2.measurement)
50
+ verify_call_infos(method_1.call_trees, method_2.call_trees)
51
+ verify_allocations(method_1.allocations, method_2.allocations)
52
+ end
53
+ end
54
+
55
+ def verify_allocations(allocations_1, allocations_2)
56
+ assert_equal(allocations_1.count, allocations_2.count)
57
+
58
+ allocations_1.count.times do |i|
59
+ allocation_1 = allocations_1[i]
60
+ allocation_2 = allocations_2[i]
61
+
62
+ assert_equal(allocation_1.klass_name, allocation_2.klass_name)
63
+ assert_equal(allocation_1.klass_flags, allocation_2.klass_flags)
64
+
65
+ assert_equal(allocation_1.count, allocation_2.count)
66
+ assert_equal(allocation_1.memory, allocation_2.memory)
67
+
68
+ assert_equal(allocation_1.source_file, allocation_2.source_file)
69
+ assert_equal(allocation_1.line, allocation_2.line)
70
+ end
71
+ end
72
+
73
+ def verify_call_infos(call_infos_1, call_infos_2)
74
+ assert_equal(call_infos_1.call_trees.count, call_infos_2.call_trees.count)
75
+ call_infos_1.call_trees.count.times do |i|
76
+ call_info_1 = call_infos_1.call_trees[i]
77
+ call_info_2 = call_infos_2.call_trees[i]
78
+ verify_call_info(call_info_1, call_info_2)
79
+ end
80
+ end
81
+
82
+ def verify_call_info(call_info_1, call_info_2)
83
+ assert_equal(call_info_1.target, call_info_2.target)
84
+
85
+ if call_info_1.parent&.target
86
+ assert_equal(call_info_1.parent&.target, call_info_2.parent&.target)
87
+ else
88
+ assert_nil(call_info_1.parent&.target)
89
+ assert_nil(call_info_2.parent&.target)
90
+ end
91
+
92
+ assert_equal(call_info_1.depth, call_info_2.depth)
93
+
94
+ if call_info_1.source_file
95
+ assert_equal(call_info_1.source_file, call_info_2.source_file) #
96
+ else
97
+ assert_nil(call_info_1.source_file)
98
+ assert_nil(call_info_2.source_file)
99
+ end
100
+
101
+ assert_equal(call_info_1.line, call_info_2.line)
102
+
103
+ verify_measurement(call_info_1.measurement, call_info_2.measurement)
104
+ end
105
+
106
+ def verify_measurement(measurement_1, measurement_2)
107
+ assert_equal(measurement_1.total_time, measurement_2.total_time)
108
+ assert_equal(measurement_1.self_time, measurement_2.self_time)
109
+ assert_equal(measurement_1.wait_time, measurement_2.wait_time)
110
+ assert_equal(measurement_1.called, measurement_2.called)
111
+ end
112
+
113
+ def test_marshal_1
114
+ profile_1 = RubyProf.profile(:measure_mode => RubyProf::WALL_TIME) do
115
+ 1.times { RubyProf::C1.new.sleep_wait }
116
+ end
117
+
118
+ data = Marshal.dump(profile_1)
119
+ profile_2 = Marshal.load(data)
120
+
121
+ verify_profile(profile_1, profile_2)
122
+ end
123
+
124
+ def test_marshal_2
125
+ profile_1 = RubyProf.profile(:measure_mode => RubyProf::PROCESS_TIME, :track_allocations => true) do
126
+ 1.times { RubyProf::C1.new.sleep_wait }
127
+ end
128
+
129
+ data = Marshal.dump(profile_1)
130
+ profile_2 = Marshal.load(data)
131
+
132
+ verify_profile(profile_1, profile_2)
133
+ end
134
+
135
+ def test_singleton
136
+ profile_1 = RubyProf.profile do
137
+ SingletonTest.instance.busy_wait
138
+ end
139
+
140
+ data = Marshal.dump(profile_1)
141
+ profile_2 = Marshal.load(data)
142
+
143
+ verify_profile(profile_1, profile_2)
144
+ end
145
+ end
@@ -0,0 +1,26 @@
1
+ # Some classes used in measurement tests
2
+ class Allocator
3
+ def make_arrays
4
+ 10.times {|i| Array.new}
5
+ end
6
+
7
+ def make_hashes
8
+ Hash.new
9
+ Hash.new
10
+ Hash.new
11
+ Hash.new
12
+ Hash.new
13
+ end
14
+
15
+ def make_strings
16
+ a_string = 'a'
17
+ b_string = a_string * 100
18
+ String.new(b_string)
19
+ end
20
+
21
+ def run
22
+ make_arrays
23
+ make_hashes
24
+ make_strings
25
+ end
26
+ end