Cache calls to sysctl_bool at the source

This commit is contained in:
Jack Nagel 2013-11-26 20:23:19 -06:00
parent 3c3bd76528
commit f172413a26

View File

@ -104,36 +104,39 @@ module MacCPUs
end end
def altivec? def altivec?
@altivec ||= sysctl_bool('hw.optional.altivec') sysctl_bool('hw.optional.altivec')
end end
def avx? def avx?
@avx ||= sysctl_bool('hw.optional.avx1_0') sysctl_bool('hw.optional.avx1_0')
end end
def sse3? def sse3?
@sse3 ||= sysctl_bool('hw.optional.sse3') sysctl_bool('hw.optional.sse3')
end end
def ssse3? def ssse3?
@ssse3 ||= sysctl_bool('hw.optional.supplementalsse3') sysctl_bool('hw.optional.supplementalsse3')
end end
def sse4? def sse4?
@sse4 ||= sysctl_bool('hw.optional.sse4_1') sysctl_bool('hw.optional.sse4_1')
end end
def sse4_2? def sse4_2?
@sse4 ||= sysctl_bool('hw.optional.sse4_2') sysctl_bool('hw.optional.sse4_2')
end end
protected protected
def sysctl_bool(property) def sysctl_bool(property)
(@properties ||= {}).fetch(property) do
result = nil result = nil
IO.popen("/usr/sbin/sysctl -n #{property} 2>/dev/null") do |f| IO.popen("/usr/sbin/sysctl -n '#{property}' 2>/dev/null") do |f|
result = f.gets.to_i # should be 0 or 1 result = f.gets.to_i # should be 0 or 1
end end
$?.success? && result == 1 # sysctl call succeded and printed 1 # sysctl call succeded and printed 1
@properties[property] = $?.success? && result == 1
end
end end
end end