[pypy-svn] pypy default: implement get_total_memory for darwin, test that it returns > 1MB on all platforms
etrepum
commits-noreply at bitbucket.org
Tue Mar 15 20:04:49 CET 2011
Author: Bob Ippolito <bob at redivi.com>
Branch:
Changeset: r42682:ceed7d933a6d
Date: 2011-03-15 15:04 -0400
http://bitbucket.org/pypy/pypy/changeset/ceed7d933a6d/
Log: implement get_total_memory for darwin, test that it returns > 1MB on
all platforms
diff --git a/pypy/rpython/memory/gc/test/test_env.py b/pypy/rpython/memory/gc/test/test_env.py
--- a/pypy/rpython/memory/gc/test/test_env.py
+++ b/pypy/rpython/memory/gc/test/test_env.py
@@ -15,6 +15,9 @@
assert x == y
assert type(x) == type(y)
+def test_get_total_memory():
+ # total memory should be at least a megabyte
+ assert env.get_total_memory() > 1024*1024
def test_read_from_env():
saved = os.environ
diff --git a/pypy/rpython/memory/gc/env.py b/pypy/rpython/memory/gc/env.py
--- a/pypy/rpython/memory/gc/env.py
+++ b/pypy/rpython/memory/gc/env.py
@@ -99,8 +99,9 @@
def get_total_memory():
return get_total_memory_linux2('/proc/meminfo')
-#elif sys.platform == 'darwin':
-# ...
+elif sys.platform == 'darwin':
+ def get_total_memory():
+ return get_darwin_sysctl_signed('hw.memsize')
else:
def get_total_memory():
@@ -191,31 +192,31 @@
rffi.INT,
sandboxsafe=True)
-def get_darwin_cache_size(cache_key):
- cache_p = lltype.malloc(rffi.LONGLONGP.TO, 1, flavor='raw')
+def get_darwin_sysctl_signed(sysctl_name):
+ sysctl_name_p = lltype.malloc(rffi.LONGLONGP.TO, 1, flavor='raw')
try:
len_p = lltype.malloc(rffi.SIZE_TP.TO, 1, flavor='raw')
try:
size = rffi.sizeof(rffi.LONGLONG)
- cache_p[0] = rffi.cast(rffi.LONGLONG, 0)
+ rval_p[0] = rffi.cast(rffi.LONGLONG, 0)
len_p[0] = rffi.cast(rffi.SIZE_T, size)
# XXX a hack for llhelper not being robust-enough
- result = sysctlbyname(cache_key,
- rffi.cast(rffi.VOIDP, cache_p),
+ result = sysctlbyname(sysctl_name,
+ rffi.cast(rffi.VOIDP, rval_p),
len_p,
lltype.nullptr(rffi.VOIDP.TO),
rffi.cast(rffi.SIZE_T, 0))
- cache = 0
+ rval = 0
if (rffi.cast(lltype.Signed, result) == 0 and
rffi.cast(lltype.Signed, len_p[0]) == size):
- cache = rffi.cast(lltype.Signed, cache_p[0])
- if rffi.cast(rffi.LONGLONG, cache) != cache_p[0]:
- cache = 0 # overflow!
- return cache
+ rval = rffi.cast(lltype.Signed, rval_p[0])
+ if rffi.cast(rffi.LONGLONG, rval) != rval_p[0]:
+ rval = 0 # overflow!
+ return rval
finally:
lltype.free(len_p, flavor='raw')
finally:
- lltype.free(cache_p, flavor='raw')
+ lltype.free(sysctl_name_p, flavor='raw')
def get_L2cache_darwin():
@@ -223,8 +224,8 @@
on the machine we are running on.
"""
debug_start("gc-hardware")
- L2cache = get_darwin_cache_size("hw.l2cachesize")
- L3cache = get_darwin_cache_size("hw.l3cachesize")
+ L2cache = get_darwin_sysctl_signed("hw.l2cachesize")
+ L3cache = get_darwin_sysctl_signed("hw.l3cachesize")
debug_print("L2cache =", L2cache)
debug_print("L3cache =", L3cache)
debug_stop("gc-hardware")
More information about the Pypy-commit
mailing list