class Stackflame
Constants
- DEFAULT_OPTIONS
- VERSION
Public Class Methods
profile(options = {}, &block)
click to toggle source
# File lib/stackflame.rb, line 13 def self.profile(options = {}, &block) stackflame = self.new stackflame.run(options, &block) stackflame.open_flamegraph end
Public Instance Methods
open_flamegraph(params = {})
click to toggle source
# File lib/stackflame.rb, line 28 def open_flamegraph(params = {}) params = params.merge(data: temp_js_path) if system("which osascript > /dev/null") # NOTE: `open` can't open path with query string `osascript -e 'open location "#{flamegraph_path(params)}"'` else puts "This OS is not supported. Please open: #{flamegraph_path(params)}" end end
run(options = {}, &block)
click to toggle source
# File lib/stackflame.rb, line 19 def run(options = {}, &block) options = DEFAULT_OPTIONS.merge(options) result = StackProf.run(options, &block) File.open(temp_js_path, 'w') do |f| StackProf::Report.new(result).print_flamegraph(f) end end
Private Instance Methods
flamegraph_path(params)
click to toggle source
# File lib/stackflame.rb, line 40 def flamegraph_path(params) viewer_path = File.expand_path('../../vendor/viewer.html', __FILE__) "file://#{viewer_path}#{to_query(params)}" end
temp_js_path()
click to toggle source
# File lib/stackflame.rb, line 55 def temp_js_path return @js_path if @js_path temp = `mktemp /tmp/stackflame-XXXXXXXX`.strip @js_path = "#{temp}.js" `mv #{temp} #{@js_path}` @js_path end
to_query(params)
click to toggle source
# File lib/stackflame.rb, line 45 def to_query(params) return '' if params.size == 0 queries = [] params.each do |key, value| queries << "#{URI.escape(key.to_s)}=#{URI.escape(value.to_s)}" end "?#{queries.join('&')}" end