# encoding: utf-8
require 'erb'
module RubyProf
# Generates graph[link:files/examples/graph_html.html] profile reports as html.
# To use the graph html printer:
#
# result = RubyProf.profile do
# [code to profile]
# end
#
# printer = RubyProf::GraphHtmlPrinter.new(result)
# printer.print(STDOUT, :min_percent=>0)
#
# The Graph printer takes the following options in its print methods:
class GraphHtmlPrinter < AbstractPrinter
include ERB::Util
def setup_options(options)
super(options)
@erb = ERB.new(self.template)
end
def print(output = STDOUT, options = {})
setup_options(options)
output << @erb.result(binding)
end
# Creates a link to a method. Note that we do not create
# links to methods which are under the min_perecent
# specified by the user, since they will not be
# printed out.
def create_link(thread, overall_time, method)
total_percent = (method.total_time/overall_time) * 100
if total_percent < min_percent
# Just return name
h method.full_name
else
href = '#' + method_href(thread, method)
"#{h method.full_name}"
end
end
def method_href(thread, method)
h(method.full_name.gsub(/[><#\.\?=:]/,"_") + "_" + thread.fiber_id.to_s)
end
def file_link(path, linenum)
if path.nil?
""
else
srcfile = File.expand_path(path)
"#{linenum}"
end
end
def template
path = File.expand_path(File.join(__FILE__, '..', '..', 'assets', 'graph_printer.html.erb'))
File.read(path, :mode => 'rb')
end
end
end