From 5d35664ad69b1e2eb9d4bae75d5b6f40473b9598 Mon Sep 17 00:00:00 2001 From: k0kubun Date: Tue, 10 Jul 2018 15:44:45 +0000 Subject: 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" git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- benchmark/lib/benchmark_driver/output/driver.rb | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 benchmark/lib/benchmark_driver/output/driver.rb (limited to 'benchmark/lib/benchmark_driver/output') diff --git a/benchmark/lib/benchmark_driver/output/driver.rb b/benchmark/lib/benchmark_driver/output/driver.rb new file mode 100644 index 0000000000..d22236e9fb --- /dev/null +++ b/benchmark/lib/benchmark_driver/output/driver.rb @@ -0,0 +1,36 @@ +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 -- cgit v1.2.3