ruby-prof 1.8.0-x64-mswin64-140

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 (108) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +665 -0
  3. data/LICENSE +25 -0
  4. data/README.md +5 -0
  5. data/Rakefile +98 -0
  6. data/bin/ruby-prof +341 -0
  7. data/bin/ruby-prof-check-trace +45 -0
  8. data/ext/ruby_prof/extconf.rb +23 -0
  9. data/ext/ruby_prof/rp_allocation.c +327 -0
  10. data/ext/ruby_prof/rp_allocation.h +32 -0
  11. data/ext/ruby_prof/rp_call_tree.c +502 -0
  12. data/ext/ruby_prof/rp_call_tree.h +47 -0
  13. data/ext/ruby_prof/rp_call_trees.c +296 -0
  14. data/ext/ruby_prof/rp_call_trees.h +28 -0
  15. data/ext/ruby_prof/rp_measure_allocations.c +47 -0
  16. data/ext/ruby_prof/rp_measure_memory.c +46 -0
  17. data/ext/ruby_prof/rp_measure_process_time.c +64 -0
  18. data/ext/ruby_prof/rp_measure_wall_time.c +52 -0
  19. data/ext/ruby_prof/rp_measurement.c +359 -0
  20. data/ext/ruby_prof/rp_measurement.h +52 -0
  21. data/ext/ruby_prof/rp_method.c +551 -0
  22. data/ext/ruby_prof/rp_method.h +66 -0
  23. data/ext/ruby_prof/rp_profile.c +933 -0
  24. data/ext/ruby_prof/rp_profile.h +36 -0
  25. data/ext/ruby_prof/rp_stack.c +212 -0
  26. data/ext/ruby_prof/rp_stack.h +53 -0
  27. data/ext/ruby_prof/rp_thread.c +433 -0
  28. data/ext/ruby_prof/rp_thread.h +39 -0
  29. data/ext/ruby_prof/ruby_prof.c +50 -0
  30. data/ext/ruby_prof/ruby_prof.h +35 -0
  31. data/ext/ruby_prof/vc/ruby_prof.sln +39 -0
  32. data/ext/ruby_prof/vc/ruby_prof.vcxproj +158 -0
  33. data/lib/ruby-prof/assets/call_stack_printer.html.erb +711 -0
  34. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  35. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -0
  36. data/lib/ruby-prof/call_tree.rb +57 -0
  37. data/lib/ruby-prof/call_tree_visitor.rb +36 -0
  38. data/lib/ruby-prof/compatibility.rb +113 -0
  39. data/lib/ruby-prof/exclude_common_methods.rb +204 -0
  40. data/lib/ruby-prof/measurement.rb +17 -0
  41. data/lib/ruby-prof/method_info.rb +87 -0
  42. data/lib/ruby-prof/printers/abstract_printer.rb +156 -0
  43. data/lib/ruby-prof/printers/call_info_printer.rb +53 -0
  44. data/lib/ruby-prof/printers/call_stack_printer.rb +180 -0
  45. data/lib/ruby-prof/printers/call_tree_printer.rb +145 -0
  46. data/lib/ruby-prof/printers/dot_printer.rb +132 -0
  47. data/lib/ruby-prof/printers/flat_printer.rb +53 -0
  48. data/lib/ruby-prof/printers/graph_html_printer.rb +63 -0
  49. data/lib/ruby-prof/printers/graph_printer.rb +113 -0
  50. data/lib/ruby-prof/printers/multi_printer.rb +127 -0
  51. data/lib/ruby-prof/profile.rb +70 -0
  52. data/lib/ruby-prof/rack.rb +105 -0
  53. data/lib/ruby-prof/task.rb +147 -0
  54. data/lib/ruby-prof/thread.rb +20 -0
  55. data/lib/ruby-prof/version.rb +3 -0
  56. data/lib/ruby-prof.rb +52 -0
  57. data/lib/unprof.rb +10 -0
  58. data/ruby-prof.gemspec +67 -0
  59. data/test/abstract_printer_test.rb +27 -0
  60. data/test/alias_test.rb +117 -0
  61. data/test/call_tree_builder.rb +126 -0
  62. data/test/call_tree_test.rb +94 -0
  63. data/test/call_tree_visitor_test.rb +27 -0
  64. data/test/call_trees_test.rb +66 -0
  65. data/test/compatibility_test.rb +49 -0
  66. data/test/duplicate_names_test.rb +32 -0
  67. data/test/dynamic_method_test.rb +50 -0
  68. data/test/enumerable_test.rb +23 -0
  69. data/test/exceptions_test.rb +24 -0
  70. data/test/exclude_methods_test.rb +363 -0
  71. data/test/exclude_threads_test.rb +48 -0
  72. data/test/fiber_test.rb +195 -0
  73. data/test/gc_test.rb +104 -0
  74. data/test/inverse_call_tree_test.rb +174 -0
  75. data/test/line_number_test.rb +426 -0
  76. data/test/marshal_test.rb +145 -0
  77. data/test/measure_allocations.rb +26 -0
  78. data/test/measure_allocations_test.rb +1172 -0
  79. data/test/measure_process_time_test.rb +3330 -0
  80. data/test/measure_times.rb +56 -0
  81. data/test/measure_wall_time_test.rb +635 -0
  82. data/test/measurement_test.rb +82 -0
  83. data/test/merge_test.rb +146 -0
  84. data/test/method_info_test.rb +100 -0
  85. data/test/multi_printer_test.rb +66 -0
  86. data/test/no_method_class_test.rb +15 -0
  87. data/test/pause_resume_test.rb +171 -0
  88. data/test/prime.rb +54 -0
  89. data/test/prime_script.rb +6 -0
  90. data/test/printer_call_stack_test.rb +27 -0
  91. data/test/printer_call_tree_test.rb +30 -0
  92. data/test/printer_flat_test.rb +99 -0
  93. data/test/printer_graph_html_test.rb +59 -0
  94. data/test/printer_graph_test.rb +40 -0
  95. data/test/printers_test.rb +178 -0
  96. data/test/printing_recursive_graph_test.rb +81 -0
  97. data/test/profile_test.rb +101 -0
  98. data/test/rack_test.rb +93 -0
  99. data/test/recursive_test.rb +796 -0
  100. data/test/scheduler.rb +363 -0
  101. data/test/singleton_test.rb +38 -0
  102. data/test/stack_printer_test.rb +61 -0
  103. data/test/start_stop_test.rb +106 -0
  104. data/test/test_helper.rb +21 -0
  105. data/test/thread_test.rb +229 -0
  106. data/test/unique_call_path_test.rb +123 -0
  107. data/test/yarv_test.rb +56 -0
  108. metadata +228 -0
@@ -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.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
@@ -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