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
@@ -285,7 +285,7 @@ class LineNumbersTest < TestCase
285
285
  assert_equal('LineNumbers#method_1', call_tree.target.full_name)
286
286
  assert_equal(140, call_tree.line)
287
287
  end
288
- else
288
+ elsif Gem::Version.new(RUBY_VERSION) < Gem::Version.new('4.0')
289
289
  def test_function_line_no
290
290
  numbers = LineNumbers.new
291
291
 
@@ -422,5 +422,142 @@ class LineNumbersTest < TestCase
422
422
  assert_equal('LineNumbers#method_1', call_tree.target.full_name)
423
423
  assert_equal(293, call_tree.line)
424
424
  end
425
+ else
426
+ def test_function_line_no
427
+ numbers = LineNumbers.new
428
+
429
+ result = RubyProf::Profile.profile do
430
+ numbers.method_1
431
+ end
432
+
433
+ # Sort methods by name to have stable results
434
+ methods = result.threads.first.methods.sort_by(&:full_name)
435
+ assert_equal(8, methods.length)
436
+
437
+ # Method 0
438
+ method = methods[0]
439
+ assert_equal('Integer#<', method.full_name)
440
+ assert_equal(0, method.line)
441
+
442
+ assert_equal(1, method.call_trees.callers.count)
443
+ call_tree = method.call_trees.callers[0]
444
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
445
+ assert_equal(261, call_tree.line)
446
+
447
+ assert_equal(0, method.call_trees.callees.count)
448
+
449
+ # Method 1
450
+ method = methods[1]
451
+ assert_equal('Integer#succ', method.full_name)
452
+ assert_equal(0, method.line)
453
+
454
+ assert_equal(1, method.call_trees.callers.count)
455
+ call_tree = method.call_trees.callers[0]
456
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
457
+ assert_equal(263, call_tree.line)
458
+
459
+ assert_equal(0, method.call_trees.callees.count)
460
+
461
+ # Method 2
462
+ method = methods[2]
463
+ assert_equal('Integer#times', method.full_name)
464
+ assert_equal(255, method.line)
465
+
466
+ assert_equal(1, method.call_trees.callers.count)
467
+ call_tree = method.call_trees.callers[0]
468
+ assert_equal('LineNumbers#method_2', call_tree.parent.target.full_name)
469
+ assert_equal(15, call_tree.line)
470
+
471
+ assert_equal(3, method.call_trees.callees.count)
472
+
473
+ call_tree = method.call_trees.callees[0]
474
+ assert_equal('Integer#<', call_tree.target.full_name)
475
+ assert_equal(261, call_tree.line)
476
+
477
+ call_tree = method.call_trees.callees[1]
478
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
479
+ assert_equal(17, call_tree.line)
480
+
481
+ call_tree = method.call_trees.callees[2]
482
+ assert_equal('Integer#succ', call_tree.target.full_name)
483
+ assert_equal(263, call_tree.line)
484
+
485
+ # Method 3
486
+ method = methods[3]
487
+ assert_equal('LineNumbers#method_1', method.full_name)
488
+ assert_equal(7, method.line)
489
+
490
+ assert_equal(1, method.call_trees.callers.count)
491
+ call_tree = method.call_trees.callers[0]
492
+ assert_equal('LineNumbersTest#test_function_line_no', call_tree.parent.target.full_name)
493
+ assert_equal(430, call_tree.line)
494
+
495
+ assert_equal(2, method.call_trees.callees.count)
496
+ call_tree = method.call_trees.callees[0]
497
+ assert_equal('LineNumbers#method_2', call_tree.target.full_name)
498
+ assert_equal(8, call_tree.line)
499
+
500
+ call_tree = method.call_trees.callees[1]
501
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
502
+ assert_equal(10, call_tree.line)
503
+
504
+ # Method 4
505
+ method = methods[4]
506
+ assert_equal('LineNumbers#method_2', method.full_name)
507
+ assert_equal(13, method.line)
508
+
509
+ assert_equal(1, method.call_trees.callers.count)
510
+ call_tree = method.call_trees.callers[0]
511
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
512
+ assert_equal(8, call_tree.line)
513
+
514
+ assert_equal(1, method.call_trees.callees.count)
515
+ call_tree = method.call_trees.callees[0]
516
+ assert_equal('Integer#times', call_tree.target.full_name)
517
+ assert_equal(15, call_tree.line)
518
+
519
+ # Method 5
520
+ method = methods[5]
521
+ assert_equal('LineNumbers#method_3', method.full_name)
522
+ assert_equal(21, method.line)
523
+
524
+ assert_equal(2, method.call_trees.callers.count)
525
+ call_tree = method.call_trees.callers[0]
526
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
527
+ assert_equal(17, call_tree.line)
528
+
529
+ call_tree = method.call_trees.callers[1]
530
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
531
+ assert_equal(10, call_tree.line)
532
+
533
+ assert_equal(1, method.call_trees.callees.count)
534
+ call_tree = method.call_trees.callees[0]
535
+ assert_equal('LineNumbers#method_4', call_tree.target.full_name)
536
+ assert_equal(22, call_tree.line)
537
+
538
+ # Method 6
539
+ method = methods[6]
540
+ assert_equal('LineNumbers#method_4', method.full_name)
541
+ assert_equal(25, method.line)
542
+
543
+ assert_equal(1, method.call_trees.callers.count)
544
+ call_tree = method.call_trees.callers[0]
545
+ assert_equal('LineNumbers#method_3', call_tree.parent.target.full_name)
546
+ assert_equal(22, call_tree.line)
547
+
548
+ assert_equal(0, method.call_trees.callees.count)
549
+
550
+ # Method 7
551
+ method = methods[7]
552
+ assert_equal('LineNumbersTest#test_function_line_no', method.full_name)
553
+ assert_equal(430, method.line)
554
+
555
+ assert_equal(0, method.call_trees.callers.count)
556
+
557
+ assert_equal(1, method.call_trees.callees.count)
558
+ call_tree = method.call_trees.callees[0]
559
+ assert_equal('LineNumbers#method_1', call_tree.target.full_name)
560
+ assert_equal(430, call_tree.line)
561
+ end
425
562
  end
