bench/rubyprof.rb (30 lines of code) (raw):

#!/usr/bin/env ruby # frozen_string_literal: true require 'ruby-prof' require 'rack/test' $LOAD_PATH.unshift(File.expand_path('../lib', __dir__)) require 'elastic-apm' require './bench/app' include App::Helpers def perform(app, count: 1000) app.start transactions = count.times.map do |i| ElasticAPM.transaction "Transaction##{i}", context: ElasticAPM.build_context(app.mock_env) do ElasticAPM.span('Number one') { 'ok 1' } ElasticAPM.span('Number two') { 'ok 2' } ElasticAPM.span('Number three') { 'ok 3' } end end app.stop end def do_bench(transaction_count: 1000, **config) with_app(config) do |app| profile = RubyProf::Profile.new profile.exclude_common_methods! profile.start perform(app, count: transaction_count) profile.stop printer = RubyProf::GraphHtmlPrinter.new(profile) printer.print(File.open('bench/tmp/out.html', 'w')) end end do_bench(transaction_count: 10_000)