Sha256: 162e5e6dcb4954b3087853520dbfbd18de2bab43d088d310299f5743dc6ea8e3
Contents?: true
Size: 1.64 KB
Versions: 1
Compression:
Stored size: 1.64 KB
Contents
# frozen_string_literal: true require 'bundler/setup' require 'polyphony' Exception.__disable_sanitized_backtrace__ = true Gyro.trace(true) sleep 0 $records = [] trace = Polyphony::Trace.new { |r| $records << r } trace.enable f2 = spin(:f2) { 3.times { sleep 0.1 } } 10.times { spin { 3.times { sleep rand(0.05..0.15) } } } suspend trace.disable puts("record count: %d" % $records.size) analysis = Polyphony::Trace.analyze $records puts("fiber count: %d" % analysis[:by_fiber].size) puts worker_fibers = analysis[:by_fiber].keys - [Fiber.current] analysis[:by_fiber][f2].each { |r| case r[:event] when /^fiber_/ STDOUT.orig_puts "#{r[:stamp]} #{r[:event]} (#{r[:value].inspect})" else STDOUT.orig_puts "#{r[:stamp]} #{r[:fiber]&.tag} #{r[:event]} (#{r[:value].inspect})" end } state = 0 run_wait_stamp = nil schedule_stamp = nil run_time = 0 wait_time = 0 schedule_count = 0 schedule_acc = 0 worker_fibers.each do |f| analysis[:by_fiber][f].each { |r| case r[:event] when :fiber_create state = 0 run_wait_stamp = r[:stamp] when :fiber_schedule schedule_count += 1 schedule_stamp = r[:stamp] when :fiber_run schedule_acc += r[:stamp] - schedule_stamp wait_time += r[:stamp] - run_wait_stamp state = 1 schedule_stamp = run_wait_stamp = r[:stamp] when :fiber_switchpoint, :fiber_terminate run_time += r[:stamp] - run_wait_stamp state = 0 run_wait_stamp = r[:stamp] end } end puts( format( "f2 run: %f wait: %f schedule_count: %d avg schedule latency: %f", run_time, wait_time, schedule_count, schedule_acc / schedule_count ) )
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
polyphony-0.28 | examples/core/xx-trace.rb |