profiler.rb: split PROFILE_PROC

* lib/profiler.rb (PROFILE_CALL_PROC, PROFILE_RETURN_PROC): split
  PROFILE_PROC for call and return events.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2013-02-03 00:37:26 +00:00
Родитель f5b8e90a93
Коммит f87614d7a8
2 изменённых файлов: 26 добавлений и 21 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Sun Feb 3 09:37:22 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/profiler.rb (PROFILE_CALL_PROC, PROFILE_RETURN_PROC): split
PROFILE_PROC for call and return events.
Sat Feb 2 14:32:00 2013 Zachary Scott <zachary@zacharyscott.net>
* lib/minitest/mock.rb, lib/minitest/hell.rb: nodoc top-level module

Просмотреть файл

@ -76,25 +76,23 @@ module Profiler__
@@start = nil # the start time that profiling began
@@stacks = nil # the map of stacks keyed by thread
@@maps = nil # the map of call data keyed by thread, class and id. Call data contains the call count, total time,
PROFILE_PROC = TracePoint.new(:call, :c_call, :return, :c_return) {|tp|
case tp.event
when :call, :c_call
now = Process.times[0]
stack = (@@stacks[Thread.current] ||= [])
stack.push [now, 0.0]
when :return, :c_return
now = Process.times[0]
key = Wrapper.new(tp.defined_class, tp.method_id)
stack = (@@stacks[Thread.current] ||= [])
if tick = stack.pop
threadmap = (@@maps[Thread.current] ||= {})
data = (threadmap[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
PROFILE_CALL_PROC = TracePoint.new(:call, :c_call) {|tp| # :nodoc:
now = Process.times[0]
stack = (@@stacks[Thread.current] ||= [])
stack.push [now, 0.0]
}
PROFILE_RETURN_PROC = TracePoint.new(:return, :c_return) {|tp| # :nodoc:
now = Process.times[0]
key = Wrapper.new(tp.defined_class, tp.method_id)
stack = (@@stacks[Thread.current] ||= [])
if tick = stack.pop
threadmap = (@@maps[Thread.current] ||= {})
data = (threadmap[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
}
module_function
@ -102,10 +100,12 @@ module_function
@@start = Process.times[0]
@@stacks = {}
@@maps = {}
PROFILE_PROC.enable
PROFILE_CALL_PROC.enable
PROFILE_RETURN_PROC.enable
end
def stop_profile
PROFILE_PROC.disable
PROFILE_CALL_PROC.disable
PROFILE_RETURN_PROC.disable
end
def print_profile(f)
stop_profile