Methods
G
P
S
Constants
PROFILE_PROC = proc{|event, file, line, id, binding, klass| case event when "call", "c-call" now = Process.times[0] @@stack.push [now, 0.0] when "return", "c-return" now = Process.times[0] key = [klass, id] if tick = @@stack.pop data = (@@map[key] ||= [0, 0.0, 0.0, key]) data[0] += 1 cost = now - tick[0] data[1] += cost data[2] += cost - tick[1] @@stack[-1][1] += cost if @@stack[-1] end end }
 
Instance Public methods
print_profile(f)
# File ../ruby/lib/profiler.rb, line 32
def print_profile(f)
  stop_profile
  total = Process.times[0] - @@start
  if total == 0 then total = 0.01 end
  data = @@map.values
  data = data.sort_by{|x| -x[2]}
  sum = 0
  f.printf "  %%   cumulative   self              self     total\n"
  f.printf " time   seconds   seconds    calls  ms/call  ms/call  name\n"
  for d in data
    sum += d[2]
    f.printf "%6.2f %8.2f  %8.2f %8d ", d[2]/total*100, sum, d[2], d[0]
    f.printf "%8.2f %8.2f  %s\n", d[2]*1000/d[0], d[1]*1000/d[0], get_name(*d[3])
  end
  f.printf "%6.2f %8.2f  %8.2f %8d ", 0.0, total, 0.0, 1     # ???
  f.printf "%8.2f %8.2f  %s\n", 0.0, total*1000, "#toplevel" # ???
end
start_profile()
# File ../ruby/lib/profiler.rb, line 23
def start_profile
  @@start = Process.times[0]
  @@stack = []
  @@map = {}
  set_trace_func PROFILE_PROC
end
stop_profile()
# File ../ruby/lib/profiler.rb, line 29
def stop_profile
  set_trace_func nil
end
Instance Private methods
get_name(klass, id)
# File ../ruby/lib/profiler.rb, line 49
def get_name(klass, id)
  name = klass.to_s || ""
  if klass.kind_of? Class
    name += "#"
  else
    name += "."
  end
  name + id.id2name
end