| Class | RubyProf::ProfileTask |
| In: |
lib/ruby-prof/task.rb
|
| Parent: | Rake::TestTask |
Define a task library for profiling unit tests with ruby-prof.
All of the options provided by the Rake:TestTask are supported except the loader which is set to ruby-prof. For detailed information please refer to the Rake:TestTask documentation.
ruby-prof specific options include:
output_dir - For each file specified an output
file with profile information will be
written to the output directory.
By default, the output directory is
called "profile" and is created underneath
the current working directory.
printer - Specifies the output printer. Valid values include
:flat, :graph, :graph_html and :call_tree.
min_percent - Methods that take less than the specified percent
will not be written out.
Example:
require 'ruby-prof/task'
RubyProf::ProfileTask.new do |t|
t.test_files = FileList['test/test*.rb']
t.output_dir = "c:/temp"
t.printer = :graph
t.min_percent = 10
end
If rake is invoked with a "TEST=filename" command line option, then the list of test files will be overridden to include only the filename specified on the command line. This provides an easy way to run just one test.
If rake is invoked with a "TESTOPTS=options" command line option, then the given options are passed to the test process after a ’—’. This allows Test::Unit options to be passed to the test suite.
Examples:
rake profile # run tests normally rake profile TEST=just_one_file.rb # run just one test file. rake profile TESTOPTS="-v" # run in verbose mode rake profile TESTOPTS="--runner=fox" # use the fox test runner
| min_percent | [RW] | |
| output_dir | [RW] | |
| printer | [RW] |
# File lib/ruby-prof/task.rb, line 135
135: def clean_output_directory
136: if File.exist?(output_directory)
137: files = Dir.glob(output_directory + '/*')
138: FileUtils.rm(files)
139: end
140: end
# File lib/ruby-prof/task.rb, line 129
129: def create_output_directory
130: if not File.exist?(output_directory)
131: Dir.mkdir(output_directory)
132: end
133: end
Create the tasks defined by this task lib.
# File lib/ruby-prof/task.rb, line 69
69: def define
70: lib_path = @libs.join(File::PATH_SEPARATOR)
71: desc "Profile" + (@name==:profile ? "" : " for #{@name}")
72:
73: task @name do
74: create_output_directory
75:
76: @ruby_opts.unshift( "-I#{lib_path}" )
77: @ruby_opts.unshift( "-w" ) if @warning
78: @ruby_opts.push("-S ruby-prof")
79: @ruby_opts.push("--printer #{@printer}")
80: @ruby_opts.push("--min_percent #{@min_percent}")
81:
82: file_list.each do |file_path|
83: run_script(file_path)
84: end
85: end
86: self
87: end
# File lib/ruby-prof/task.rb, line 125
125: def output_directory
126: File.expand_path(@output_dir)
127: end
Run script
# File lib/ruby-prof/task.rb, line 90
90: def run_script(script_path)
91: run_code = ''
92: RakeFileUtils.verbose(@verbose) do
93: file_name = File.basename(script_path, File.extname(script_path))
94: case @printer
95: when :flat, :graph, :call_tree
96: file_name += ".txt"
97: when :graph_html
98: file_name += ".html"
99: else
100: file_name += ".txt"
101: end
102:
103: output_file_path = File.join(output_directory, file_name)
104:
105: command_line = @ruby_opts.join(" ") +
106: " --file=" + output_file_path +
107: " " + script_path
108:
109: puts "ruby " + command_line
110: # We have to catch the exeption to continue on. However,
111: # the error message will have been output to STDERR
112: # already by the time we get here so we don't have to
113: # do that again
114: begin
115: ruby command_line
116: rescue => e
117: STDOUT << e << "\n"
118: STDOUT.flush
119: end
120: puts ""
121: puts ""
122: end
123: end