ruby-prof 0.6.0-x86-mswin32-60 → 0.7.0-x86-mswin32-60
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.
- data/CHANGES +54 -1
- data/README +134 -7
- data/Rakefile +40 -58
- data/bin/ruby-prof +21 -6
- data/ext/extconf.rb +13 -0
- data/ext/measure_allocations.h +16 -1
- data/ext/measure_cpu_time.h +15 -3
- data/ext/measure_gc_runs.h +76 -0
- data/ext/measure_gc_time.h +57 -0
- data/ext/measure_memory.h +61 -2
- data/ext/measure_process_time.h +13 -2
- data/ext/measure_wall_time.h +12 -1
- data/ext/mingw/Rakefile +23 -0
- data/ext/mingw/build.rake +38 -0
- data/ext/mingw/ruby_prof.so +0 -0
- data/ext/ruby_prof.c +685 -633
- data/ext/ruby_prof.h +188 -0
- data/ext/vc/ruby_prof.sln +20 -0
- data/ext/vc/ruby_prof.vcproj +241 -0
- data/ext/version.h +4 -0
- data/lib/ruby-prof.rb +4 -0
- data/lib/ruby-prof/call_info.rb +47 -0
- data/lib/ruby-prof/call_tree_printer.rb +9 -1
- data/lib/ruby-prof/graph_html_printer.rb +6 -5
- data/lib/ruby-prof/graph_printer.rb +3 -2
- data/lib/ruby-prof/method_info.rb +85 -0
- data/lib/ruby-prof/task.rb +1 -2
- data/lib/ruby-prof/test.rb +148 -0
- data/rails/environment/profile.rb +24 -0
- data/rails/example/example_test.rb +9 -0
- data/rails/profile_test_helper.rb +21 -0
- data/test/basic_test.rb +173 -80
- data/test/duplicate_names_test.rb +2 -3
- data/test/exceptions_test.rb +15 -0
- data/test/exclude_threads_test.rb +54 -0
- data/test/line_number_test.rb +18 -14
- data/test/measurement_test.rb +121 -0
- data/test/module_test.rb +5 -8
- data/test/no_method_class_test.rb +4 -5
- data/test/prime.rb +3 -5
- data/test/prime_test.rb +1 -12
- data/test/printers_test.rb +10 -13
- data/test/profile_unit_test.rb +10 -12
- data/test/recursive_test.rb +202 -92
- data/test/singleton_test.rb +1 -2
- data/test/stack_test.rb +138 -0
- data/test/start_stop_test.rb +95 -0
- data/test/test_suite.rb +7 -3
- data/test/thread_test.rb +111 -87
- data/test/unique_call_path_test.rb +206 -0
- metadata +42 -44
- data/ext/extconf.rb.rej +0 -13
- data/lib/ruby-prof/call_tree_printer.rb.rej +0 -27
- data/lib/ruby-prof/profile_test_case.rb +0 -80
- data/lib/ruby_prof.so +0 -0
- data/rails_plugin/ruby-prof/init.rb +0 -8
- data/rails_plugin/ruby-prof/lib/profiling.rb +0 -57
- data/test/measure_mode_test.rb +0 -79
- data/test/prime1.rb +0 -17
- data/test/prime2.rb +0 -26
- data/test/prime3.rb +0 -17
- data/test/start_test.rb +0 -24
- data/test/test_helper.rb +0 -55
- data/test/timing_test.rb +0 -133
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-prof
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: x86-mswin32-60
|
6
6
|
authors:
|
7
7
|
- Shugo Maeda and Charlie Savage
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-11-11 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -17,79 +17,78 @@ description: ruby-prof is a fast code profiler for Ruby. It is a C extension and
|
|
17
17
|
email: shugo@ruby-lang.org and cfis@savagexi.com
|
18
18
|
executables:
|
19
19
|
- ruby-prof
|
20
|
-
extensions:
|
20
|
+
extensions:
|
21
|
+
- ext/mingw/Rakefile
|
22
|
+
extra_rdoc_files: []
|
21
23
|
|
22
|
-
extra_rdoc_files:
|
23
|
-
- bin/ruby-prof
|
24
|
-
- ext/ruby_prof.c
|
25
|
-
- examples/flat.txt
|
26
|
-
- examples/graph.txt
|
27
|
-
- examples/graph.html
|
28
|
-
- README
|
29
|
-
- LICENSE
|
30
24
|
files:
|
31
25
|
- Rakefile
|
32
26
|
- README
|
33
27
|
- LICENSE
|
34
28
|
- CHANGES
|
35
29
|
- bin/ruby-prof
|
36
|
-
- lib/ruby-prof
|
37
|
-
- lib/ruby-prof.rb
|
38
|
-
- lib/unprof.rb
|
39
|
-
- lib/ruby-prof/abstract_printer.rb
|
40
|
-
- lib/ruby-prof/call_tree_printer.rb
|
41
|
-
- lib/ruby-prof/call_tree_printer.rb.rej
|
42
|
-
- lib/ruby-prof/flat_printer.rb
|
43
|
-
- lib/ruby-prof/graph_html_printer.rb
|
44
|
-
- lib/ruby-prof/graph_printer.rb
|
45
|
-
- lib/ruby-prof/profile_test_case.rb
|
46
|
-
- lib/ruby-prof/task.rb
|
47
|
-
- rails_plugin/ruby-prof
|
48
|
-
- rails_plugin/ruby-prof/init.rb
|
49
|
-
- rails_plugin/ruby-prof/lib
|
50
|
-
- rails_plugin/ruby-prof/lib/profiling.rb
|
51
30
|
- examples/flat.txt
|
52
31
|
- examples/graph.html
|
53
32
|
- examples/graph.txt
|
54
33
|
- ext/extconf.rb
|
55
|
-
- ext/extconf.rb.rej
|
56
34
|
- ext/measure_allocations.h
|
57
35
|
- ext/measure_cpu_time.h
|
36
|
+
- ext/measure_gc_runs.h
|
37
|
+
- ext/measure_gc_time.h
|
58
38
|
- ext/measure_memory.h
|
59
39
|
- ext/measure_process_time.h
|
60
40
|
- ext/measure_wall_time.h
|
41
|
+
- ext/mingw
|
61
42
|
- ext/ruby_prof.c
|
43
|
+
- ext/ruby_prof.h
|
44
|
+
- ext/vc
|
45
|
+
- ext/version.h
|
46
|
+
- ext/mingw/Rakefile
|
47
|
+
- ext/mingw/build.rake
|
48
|
+
- ext/vc/ruby_prof.sln
|
49
|
+
- ext/vc/ruby_prof.vcproj
|
50
|
+
- lib/ruby-prof
|
51
|
+
- lib/ruby-prof/abstract_printer.rb
|
52
|
+
- lib/ruby-prof/call_info.rb
|
53
|
+
- lib/ruby-prof/call_tree_printer.rb
|
54
|
+
- lib/ruby-prof/flat_printer.rb
|
55
|
+
- lib/ruby-prof/graph_html_printer.rb
|
56
|
+
- lib/ruby-prof/graph_printer.rb
|
57
|
+
- lib/ruby-prof/method_info.rb
|
58
|
+
- lib/ruby-prof/task.rb
|
59
|
+
- lib/ruby-prof/test.rb
|
60
|
+
- lib/ruby-prof.rb
|
61
|
+
- lib/unprof.rb
|
62
|
+
- rails/environment
|
63
|
+
- rails/environment/profile.rb
|
64
|
+
- rails/example
|
65
|
+
- rails/example/example_test.rb
|
66
|
+
- rails/profile_test_helper.rb
|
62
67
|
- test/basic_test.rb
|
63
68
|
- test/duplicate_names_test.rb
|
69
|
+
- test/exceptions_test.rb
|
70
|
+
- test/exclude_threads_test.rb
|
64
71
|
- test/line_number_test.rb
|
65
|
-
- test/
|
72
|
+
- test/measurement_test.rb
|
66
73
|
- test/module_test.rb
|
67
74
|
- test/no_method_class_test.rb
|
68
75
|
- test/prime.rb
|
69
|
-
- test/prime1.rb
|
70
|
-
- test/prime2.rb
|
71
|
-
- test/prime3.rb
|
72
76
|
- test/prime_test.rb
|
73
77
|
- test/printers_test.rb
|
74
78
|
- test/profile_unit_test.rb
|
75
79
|
- test/recursive_test.rb
|
76
80
|
- test/singleton_test.rb
|
77
|
-
- test/
|
78
|
-
- test/
|
81
|
+
- test/stack_test.rb
|
82
|
+
- test/start_stop_test.rb
|
79
83
|
- test/test_suite.rb
|
80
84
|
- test/thread_test.rb
|
81
|
-
- test/
|
82
|
-
-
|
85
|
+
- test/unique_call_path_test.rb
|
86
|
+
- ext/mingw/ruby_prof.so
|
83
87
|
has_rdoc: true
|
84
88
|
homepage: http://rubyforge.org/projects/ruby-prof/
|
85
89
|
post_install_message:
|
86
|
-
rdoc_options:
|
87
|
-
|
88
|
-
- ruby-prof
|
89
|
-
- --inline-source
|
90
|
-
- --line-numbers
|
91
|
-
- --main
|
92
|
-
- README
|
90
|
+
rdoc_options: []
|
91
|
+
|
93
92
|
require_paths:
|
94
93
|
- lib
|
95
94
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -107,10 +106,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
106
|
requirements: []
|
108
107
|
|
109
108
|
rubyforge_project: ruby-prof
|
110
|
-
rubygems_version: 1.0
|
109
|
+
rubygems_version: 1.2.0
|
111
110
|
signing_key:
|
112
111
|
specification_version: 2
|
113
112
|
summary: Fast Ruby profiler
|
114
113
|
test_files:
|
115
|
-
- test/test_helper.rb
|
116
114
|
- test/test_suite.rb
|
data/ext/extconf.rb.rej
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
***************
|
2
|
-
*** 16,20 ****
|
3
|
-
end
|
4
|
-
|
5
|
-
have_header("sys/times.h")
|
6
|
-
- create_makefile("ruby_prof")
|
7
|
-
- have_func("rb_os_allocated_objects")--- 16,21 ----
|
8
|
-
end
|
9
|
-
|
10
|
-
have_header("sys/times.h")
|
11
|
-
+ have_func("rb_os_allocated_objects")
|
12
|
-
+ have_func("rb_gc_allocated_size")
|
13
|
-
+ create_makefile("ruby_prof")
|
@@ -1,27 +0,0 @@
|
|
1
|
-
***************
|
2
|
-
*** 28,39 ****
|
3
|
-
|
4
|
-
def print_threads
|
5
|
-
@result.threads.each do |thread_id, methods|
|
6
|
-
- print_methods(thread_id ,methods)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def convert(value)
|
11
|
-
- (value * 1000).round
|
12
|
-
end
|
13
|
-
|
14
|
-
def file(method)
|
15
|
-
--- 32,43 ----
|
16
|
-
|
17
|
-
def print_threads
|
18
|
-
@result.threads.each do |thread_id, methods|
|
19
|
-
+ print_methods(thread_id ,methods)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def convert(value)
|
24
|
-
+ (value * @value_scale).round
|
25
|
-
end
|
26
|
-
|
27
|
-
def file(method)
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# Make sure to first load the libraries we will override
|
2
|
-
require 'test/unit'
|
3
|
-
require 'ruby-prof'
|
4
|
-
|
5
|
-
module Test
|
6
|
-
module Unit
|
7
|
-
class TestCase
|
8
|
-
|
9
|
-
alias :run__profile__ :run
|
10
|
-
|
11
|
-
def run(result, &block)
|
12
|
-
test_name = @method_name.to_sym
|
13
|
-
alias_test_name = (@method_name + '__profile__').to_sym
|
14
|
-
|
15
|
-
self.class.class_eval("alias :#{alias_test_name} :#{test_name}")
|
16
|
-
|
17
|
-
self.class.send(:define_method, test_name) do
|
18
|
-
# Run the profiler
|
19
|
-
RubyProf.start
|
20
|
-
__send__(alias_test_name)
|
21
|
-
result = RubyProf.stop
|
22
|
-
|
23
|
-
create_output_directory
|
24
|
-
|
25
|
-
# Get the result file name
|
26
|
-
file_name = name.gsub(/\(/, '_').gsub(/\)/, '')
|
27
|
-
file_name = self.underscore(file_name)
|
28
|
-
file_path = File.join(output_directory, file_name)
|
29
|
-
file_path += file_extension
|
30
|
-
|
31
|
-
# Create a printer
|
32
|
-
printer = self.printer.new(result)
|
33
|
-
|
34
|
-
# Write the results
|
35
|
-
File.open(file_path, 'w') do |file|
|
36
|
-
printer.print(file, min_percent)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
self.run__profile__(result, &block)
|
41
|
-
end
|
42
|
-
|
43
|
-
# Taken from rails
|
44
|
-
def underscore(camel_cased_word)
|
45
|
-
camel_cased_word.to_s.gsub(/::/, '/').
|
46
|
-
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
47
|
-
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
48
|
-
tr("-", "_").downcase
|
49
|
-
end
|
50
|
-
|
51
|
-
# Add some additional methods
|
52
|
-
def min_percent
|
53
|
-
1
|
54
|
-
end
|
55
|
-
|
56
|
-
def output_directory
|
57
|
-
# Put results in subdirectory called profile
|
58
|
-
File.join(Dir.getwd, 'profile')
|
59
|
-
end
|
60
|
-
|
61
|
-
def create_output_directory
|
62
|
-
if not File.exist?(output_directory)
|
63
|
-
Dir.mkdir(output_directory)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def file_extension
|
68
|
-
if printer == RubyProf::FlatPrinter
|
69
|
-
'.html'
|
70
|
-
else
|
71
|
-
'.txt'
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def printer
|
76
|
-
RubyProf::GraphHtmlPrinter
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
data/lib/ruby_prof.so
DELETED
Binary file
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require 'ruby-prof'
|
2
|
-
|
3
|
-
module ActionController #:nodoc:
|
4
|
-
# The ruby-prof module times the performance of actions and reports to the logger. If the Active Record
|
5
|
-
# package has been included, a separate timing section for database calls will be added as well.
|
6
|
-
module Profiling #:nodoc:
|
7
|
-
LOG_PATH = nil
|
8
|
-
|
9
|
-
def self.included(base)
|
10
|
-
base.class_eval do
|
11
|
-
alias_method_chain :perform_action, :profiling
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def perform_action_with_profiling
|
16
|
-
# Profling could be running if this
|
17
|
-
# is a render_component call.
|
18
|
-
if RubyProf.running? or not logger
|
19
|
-
perform_action_without_profiling
|
20
|
-
else
|
21
|
-
result = RubyProf.profile do
|
22
|
-
perform_action_without_profiling
|
23
|
-
end
|
24
|
-
|
25
|
-
output = StringIO.new
|
26
|
-
output << " [#{complete_request_uri rescue "unknown"}]"
|
27
|
-
output << "\n\n"
|
28
|
-
|
29
|
-
# Create a flat printer
|
30
|
-
printer = RubyProf::FlatPrinter.new(result)
|
31
|
-
|
32
|
-
# Skip anything less than 1% - which is a lot of
|
33
|
-
# stuff in Rails. Don't print the source file
|
34
|
-
# its too noisy.
|
35
|
-
printer.print(output, {:min_percent => 1,
|
36
|
-
:print_file => false})
|
37
|
-
logger.info(output.string)
|
38
|
-
|
39
|
-
## Example for Graph html printer
|
40
|
-
#printer = RubyProf::GraphHtmlPrinter.new(result)
|
41
|
-
#path = File.join(LOG_PATH, 'call_graph.html')
|
42
|
-
#File.open(path, 'w') do |file|
|
43
|
-
#printer.print(file, {:min_percent => 1,
|
44
|
-
#:print_file => true})
|
45
|
-
#end
|
46
|
-
|
47
|
-
## Used for KCacheGrind visualizations
|
48
|
-
#printer = RubyProf::CallTreePrinter.new(result)
|
49
|
-
#path = File.join(LOG_PATH, 'callgrind.out')
|
50
|
-
#File.open(path, 'w') do |file|
|
51
|
-
#printer.print(file, {:min_percent => 1,
|
52
|
-
#:print_file => true})
|
53
|
-
#end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
data/test/measure_mode_test.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/unit'
|
4
|
-
require 'ruby-prof'
|
5
|
-
require 'test_helper'
|
6
|
-
require 'prime'
|
7
|
-
|
8
|
-
|
9
|
-
# -- Tests ----
|
10
|
-
class MeasureModeTest < Test::Unit::TestCase
|
11
|
-
|
12
|
-
def test_process_time
|
13
|
-
RubyProf::measure_mode = RubyProf::PROCESS_TIME
|
14
|
-
assert_equal(RubyProf::PROCESS_TIME, RubyProf::measure_mode)
|
15
|
-
result = RubyProf.profile do
|
16
|
-
run_primes
|
17
|
-
end
|
18
|
-
|
19
|
-
result.threads.each do |thread_id, methods|
|
20
|
-
methods.each do |method|
|
21
|
-
check_parent_times(method)
|
22
|
-
check_parent_calls(method)
|
23
|
-
check_child_times(method)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_wall_time
|
29
|
-
RubyProf::measure_mode = RubyProf::WALL_TIME
|
30
|
-
assert_equal(RubyProf::WALL_TIME, RubyProf::measure_mode)
|
31
|
-
result = RubyProf.profile do
|
32
|
-
run_primes
|
33
|
-
end
|
34
|
-
|
35
|
-
result.threads.values.each do |methods|
|
36
|
-
methods.each do |method|
|
37
|
-
check_parent_times(method)
|
38
|
-
check_parent_calls(method)
|
39
|
-
check_child_times(method)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_cpu
|
45
|
-
return unless RubyProf.constants.include?('CPU_TIME')
|
46
|
-
|
47
|
-
RubyProf::measure_mode = RubyProf::CPU_TIME
|
48
|
-
assert_equal(RubyProf::CPU_TIME, RubyProf::measure_mode)
|
49
|
-
result = RubyProf.profile do
|
50
|
-
run_primes
|
51
|
-
end
|
52
|
-
|
53
|
-
result.threads.values.each do |methods|
|
54
|
-
methods.each do |method|
|
55
|
-
check_parent_times(method)
|
56
|
-
check_parent_calls(method)
|
57
|
-
check_child_times(method)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_allocated_objects
|
63
|
-
return if RubyProf::ALLOCATIONS.nil?
|
64
|
-
|
65
|
-
RubyProf::measure_mode = RubyProf::ALLOCATIONS
|
66
|
-
|
67
|
-
assert_equal(RubyProf::ALLOCATIONS, RubyProf::measure_mode)
|
68
|
-
|
69
|
-
result = RubyProf.profile do
|
70
|
-
Array.new
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_invalid
|
75
|
-
assert_raise(ArgumentError) do
|
76
|
-
RubyProf::measure_mode = 7777
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
data/test/prime1.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'prime2'
|
2
|
-
require 'prime3'
|
3
|
-
|
4
|
-
def run_primes
|
5
|
-
length = 500
|
6
|
-
maxnum = 10000
|
7
|
-
|
8
|
-
# Create random numbers
|
9
|
-
random_array = make_random_array(length, maxnum)
|
10
|
-
|
11
|
-
# Find the primes
|
12
|
-
primes = find_primes(random_array)
|
13
|
-
|
14
|
-
# Find the largest primes
|
15
|
-
largest = find_largest(primes)
|
16
|
-
#puts "largest is #{largest}"
|
17
|
-
end
|
data/test/prime2.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'prime3'
|
2
|
-
|
3
|
-
# Need to use wall time for this test due to the sleep calls
|
4
|
-
RubyProf::measure_mode = RubyProf::WALL_TIME
|
5
|
-
|
6
|
-
def find_primes(arr)
|
7
|
-
result = arr.select do |value|
|
8
|
-
is_prime(value)
|
9
|
-
end
|
10
|
-
result
|
11
|
-
end
|
12
|
-
|
13
|
-
def find_largest(primes)
|
14
|
-
largest = primes.first
|
15
|
-
|
16
|
-
# Intentionally use upto for example purposes
|
17
|
-
# (upto is also called from is_prime)
|
18
|
-
0.upto(primes.length-1) do |i|
|
19
|
-
sleep(0.02)
|
20
|
-
prime = primes[i]
|
21
|
-
if prime > largest
|
22
|
-
largest = prime
|
23
|
-
end
|
24
|
-
end
|
25
|
-
largest
|
26
|
-
end
|