# 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