1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
require File.expand_path(File.join(File.dirname(__FILE__), "bench_helper"))
require 'benchmark'
require 'ffi'
iter = 1000_000
class TestStruct < FFI::Struct
layout :i, :int, :p, :pointer
end
s = TestStruct.new(FFI::MemoryPointer.new(TestStruct))
puts "Benchmark FFI Struct.get(:int) performance, #{iter}x"
10.times {
puts Benchmark.measure {
iter.times { s[:i] }
}
}
puts "Benchmark FFI Struct.get(:int) using string name performance, #{iter}x"
10.times {
puts Benchmark.measure {
iter.times { s[:i] }
}
}
puts "Benchmark FFI Struct.put(:int) performance, #{iter}x"
10.times {
puts Benchmark.measure {
iter.times { s[:i] = 0x12345678 }
}
}
puts "Benchmark FFI Struct.get(:pointer) performance, #{iter}x"
10.times {
puts Benchmark.measure {
iter.times { s[:p] }
}
}
puts "Benchmark FFI Struct.put(:pointer) performance, #{iter}x"
10.times {
p = FFI::MemoryPointer.new :int
puts Benchmark.measure {
iter.times { s[:p] = p }
}
}
puts "Benchmark FFI Struct.get(:string) performance, #{iter}x"
class StringStruct < FFI::Struct
layout :s, :string
end
10.times {
mp = FFI::MemoryPointer.new 1024
mp.put_string(0, "Hello, World")
s = StringStruct.new
s.pointer.put_pointer(0, mp)
puts Benchmark.measure {
iter.times { s[:s] }
}
}
|