426
563
  end
data/test/marshal_test.rb CHANGED
@@ -1,145 +1,144 @@
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.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.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.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
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
+
67
+ assert_equal(allocation_1.source_file, allocation_2.source_file)
68
+ assert_equal(allocation_1.line, allocation_2.line)
69
+ end
70
+ end
71
+
72
+ def verify_call_infos(call_infos_1, call_infos_2)
73
+ assert_equal(call_infos_1.call_trees.count, call_infos_2.call_trees.count)
74
+ call_infos_1.call_trees.count.times do |i|
75
+ call_info_1 = call_infos_1.call_trees[i]
76
+ call_info_2 = call_infos_2.call_trees[i]
77
+ verify_call_info(call_info_1, call_info_2)
78
+ end
79
+ end
80
+
81
+ def verify_call_info(call_info_1, call_info_2)
82
+ assert_equal(call_info_1.target, call_info_2.target)
83
+
84
+ if call_info_1.parent&.target
85
+ assert_equal(call_info_1.parent&.target, call_info_2.parent&.target)
86
+ else
87
+ assert_nil(call_info_1.parent&.target)
88
+ assert_nil(call_info_2.parent&.target)
89
+ end
90
+
91
+ assert_equal(call_info_1.depth, call_info_2.depth)
92
+
93
+ if call_info_1.source_file
94
+ assert_equal(call_info_1.source_file, call_info_2.source_file) #
95
+ else
96
+ assert_nil(call_info_1.source_file)
97
+ assert_nil(call_info_2.source_file)
98
+ end
99
+
100
+ assert_equal(call_info_1.line, call_info_2.line)
101
+
102
+ verify_measurement(call_info_1.measurement, call_info_2.measurement)
103
+ end
104
+
105
+ def verify_measurement(measurement_1, measurement_2)
106
+ assert_equal(measurement_1.total_time, measurement_2.total_time)
107
+ assert_equal(measurement_1.self_time, measurement_2.self_time)
108
+ assert_equal(measurement_1.wait_time, measurement_2.wait_time)
109
+ assert_equal(measurement_1.called, measurement_2.called)
110
+ end
111
+
112
+ def test_marshal_1
113
+ profile_1 = RubyProf::Profile.profile(measure_mode: RubyProf::WALL_TIME) do
114
+ 1.times { RubyProf::C1.new.sleep_wait }
115
+ end
116
+
117
+ data = Marshal.dump(profile_1)
118
+ profile_2 = Marshal.load(data)
119
+
120
+ verify_profile(profile_1, profile_2)
121
+ end
122
+
123
+ def test_marshal_2
124
+ profile_1 = RubyProf::Profile.profile(measure_mode: RubyProf::PROCESS_TIME, track_allocations: true) do
125
+ 1.times { RubyProf::C1.new.sleep_wait }
126
+ end
127
+
128
+ data = Marshal.dump(profile_1)
129
+ profile_2 = Marshal.load(data)
130
+
131
+ verify_profile(profile_1, profile_2)
132
+ end
133
+
134
+ def test_singleton
135
+ profile_1 = RubyProf::Profile.profile do
136
+ SingletonTest.instance.busy_wait
137
+ end
138
+
139
+ data = Marshal.dump(profile_1)
140
+ profile_2 = Marshal.load(data)
141
+
142
+ verify_profile(profile_1, profile_2)
143
+ end
144
+ end
@@ -1,26 +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
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