bin/masking_profile
#!/usr/bin/env ruby
# frozen_string_literal: true
require 'bundler/setup'
require 'masking'
require 'masking/cli'
require 'ruby-prof'
original_stdout = $stdout.clone
$stdout.reopen(File.new(File::NULL, 'w'))
result = RubyProf.profile do
Masking::Cli.new(ARGV).run
end
$stdout.reopen(original_stdout)
flat_result_file = Pathname(__dir__).join('../profile/flat.txt')
RubyProf::FlatPrinterWithLineNumbers.new(result).tap do |flat_printer|
flat_printer.print(File.new(flat_result_file, 'w'))
puts "flat result is saved at #{flat_result_file}"
end
# it can produce big file. just comment out if you don't want to use it
graph_file = Pathname(__dir__).join('../profile/graph.txt')
RubyProf::GraphPrinter.new(result).tap do |graph_html_printer|
graph_html_printer.print(File.new(graph_file, 'w'))
puts "graph result is saved at #{graph_file}"
end
# it can produce huge html file. just comment out if you don't want to use it
graph_html_file = Pathname(__dir__).join('../profile/graph.html')
RubyProf::GraphHtmlPrinter.new(result).tap do |graph_html_printer|
graph_html_printer.print(File.new(graph_html_file, 'w'))
puts "graph html is saved at #{graph_html_file}"
end
# # this is quite slow so commented out. but it's useful
call_stack_html_file = Pathname(__dir__).join('../profile/call_stack.html')
RubyProf::CallStackPrinter.new(result).tap do |call_stack_html_printer|
call_stack_html_printer.print(File.new(call_stack_html_file, 'w'))
puts "call stack html is saved at #{call_stack_html_file}"
end
# # I'm not sure how to read this
# call_graph_dot_file = Pathname(__dir__).join('../profile/call_graph.dot')
# RubyProf::DotPrinter.new(result).tap do |dot_printer|
# dot_printer.print(File.new(call_graph_dot_file, 'w'))
# puts "call graph dot file is saved at #{call_graph_dot_file}"
# end
# # I'm not sure how to read this
# call_tree_dir = Pathname(__dir__).join('../profile/call_tree')
# RubyProf::CallTreePrinter.new(result).tap do |call_tree_printer|
# call_tree_printer.print(path: File.dirname(call_tree_dir) , profile: File.basename(call_tree_dir))
# puts "call tree file is saved at #{call_tree_dir}"
# end