Browse Source

added autoDestroy, extra output line at the end

Darren Ranalli 19 years ago
parent
commit
61b30a423c
1 changed files with 13 additions and 8 deletions
  1. 13 8
      direct/src/showbase/GarbageReport.py

+ 13 - 8
direct/src/showbase/GarbageReport.py

@@ -25,20 +25,19 @@ class GarbageReport(Job):
     NotGarbage = 'NG'
     NotGarbage = 'NG'
 
 
     def __init__(self, name, log=True, verbose=False, fullReport=False, findCycles=True,
     def __init__(self, name, log=True, verbose=False, fullReport=False, findCycles=True,
-                 threaded=False, doneCallback=None):
-        # if log is True, GarbageReport will self-destroy after logging
+                 threaded=False, doneCallback=None, autoDestroy=False):
+        # if autoDestroy is True, GarbageReport will self-destroy after logging
         # if false, caller is responsible for calling destroy()
         # if false, caller is responsible for calling destroy()
         # if threaded is True, processing will be performed over multiple frames
         # if threaded is True, processing will be performed over multiple frames
         Job.__init__(self, name)
         Job.__init__(self, name)
         # stick the arguments onto a ScratchPad so we can delete them all at once
         # stick the arguments onto a ScratchPad so we can delete them all at once
         self._args = ScratchPad(name=name, log=log, verbose=verbose, fullReport=fullReport,
         self._args = ScratchPad(name=name, log=log, verbose=verbose, fullReport=fullReport,
-                                findCycles=findCycles, doneCallback=doneCallback)
+                                findCycles=findCycles, doneCallback=doneCallback,
+                                autoDestroy=autoDestroy)
         jobMgr.add(self)
         jobMgr.add(self)
-        if threaded == False:
+        if not threaded:
             jobMgr.finish(self)
             jobMgr.finish(self)
 
 
-        self.numGarbage = 0
-
     def run(self):
     def run(self):
         # do the garbage collection
         # do the garbage collection
         wasOn = gcDebugOn()
         wasOn = gcDebugOn()
@@ -185,6 +184,9 @@ class GarbageReport(Job):
                 print self._report[i]
                 print self._report[i]
                 if (not (i & 0x3F)):
                 if (not (i & 0x3F)):
                     yield None
                     yield None
+            # add an extra line at the end for readability
+            if self.numGarbage > 0:
+                print ''
             self.printingEnd()
             self.printingEnd()
 
 
         yield Job.Done
         yield Job.Done
@@ -192,14 +194,15 @@ class GarbageReport(Job):
     def finished(self):
     def finished(self):
         if self._args.doneCallback:
         if self._args.doneCallback:
             self._args.doneCallback(self)
             self._args.doneCallback(self)
-        if self._args.log:
+        if self._args.autoDestroy:
             self.destroy()
             self.destroy()
 
 
     def destroy(self):
     def destroy(self):
         #print 'GarbageReport.destroy'
         #print 'GarbageReport.destroy'
         del self._args
         del self._args
         del self.garbage
         del self.garbage
-        del self.numGarbage
+        # don't get rid of this, we might need it
+        #del self.numGarbage
         del self.referrersByReference
         del self.referrersByReference
         del self.referrersByNumber
         del self.referrersByNumber
         del self.referentsByReference
         del self.referentsByReference
@@ -212,6 +215,7 @@ class GarbageReport(Job):
         Job.destroy(self)
         Job.destroy(self)
 
 
     def getNumItems(self):
     def getNumItems(self):
+        # if the job hasn't run yet, we don't have a numGarbage yet
         return self.numGarbage
         return self.numGarbage
 
 
     def getGarbage(self):
     def getGarbage(self):
@@ -301,4 +305,5 @@ class GarbageLogger(GarbageReport):
     one of these. It automatically destroys itself after logging"""
     one of these. It automatically destroys itself after logging"""
     def __init__(self, name, *args, **kArgs):
     def __init__(self, name, *args, **kArgs):
         kArgs['log'] = True
         kArgs['log'] = True
+        kArgs['autoDestroy'] = True
         GarbageReport.__init__(self, name, *args, **kArgs)
         GarbageReport.__init__(self, name, *args, **kArgs)