Files

Rack::MiniProfiler::ProfilingMethods

Public Instance Methods

counter(type, duration_ms=nil) click to toggle source

Add a custom timing. These are displayed similar to SQL/query time in columns expanding to the right.

type - String counter type. Each distinct type gets its own column. duration_ms - Duration of the call in ms. Either this or a block must be

given but not both.

When a block is given, calculate the duration by yielding to the block and keeping a record of its run time.

Returns the result of the block, or nil when no block is given.

# File Ruby/lib/mini_profiler/profiling_methods.rb, line 111
def counter(type, duration_ms=nil)
  result = nil
  if block_given?
    start = Time.now
    result = yield
    duration_ms = (Time.now - start).to_f * 1000
  end
  return result if current.nil? || !request_authorized?
  current.current_timer.add_custom(type, duration_ms, current.page_struct)
  result
end
finish_step(obj) click to toggle source
# File Ruby/lib/mini_profiler/profiling_methods.rb, line 19
def finish_step(obj)
  if obj && current
    current_timer, parent_timer = obj
    current_timer.record_time
    current.current_timer = parent_timer
  end
end
profile_method(klass, method, &blk) click to toggle source
# File Ruby/lib/mini_profiler/profiling_methods.rb, line 58
def profile_method(klass, method, &blk)
  default_name = klass.to_s + " " + method.to_s
  clean = clean_method_name(method)

  with_profiling =  ("#{clean}_with_mini_profiler").intern
  without_profiling = ("#{clean}_without_mini_profiler").intern

  if klass.send :method_defined?, with_profiling
    return # dont double profile
  end

  klass.send :alias_method, without_profiling, method
  klass.send :define_method, with_profiling do |*args, &orig|
    return self.send without_profiling, *args, &orig unless Rack::MiniProfiler.current

    name = default_name
    if blk
      name =
        if respond_to?(:instance_exec)
          instance_exec(*args, &blk)
        else
          # deprecated in Rails 4.x
          blk.bind(self).call(*args)
        end
    end

    parent_timer = Rack::MiniProfiler.current.current_timer
    page_struct = Rack::MiniProfiler.current.page_struct
    result = nil

    Rack::MiniProfiler.current.current_timer = current_timer = parent_timer.add_child(name)
    begin
      result = self.send without_profiling, *args, &orig
    ensure
      current_timer.record_time
      Rack::MiniProfiler.current.current_timer = parent_timer
    end
    result
  end
  klass.send :alias_method, method, with_profiling
end
record_sql(query, elapsed_ms) click to toggle source
# File Ruby/lib/mini_profiler/profiling_methods.rb, line 5
def record_sql(query, elapsed_ms)
  c = current
  return unless c
  c.current_timer.add_sql(query, elapsed_ms, c.page_struct, c.skip_backtrace, c.full_backtrace) if (c && c.current_timer)
end
start_step(name) click to toggle source
# File Ruby/lib/mini_profiler/profiling_methods.rb, line 11
def start_step(name)
  if current
    parent_timer = current.current_timer
    current.current_timer = current_timer = current.current_timer.add_child(name)
    [current_timer,parent_timer]
  end
end
step(name, opts = nil) click to toggle source

perform a profiling step on given block

# File Ruby/lib/mini_profiler/profiling_methods.rb, line 28
def step(name, opts = nil)
  if current
    parent_timer = current.current_timer
    result = nil
    current.current_timer = current_timer = current.current_timer.add_child(name)
    begin
      result = yield if block_given?
    ensure
      current_timer.record_time
      current.current_timer = parent_timer
    end
  else
    yield if block_given?
  end
end
unprofile_method(klass, method) click to toggle source
# File Ruby/lib/mini_profiler/profiling_methods.rb, line 44
def unprofile_method(klass, method)

  clean = clean_method_name(method)

  with_profiling = ("#{clean}_with_mini_profiler").intern
  without_profiling = ("#{clean}_without_mini_profiler").intern

  if klass.send :method_defined?, with_profiling
    klass.send :alias_method, method, without_profiling
    klass.send :remove_method, with_profiling
    klass.send :remove_method, without_profiling
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.