diff options
author | Aaron Patterson <tenderlove@github.com> | 2018-07-26 11:45:31 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-26 11:45:31 -0700 |
commit | f0c917c7d491f4f7b142748375e1128d5579152a (patch) | |
tree | dc0933afa79eb8092ea609729b5b63d067ea4c02 /activesupport/lib/active_support/notifications | |
parent | 5f92e43af1ba1413b40d25c99741812a103e02b8 (diff) | |
parent | 42fec4b8de8c40d7778f936e200081c0dded1ed0 (diff) | |
download | rails-f0c917c7d491f4f7b142748375e1128d5579152a.tar.gz rails-f0c917c7d491f4f7b142748375e1128d5579152a.tar.bz2 rails-f0c917c7d491f4f7b142748375e1128d5579152a.zip |
Merge pull request #33449 from rails/use-process-clock-instead-of-time
Add cpu time, idle time, and allocations features to log subscriber events
Diffstat (limited to 'activesupport/lib/active_support/notifications')
-rw-r--r-- | activesupport/lib/active_support/notifications/instrumenter.rb | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/notifications/instrumenter.rb b/activesupport/lib/active_support/notifications/instrumenter.rb index e99f5ee688..ddcd1661e4 100644 --- a/activesupport/lib/active_support/notifications/instrumenter.rb +++ b/activesupport/lib/active_support/notifications/instrumenter.rb @@ -63,6 +63,34 @@ module ActiveSupport @end = ending @children = [] @duration = nil + @cpu_time_start = nil + @cpu_time_finish = nil + @allocation_count_start = 0 + @allocation_count_finish = 0 + end + + def start! + @time = now + @cpu_time_start = now_cpu + @allocation_count_start = now_allocations + end + + def finish! + @end = now + @cpu_time_finish = now_cpu + @allocation_count_finish = now_allocations + end + + def cpu_time + @cpu_time_finish - @cpu_time_start + end + + def idle_time + duration - cpu_time + end + + def allocations + @allocation_count_finish - @allocation_count_start end # Returns the difference in milliseconds between when the execution of the @@ -88,6 +116,25 @@ module ActiveSupport def parent_of?(event) @children.include? event end + + private + def now + Process.clock_gettime(Process::CLOCK_MONOTONIC) + end + + def now_cpu + Process.clock_gettime(Process::CLOCK_PROCESS_CPUTIME_ID) + end + + if defined?(JRUBY_VERSION) + def now_allocations + 0 + end + else + def now_allocations + GC.stat :total_allocated_objects + end + end end end end |