Author: Antonio Cuni <anto.c...@gmail.com> Branch: gc-hooks Changeset: r94200:ce5745894545 Date: 2018-03-31 15:35 +0200 http://bitbucket.org/pypy/pypy/changeset/ce5745894545/
Log: pass a 'stats' object to the hook instead of passing all the values individually diff --git a/pypy/module/gc/hook.py b/pypy/module/gc/hook.py --- a/pypy/module/gc/hook.py +++ b/pypy/module/gc/hook.py @@ -1,6 +1,7 @@ from rpython.memory.gc.hook import GcHooks -from pypy.interpreter.baseobjspace import ObjSpace from pypy.interpreter.gateway import interp2app, unwrap_spec +from pypy.interpreter.baseobjspace import W_Root +from pypy.interpreter.typedef import TypeDef, interp_attrproperty from pypy.interpreter.executioncontext import AsyncAction class LowLevelGcHooks(GcHooks): @@ -47,11 +48,24 @@ pinned_objects = 0 def perform(self, ec, frame): - self.space.call_function(self.w_callable, - self.space.newint(self.total_memory_used), - self.space.newint(self.pinned_objects)) + w_stats = W_GcMinorStats(self.total_memory_used, self.pinned_objects) + self.space.call_function(self.w_callable, w_stats) +class W_GcMinorStats(W_Root): + + def __init__(self, total_memory_used, pinned_objects): + self.total_memory_used = total_memory_used + self.pinned_objects = pinned_objects + + +W_GcMinorStats.typedef = TypeDef( + "GcMinorStats", + total_memory_used = interp_attrproperty("total_memory_used", + cls=W_GcMinorStats, wrapfn="newint"), + pinned_objects = interp_attrproperty("pinned_objects", + cls=W_GcMinorStats, wrapfn="newint"), + ) def set_hooks(space, w_on_gc_minor): diff --git a/pypy/module/gc/test/test_hook.py b/pypy/module/gc/test/test_hook.py --- a/pypy/module/gc/test/test_hook.py +++ b/pypy/module/gc/test/test_hook.py @@ -1,3 +1,4 @@ +from rpython.rlib.rarithmetic import r_uint from pypy.module.gc.hook import gchooks from pypy.interpreter.baseobjspace import ObjSpace from pypy.interpreter.gateway import interp2app, unwrap_spec @@ -7,7 +8,7 @@ def setup_class(cls): space = cls.space - @unwrap_spec(ObjSpace, int, int) + @unwrap_spec(ObjSpace, r_uint, int) def fire_gc_minor(space, total_memory_used, pinned_objects): gchooks.fire_gc_minor(total_memory_used, pinned_objects) cls.w_fire_gc_minor = space.wrap(interp2app(fire_gc_minor)) @@ -15,8 +16,8 @@ def test_on_gc_minor(self): import gc lst = [] - def on_gc_minor(total_memory_used, pinned_objects): - lst.append((total_memory_used, pinned_objects)) + def on_gc_minor(stats): + lst.append((stats.total_memory_used, stats.pinned_objects)) gc.set_hooks(on_gc_minor=on_gc_minor) self.fire_gc_minor(10, 20) self.fire_gc_minor(30, 40) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit