diff --git a/direct/src/showbase/LeakDetectors.py b/direct/src/showbase/LeakDetectors.py index 549b3a9cfa..e926a3dbfb 100755 --- a/direct/src/showbase/LeakDetectors.py +++ b/direct/src/showbase/LeakDetectors.py @@ -1,6 +1,7 @@ # objects that report different types of leaks to the ContainerLeakDetector -import __builtin__ +from direct.showbase.PythonUtil import gcDebugOn +import __builtin__, gc class LeakDetector: def __init__(self): @@ -12,6 +13,21 @@ class LeakDetector: def destroy(self): del leakDetectors[id(self)] +class GarbageLeakDetector(LeakDetector): + # are we accumulating Python garbage? + def __len__(self): + # do a garbage collection + wasOn = gcDebugOn() + oldFlags = gc.get_debug() + if not wasOn: + gc.set_debug(gc.DEBUG_SAVEALL) + gc.collect() + numGarbage = len(gc.garbage) + del gc.garbage[:] + if not wasOn: + gc.set_debug(oldFlags) + return numGarbage + class SceneGraphLeakDetector(LeakDetector): # is a scene graph leaking nodes? def __init__(self, render):