Browse Source

added GarbageLeakDetector

Darren Ranalli 18 years ago
parent
commit
657792498a
1 changed files with 17 additions and 1 deletions
  1. 17 1
      direct/src/showbase/LeakDetectors.py

+ 17 - 1
direct/src/showbase/LeakDetectors.py

@@ -1,6 +1,7 @@
 # objects that report different types of leaks to the ContainerLeakDetector
 # objects that report different types of leaks to the ContainerLeakDetector
 
 
-import __builtin__
+from direct.showbase.PythonUtil import gcDebugOn
+import __builtin__, gc
 
 
 class LeakDetector:
 class LeakDetector:
     def __init__(self):
     def __init__(self):
@@ -12,6 +13,21 @@ class LeakDetector:
     def destroy(self):
     def destroy(self):
         del leakDetectors[id(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):
 class SceneGraphLeakDetector(LeakDetector):
     # is a scene graph leaking nodes?
     # is a scene graph leaking nodes?
     def __init__(self, render):
     def __init__(self, render):