jhawthorn / vernier

📏 next generation CRuby profiler
https://vernier.prof/
MIT License
806 stars 17 forks source link

Make `record_interval` use "UserTiming" marker #20

Closed tenderlove closed 1 year ago

tenderlove commented 1 year ago

If we use the UserTiming marker type, then the user timing bar can optionally be displayed on the stack chart

Here's a sample usage:

require "vernier"

def sieve max
  sieve = []
  for i in 2 .. max
    sieve[i] = i
  end

  for i in 2 .. Math.sqrt(max)
    next unless sieve[i]
    (i*i).step(max, i) do |j|
      sieve[j] = nil
    end
  end

  sieve.compact
end

Vernier.trace(out: "time_profile.json") { |v|
  2.times.map {
    Thread.new {
      3.times do |i|
        GC.start
        v.record_interval "sieve", "Iteration #{i}" do
          sleep 0.1
          v.record_interval "sieve2", "Iteration #{i}" do
            sieve(5000000)
          end
        end
      end
    }
  }.map(&:join)
}
Ruby:Vernier – 8:22:2023, 7:11:06 PM UTC – Firefox Profiler 2023-08-22 12-18-47