Author: fijal
Branch: memory-accounting
Changeset: r92490:8e15f0778f6e
Date: 2017-09-28 18:57 +0200
http://bitbucket.org/pypy/pypy/changeset/8e15f0778f6e/
Log: whack whack whack until we get to the point of actually calling GC
stuff
diff --git a/rpython/memory/gc/incminimark.py b/rpython/memory/gc/incminimark.py
--- a/rpython/memory/gc/incminimark.py
+++ b/rpython/memory/gc/incminimark.py
@@ -72,6 +72,7 @@
from rpython.rlib.rarithmetic import LONG_BIT_SHIFT
from rpython.rlib.debug import ll_assert, debug_print, debug_start, debug_stop
from rpython.rlib.objectmodel import specialize
+from rpython.rlib import rgc
from rpython.memory.gc.minimarkpage import out_of_memory
#
@@ -2918,6 +2919,9 @@
self.old_objects_with_weakrefs.delete()
self.old_objects_with_weakrefs = new_with_weakref
+ def get_stats(self, stats_no):
+ return 0
+
# ----------
# RawRefCount
diff --git a/rpython/memory/gctransform/framework.py
b/rpython/memory/gctransform/framework.py
--- a/rpython/memory/gctransform/framework.py
+++ b/rpython/memory/gctransform/framework.py
@@ -410,6 +410,12 @@
[annmodel.SomeInteger(), SomeAddress()],
annmodel.s_None, minimal_transform = False)
+ if getattr(GCClass, 'get_stats', False):
+ def get_stats(stats_no):
+ return gcdata.gc.get_stats(stats_no)
+ self.get_stats_ptr = getfn(get_stats, [annmodel.SomeInteger()],
+ annmodel.SomeInteger())
+
self.identityhash_ptr = getfn(GCClass.identityhash.im_func,
[s_gc, s_gcref],
@@ -843,9 +849,17 @@
resulttype=llmemory.Address)
else:
v_adr = rmodel.inputconst(llmemory.Address, llmemory.NULL)
+ hop.genop("direct_call", [self.raw_malloc_memory_pressure_ptr,
+ size, v_adr])
+
+
+ def gct_gc_get_stats(self, hop):
+ if hasattr(self, 'get_stats_ptr'):
return hop.genop("direct_call",
- [self.raw_malloc_memory_pressure_ptr,
- size, v_adr])
+ [self.get_stats_ptr, hop.spaceop.args[0]],
+ resultvar=hop.spaceop.result)
+ hop.genop("same_as", [rmodel.inputconst(lltype.Signed, 0)],
+ resultvar=hop.spaceop.result)
def gct_gc__collect(self, hop):
diff --git a/rpython/rlib/rgc.py b/rpython/rlib/rgc.py
--- a/rpython/rlib/rgc.py
+++ b/rpython/rlib/rgc.py
@@ -650,6 +650,12 @@
else:
return id(gcref._x)
+TOTAL_MEMORY, = range(1)
+
+@not_rpython
+def get_stats(stat_no):
+ raise NotImplementedError
+
@not_rpython
def dump_rpy_heap(fd):
raise NotImplementedError
@@ -844,6 +850,18 @@
return hop.genop('gc_get_rpy_type_index', vlist,
resulttype = hop.r_result)
+class Entry(ExtRegistryEntry):
+ _about_ = get_stats
+ def compute_result_annotation(self, s_no):
+ from rpython.annotator.model import SomeInteger
+ if not isinstance(s_no, SomeInteger):
+ raise Exception("expecting an integer")
+ return SomeInteger()
+ def specialize_call(self, hop):
+ args = hop.inputargs(lltype.Signed)
+ hop.exception_cannot_occur()
+ return hop.genop('gc_get_stats', args, resulttype=lltype.Signed)
+
@not_rpython
def _is_rpy_instance(gcref):
raise NotImplementedError
diff --git a/rpython/rtyper/lltypesystem/lloperation.py
b/rpython/rtyper/lltypesystem/lloperation.py
--- a/rpython/rtyper/lltypesystem/lloperation.py
+++ b/rpython/rtyper/lltypesystem/lloperation.py
@@ -485,6 +485,7 @@
'gc_gettypeid' : LLOp(),
'gc_gcflag_extra' : LLOp(),
'gc_add_memory_pressure': LLOp(),
+ 'gc_get_stats' : LLOp(),
'gc_fq_next_dead' : LLOp(),
'gc_fq_register' : LLOp(),
'gc_ignore_finalizer' : LLOp(canrun=True),
diff --git a/rpython/translator/c/test/test_newgc.py
b/rpython/translator/c/test/test_newgc.py
--- a/rpython/translator/c/test/test_newgc.py
+++ b/rpython/translator/c/test/test_newgc.py
@@ -1625,7 +1625,7 @@
am2 = am1
am1 = A()
# what can we use for the res?
- return 0
+ return rgc.get_stats(rgc.TOTAL_MEMORY)
return f
def test_nongc_opaque_attached_to_gc(self):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit