ruby-prof 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/CHANGES +54 -1
  2. data/README +134 -7
  3. data/Rakefile +40 -58
  4. data/bin/ruby-prof +21 -6
  5. data/ext/extconf.rb +13 -0
  6. data/ext/measure_allocations.h +16 -1
  7. data/ext/measure_cpu_time.h +15 -3
  8. data/ext/measure_gc_runs.h +76 -0
  9. data/ext/measure_gc_time.h +57 -0
  10. data/ext/measure_memory.h +61 -2
  11. data/ext/measure_process_time.h +13 -2
  12. data/ext/measure_wall_time.h +12 -1
  13. data/ext/mingw/Rakefile +23 -0
  14. data/ext/mingw/build.rake +38 -0
  15. data/ext/ruby_prof.c +685 -633
  16. data/ext/ruby_prof.h +188 -0
  17. data/ext/vc/ruby_prof.sln +20 -0
  18. data/ext/vc/ruby_prof.vcproj +241 -0
  19. data/ext/version.h +4 -0
  20. data/lib/ruby-prof.rb +4 -0
  21. data/lib/ruby-prof/call_info.rb +47 -0
  22. data/lib/ruby-prof/call_tree_printer.rb +9 -1
  23. data/lib/ruby-prof/graph_html_printer.rb +6 -5
  24. data/lib/ruby-prof/graph_printer.rb +3 -2
  25. data/lib/ruby-prof/method_info.rb +85 -0
  26. data/lib/ruby-prof/task.rb +1 -2
  27. data/lib/ruby-prof/test.rb +148 -0
  28. data/rails/environment/profile.rb +24 -0
  29. data/rails/example/example_test.rb +9 -0
  30. data/rails/profile_test_helper.rb +21 -0
  31. data/test/basic_test.rb +173 -80
  32. data/test/duplicate_names_test.rb +2 -3
  33. data/test/exceptions_test.rb +15 -0
  34. data/test/exclude_threads_test.rb +54 -0
  35. data/test/line_number_test.rb +18 -14
  36. data/test/measurement_test.rb +121 -0
  37. data/test/module_test.rb +5 -8
  38. data/test/no_method_class_test.rb +4 -5
  39. data/test/prime.rb +3 -5
  40. data/test/prime_test.rb +1 -12
  41. data/test/printers_test.rb +10 -13
  42. data/test/profile_unit_test.rb +10 -12
  43. data/test/recursive_test.rb +202 -92
  44. data/test/singleton_test.rb +1 -2
  45. data/test/stack_test.rb +138 -0
  46. data/test/start_stop_test.rb +95 -0
  47. data/test/test_suite.rb +7 -3
  48. data/test/thread_test.rb +111 -87
  49. data/test/unique_call_path_test.rb +206 -0
  50. metadata +40 -42
  51. data/ext/extconf.rb.rej +0 -13
  52. data/lib/ruby-prof/call_tree_printer.rb.rej +0 -27
  53. data/lib/ruby-prof/profile_test_case.rb +0 -80
  54. data/rails_plugin/ruby-prof/init.rb +0 -8
  55. data/rails_plugin/ruby-prof/lib/profiling.rb +0 -57
  56. data/test/measure_mode_test.rb +0 -79
  57. data/test/prime1.rb +0 -17
  58. data/test/prime2.rb +0 -26
  59. data/test/prime3.rb +0 -17
  60. data/test/start_test.rb +0 -24
  61. data/test/test_helper.rb +0 -55
  62. 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.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
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-02-03 00:00:00 -07:00
12
+ date: 2008-11-11 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -19,76 +19,75 @@ executables:
19
19
  - ruby-prof
20
20
  extensions:
21
21
  - ext/extconf.rb
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
22
+ extra_rdoc_files: []
23
+
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/measure_mode_test.rb
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/start_test.rb
78
- - test/test_helper.rb
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/timing_test.rb
85
+ - test/unique_call_path_test.rb
82
86
  has_rdoc: true
83
87
  homepage: http://rubyforge.org/projects/ruby-prof/
84
88
  post_install_message:
85
- rdoc_options:
86
- - --title
87
- - ruby-prof
88
- - --inline-source
89
- - --line-numbers
90
- - --main
91
- - README
89
+ rdoc_options: []
90
+
92
91
  require_paths:
93
92
  - lib
94
93
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -106,10 +105,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
105
  requirements: []
107
106
 
108
107
  rubyforge_project: ruby-prof
109
- rubygems_version: 1.0.1
108
+ rubygems_version: 1.2.0
110
109
  signing_key:
111
110
  specification_version: 2
112
111
  summary: Fast Ruby profiler
113
112
  test_files:
114
- - test/test_helper.rb
115
113
  - test/test_suite.rb
@@ -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
@@ -1,8 +0,0 @@
1
- require 'profiling'
2
-
3
- # Grab log path from current rails configuration
4
- ActionController::Profiling::LOG_PATH = File.expand_path(File.dirname(config.log_path))
5
-
6
- ActionController::Base.class_eval do
7
- include ActionController::Profiling
8
- end
@@ -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
@@ -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
@@ -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
@@ -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