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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit