Fix for JRUBY-2882. Handle error messages related to constructors better
[jruby.git] / bench / ffi / bench_umask.rb
blob051dddab79992c4306c2ab4b40543b8571498a97
1 require 'benchmark'
2 require 'ffi'
4 iter = 10000
5 module Posix
6   extend FFI::Library
7   attach_function 'umask', [ :int ], :int
8 end
9 module NativeFile
10   extend FFI::Library
11   # Attaching the function to this module is about 10% faster than calling Posix.umask
12   if JRuby::FFI::Platform::IS_WINDOWS
13     attach_function '_umask', :_umask, [ :int ], :int
14   else
15     attach_function 'umask', :_umask, [ :int ], :int
16   end
17   def self.umask(mask = nil)
18     if mask
19       _umask(mask)
20     else
21       old = _umask(0)
22       _umask(old)
23       old
24     end
25   end
26 end
27 puts "FFI umask=#{NativeFile.umask} File.umask=#{File.umask}"
28 puts "Benchmark File.umask performance, #{iter}x"
29 10.times {
30   puts Benchmark.measure {
31     iter.times { File.umask(0777) }
32   }
34 puts "Benchmark FFI File.umask performance, #{iter}x"
36 10.times {
37   puts Benchmark.measure {
38     iter.times { NativeFile.umask(0777) }
39   }
41 puts "Benchmark FFI Posix umask performance, #{iter}x"
43 10.times {
44   puts Benchmark.measure {
45     iter.times { Posix.umask(0777) }
46   }