Methods

Class/Module Index [+]

Quicksearch

Merb::Rack::Profiler

Public Class Methods

new(app, types = [RubyProf::ALLOCATIONS, RubyProf::PROCESS_TIME]) click to toggle source

:api: private

# 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

# 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

[Validate]

Generated with the Darkfish Rdoc Generator 2.