|  | # | 
|  | # Licensed to the Apache Software Foundation (ASF) under one | 
|  | # or more contributor license agreements. See the NOTICE file | 
|  | # distributed with this work for additional information | 
|  | # regarding copyright ownership. The ASF licenses this file | 
|  | # to you under the Apache License, Version 2.0 (the | 
|  | # "License"); you may not use this file except in compliance | 
|  | # with the License. You may obtain a copy of the License at | 
|  | # | 
|  | #   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | # Unless required by applicable law or agreed to in writing, | 
|  | # software distributed under the License is distributed on an | 
|  | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | # KIND, either express or implied. See the License for the | 
|  | # specific language governing permissions and limitations | 
|  | # under the License. | 
|  | # | 
|  |  | 
|  | $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 '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 |