    # 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