class Capybara::Driver::Base
Attributes
requests[W]
responses[W]
visited[RW]
Public Instance Methods
current_memory()
click to toggle source
# File lib/kimurai/capybara_ext/driver/base.rb, line 15 def current_memory driver_pid = pid all = (get_descendant_processes(driver_pid) << driver_pid).uniq all.map { |pid| get_process_memory(pid) }.sum end
requests()
click to toggle source
# File lib/kimurai/capybara_ext/driver/base.rb, line 7 def requests @requests ||= 0 end
responses()
click to toggle source
# File lib/kimurai/capybara_ext/driver/base.rb, line 11 def responses @responses ||= 0 end
Private Instance Methods
get_descendant_processes(base)
click to toggle source
# File lib/kimurai/capybara_ext/driver/base.rb, line 24 def get_descendant_processes(base) descendants = Hash.new { |ht, k| ht[k] = [k] } Hash[*`ps -eo pid,ppid`.scan(/\d+/).map(&:to_i)].each do |pid, ppid| descendants[ppid] << descendants[pid] end descendants[base].flatten - [base] end
get_process_memory(pid)
click to toggle source
github.com/schneems/get_process_mem Note: for Linux takes PSS (not RSS) memory (I think PSS better fits in this case)
# File lib/kimurai/capybara_ext/driver/base.rb, line 35 def get_process_memory(pid) case @platform ||= Gem::Platform.local.os when "linux" begin file = Pathname.new "/proc/#{pid}/smaps" return 0 unless file.exist? lines = file.each_line.select { |line| line.match(/^Pss/) } return 0 if lines.empty? lines.reduce(0) do |sum, line| line.match(/(?<value>(\d*\.{0,1}\d+))\s+(?<unit>\w\w)/) do |m| sum += m[:value].to_i end sum end rescue Errno::EACCES 0 end when "darwin" mem = `ps -o rss= -p #{pid}`.strip mem.empty? ? 0 : mem.to_i else raise "Can't check process memory, wrong type of platform: #{@platform}" end end