ruby-changes:51725
From: k0kubun <ko1@a...>
Date: Wed, 11 Jul 2018 00:44:50 +0900 (JST)
Subject: [ruby-changes:51725] k0kubun:r63937 (trunk): output/driver.rb: add output plugin to reproduce
k0kubun 2018-07-11 00:44:45 +0900 (Wed, 11 Jul 2018) New Revision: 63937 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=63937 Log: output/driver.rb: add output plugin to reproduce the original behavior of benchmark/driver.rb. Probably I won't use this but this is requested by ko1. Use this with: make benchmark OPTS="-o driver" Added directories: trunk/benchmark/lib/benchmark_driver/output/ Added files: trunk/benchmark/lib/benchmark_driver/output/driver.rb Index: benchmark/lib/benchmark_driver/output/driver.rb =================================================================== --- benchmark/lib/benchmark_driver/output/driver.rb (nonexistent) +++ benchmark/lib/benchmark_driver/output/driver.rb (revision 63937) @@ -0,0 +1,36 @@ https://github.com/ruby/ruby/blob/trunk/benchmark/lib/benchmark_driver/output/driver.rb#L1 +require 'benchmark_driver/output/simple' + +# This replicates the legacy benchmark/driver.rb behavior. +class BenchmarkDriver::Output::Driver < BenchmarkDriver::Output::Simple + def initialize(*) + super + @stdout = $stdout + @strio = StringIO.new + $stdout = IOMultiplexer.new(@stdout, @strio) + end + + def with_benchmark(*) + super + ensure + logfile = "bmlog-#{Time.now.strftime('%Y%m%d-%H%M%S')}.#{$$}.log" + puts "\nLog file: #{logfile}" + + $stdout = @stdout + File.write(logfile, @strio.tap(&:rewind).read) + end + + class IOMultiplexer + def initialize(io1, io2) + @io1 = io1 + @io2 = io2 + end + + [:write, :sync, :sync=, :puts, :print, :flush].each do |method| + define_method(method) do |*args| + @io1.send(method, *args) + @io2.send(method, *args) + end + end + end + private_constant :IOMultiplexer +end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/