class Merb::Rack::Profiler
Public Class Methods
new(app, types = [RubyProf::ALLOCATIONS, RubyProf::PROCESS_TIME])
click to toggle source
:api: private
Calls superclass method
Merb::Rack::Middleware.new
# File lib/merb-core/rack/middleware/profiler.rb, line 12 def initialize(app, types = [RubyProf::ALLOCATIONS, RubyProf::PROCESS_TIME]) super(app) @types = types end
Public Instance Methods
call(env)
click to toggle source
:api: plugin
Calls superclass method
Merb::Rack::Middleware#call
# File lib/merb-core/rack/middleware/profiler.rb, line 18 def call(env) measure_names = { RubyProf::ALLOCATIONS => 'allocations', RubyProf::PROCESS_TIME => 'time', RubyProf::MEMORY => "memory" } ret = nil GC.disable @types.each do |type| next if type.nil? if GC.respond_to?(:enable_stats) GC.enable_stats || GC.clear_stats end RubyProf.measure_mode = type RubyProf.start 100.times do ret = super end result = RubyProf.stop printer = RubyProf::CallTreePrinter.new(result) path = "merb_profile_results" / env["PATH_INFO"] FileUtils.mkdir_p(path) printer.print( File.open( "#{path}/callgrind.out.#{measure_names[RubyProf::measure_mode]}", 'w')) GC.disable_stats if GC.respond_to?(:disable_stats) end GC.enable ret end