$LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. .. .. lib rb lib]) $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. .. .. lib rb ext]) require 'thrift' require 'thrift/transport' require 'thrift/protocol/binaryprotocol' require 'thrift/protocol/binaryprotocolaccelerated' require 'benchmark' require 'rubygems' require 'set' require 'pp' # require 'ruby-debug' # require 'ruby-prof' require File.join(File.dirname(__FILE__), '../fixtures/structs') transport1 = Thrift::MemoryBuffer.new ruby_binary_protocol = Thrift::BinaryProtocol.new(transport1) transport2 = Thrift::MemoryBuffer.new c_fast_binary_protocol = Thrift::BinaryProtocolAccelerated.new(transport2) ooe = Fixtures::Structs::OneOfEach.new ooe.im_true = true ooe.im_false = false ooe.a_bite = -42 ooe.integer16 = 27000 ooe.integer32 = 1<<24 ooe.integer64 = 6000 * 1000 * 1000 ooe.double_precision = Math::PI ooe.some_characters = "Debug THIS!" ooe.zomg_unicode = "\xd7\n\a\t" n1 = Fixtures::Structs::Nested1.new n1.a_list = [] n1.a_list << ooe << ooe << ooe << ooe n1.i32_map = {} n1.i32_map[1234] = ooe n1.i32_map[46345] = ooe n1.i32_map[-34264] = ooe n1.i64_map = {} n1.i64_map[43534986783945] = ooe n1.i64_map[-32434639875122] = ooe n1.dbl_map = {} n1.dbl_map[324.65469834] = ooe n1.dbl_map[-9458672340.4986798345112] = ooe n1.str_map = {} n1.str_map['sdoperuix'] = ooe n1.str_map['pwoerxclmn'] = ooe n2 = Fixtures::Structs::Nested2.new n2.a_list = [] n2.a_list << n1 << n1 << n1 << n1 << n1 n2.i32_map = {} n2.i32_map[398345] = n1 n2.i32_map[-2345] = n1 n2.i32_map[12312] = n1 n2.i64_map = {} n2.i64_map[2349843765934] = n1 n2.i64_map[-123234985495] = n1 n2.i64_map[0] = n1 n2.dbl_map = {} n2.dbl_map[23345345.38927834] = n1 n2.dbl_map[-1232349.5489345] = n1 n2.dbl_map[-234984574.23498725] = n1 n2.str_map = {} n2.str_map[''] = n1 n2.str_map['sdflkertpioux'] = n1 n2.str_map['sdfwepwdcjpoi'] = n1 n3 = Fixtures::Structs::Nested3.new n3.a_list = [] n3.a_list << n2 << n2 << n2 << n2 << n2 n3.i32_map = {} n3.i32_map[398345] = n2 n3.i32_map[-2345] = n2 n3.i32_map[12312] = n2 n3.i64_map = {} n3.i64_map[2349843765934] = n2 n3.i64_map[-123234985495] = n2 n3.i64_map[0] = n2 n3.dbl_map = {} n3.dbl_map[23345345.38927834] = n2 n3.dbl_map[-1232349.5489345] = n2 n3.dbl_map[-234984574.23498725] = n2 n3.str_map = {} n3.str_map[''] = n2 n3.str_map['sdflkertpioux'] = n2 n3.str_map['sdfwepwdcjpoi'] = n2 n4 = Fixtures::Structs::Nested4.new n4.a_list = [] n4.a_list << n3 n4.i32_map = {} n4.i32_map[-2345] = n3 n4.i64_map = {} n4.i64_map[2349843765934] = n3 n4.dbl_map = {} n4.dbl_map[-1232349.5489345] = n3 n4.str_map = {} n4.str_map[''] = n3 # prof = RubyProf.profile do # n4.write(c_fast_binary_protocol) # Fixtures::Structs::Nested4.new.read(c_fast_binary_protocol) # end # # printer = RubyProf::GraphHtmlPrinter.new(prof) # printer.print(STDOUT, :min_percent=>0) Benchmark.bmbm do |x| x.report("ruby write large (1MB) structure once") do n4.write(ruby_binary_protocol) end x.report("ruby read large (1MB) structure once") do Fixtures::Structs::Nested4.new.read(ruby_binary_protocol) end x.report("c write large (1MB) structure once") do n4.write(c_fast_binary_protocol) end x.report("c read large (1MB) structure once") do Fixtures::Structs::Nested4.new.read(c_fast_binary_protocol) end x.report("ruby write 10_000 small structures") do 10_000.times do ooe.write(ruby_binary_protocol) end end x.report("ruby read 10_000 small structures") do 10_000.times do Fixtures::Structs::OneOfEach.new.read(ruby_binary_protocol) end end x.report("c write 10_000 small structures") do 10_000.times do ooe.write(c_fast_binary_protocol) end end x.report("c read 10_000 small structures") do 10_000.times do Fixtures::Structs::OneOfEach.new.read(c_fast_binary_protocol) end end end