[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]