summaryrefslogtreecommitdiff
path: root/lib/profiler.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-23 08:57:22 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-23 08:57:22 +0000
commitef6abd10c725bdf85d8b35a723cd0eca454bfcd7 (patch)
tree90dc9e8686040f177d8da7dda260d3227ec48a15 /lib/profiler.rb
parentcd6139cacdef549b6eda975d55be80a9cf37fb4e (diff)
profiler.rb: TracePoint
* lib/profiler.rb (Profiler__::PROFILE_PROC): use TracePoint. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/profiler.rb')
-rw-r--r--lib/profiler.rb14
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/profiler.rb b/lib/profiler.rb
index ed787af..3194eba 100644
--- a/lib/profiler.rb
+++ b/lib/profiler.rb
@@ -60,14 +60,14 @@
module Profiler__
# internal values
@@start = @@stack = @@map = @@array = nil
- PROFILE_PROC = proc{|event, file, line, id, binding, klass|
- case event
- when "call", "c-call"
+ PROFILE_PROC = TracePoint.new(:call, :c_call, :return, :c_return) {|tp|
+ case tp.event
+ when :call, :c_call
now = Process.times[0]
@@stack.push [now, 0.0]
- when "return", "c-return"
+ when :return, :c_return
now = Process.times[0]
- key = [klass, id]
+ key = [tp.defined_class, tp.method_id]
if tick = @@stack.pop
data = begin
@@map[key] ||= [0, 0.0, 0.0, key]
@@ -88,10 +88,10 @@ module_function
@@stack = []
@@map = {}
@@array = []
- set_trace_func PROFILE_PROC
+ PROFILE_PROC.enable
end
def stop_profile
- set_trace_func nil
+ PROFILE_PROC.disable
end
def print_profile(f)
stop_profile