50 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/env ruby
 | |
| 
 | |
| require "bundler/setup"
 | |
| require "json"
 | |
| require "stackprof"
 | |
| require File.expand_path("../lib/jekyll", __dir__)
 | |
| 
 | |
| MODE = ARGV.first || "cpu"
 | |
| PROF_OUTPUT_FILE = File.expand_path("../tmp/stackprof-#{MODE}-#{Time.now.strftime("%Y%m%d%H%M")}.dump", __dir__)
 | |
| 
 | |
| puts "Stackprof Mode: #{MODE}"
 | |
| 
 | |
| unless File.exist?(PROF_OUTPUT_FILE)
 | |
|   StackProf.run(
 | |
|     mode: MODE.to_sym,
 | |
|     interval: 100,
 | |
|     raw: true,
 | |
|     out: PROF_OUTPUT_FILE
 | |
|   ) do
 | |
|     puts "GC Stats:", JSON.pretty_generate(GC.stat)
 | |
|     GC.disable
 | |
| 
 | |
|     Jekyll::Commands::Build.process({'source' => 'docs'})
 | |
| 
 | |
|     puts 'GC Stats:'
 | |
|     GC.start(full_mark: true, immediate_sweep: false)
 | |
|     puts JSON.pretty_generate(GC.stat)
 | |
|   end
 | |
| end
 | |
| 
 | |
| options = {
 | |
|   sort: true,
 | |
|   limit: 30,
 | |
|   format: :text,
 | |
| }
 | |
| 
 | |
| # You can also do other things. Examples:
 | |
| # https://github.com/tmm1/stackprof/blob/master/bin/stackprof
 | |
| report = StackProf::Report.new(Marshal.load(IO.binread(PROF_OUTPUT_FILE)))
 | |
| report.print_text(
 | |
|   options[:sort],
 | |
|   options[:limit],
 | |
|   options[:select_files],
 | |
|   options[:reject_files],
 | |
|   options[:select_names],
 | |
|   options[:reject_names]
 | |
| )
 | |
| 
 | |
| puts "Results stored in #{PROF_OUTPUT_FILE}"
 |