mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-15 08:50:45 -07:00
69 lines
1.9 KiB
Ruby
69 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'stackprof'
|
|
require 'fileutils'
|
|
require_relative 'theme_runner'
|
|
|
|
output_dir = ENV['OUTPUT_DIR'] || "/tmp/liquid-performance"
|
|
FileUtils.mkdir_p(output_dir)
|
|
|
|
Liquid::Template.error_mode = ARGV.first.to_sym if ARGV.first
|
|
profiler = ThemeRunner.new
|
|
profiler.run_all # warmup
|
|
|
|
puts
|
|
puts "writing to #{output_dir}/cpu.profile"
|
|
StackProf.run(mode: :cpu, raw: true, out: "#{output_dir}/cpu.profile") do
|
|
100.times do
|
|
profiler.run_all
|
|
end
|
|
end
|
|
|
|
puts "writing to #{output_dir}/object.profile"
|
|
StackProf.run(mode: :object, raw: true, out: "#{output_dir}/object.profile") do
|
|
100.times do
|
|
profiler.run_all
|
|
end
|
|
end
|
|
|
|
puts "running cpu profile"
|
|
results = StackProf.run(mode: :cpu) do
|
|
100.times do
|
|
profiler.run_all
|
|
end
|
|
end
|
|
|
|
File.open("#{output_dir}/cpu.graph.dot", 'w+') do |f|
|
|
puts("Writing cpu graph to #{File.join(output_dir, "cpu.graph.dot")}")
|
|
StackProf::Report.new(results).print_graphviz({}, f)
|
|
end
|
|
|
|
StackProf::Report.new(results).print_text(false, 20)
|
|
puts("Writing cpu profile to #{File.join(output_dir, "cpu.profile")}")
|
|
File.write(File.join(output_dir, "cpu.profile"), Marshal.dump(results))
|
|
|
|
puts
|
|
puts "Profiling in object mode..."
|
|
results = StackProf.run(mode: :object) do
|
|
100.times do
|
|
profiler.run_all
|
|
end
|
|
end
|
|
|
|
File.open("#{output_dir}/object.graph.dot", 'w+') do |f|
|
|
puts("Writing object graph to #{File.join(output_dir, "object.graph.dot")}")
|
|
StackProf::Report.new(results).print_graphviz({}, f)
|
|
end
|
|
|
|
StackProf::Report.new(results).print_text(false, 20)
|
|
puts("Writing object profile to #{File.join(output_dir, "object.profile")}")
|
|
File.write(File.join(output_dir, "object.profile"), Marshal.dump(results))
|
|
puts
|
|
puts
|
|
puts "files in #{output_dir}:"
|
|
Dir.glob("#{output_dir}/*").each do |file|
|
|
puts " #{file}"
|
|
end
|
|
puts "Recommended:"
|
|
puts "stackprof --d3-flamegraph #{output_dir}/cpu.profile > #{output_dir}/flame.html"
|