Browse Source

added support for _garbageInfo custom info callback

Darren Ranalli 15 years ago
parent
commit
a975e14907
1 changed files with 24 additions and 0 deletions
  1. 24 0
      direct/src/showbase/GarbageReport.py

+ 24 - 0
direct/src/showbase/GarbageReport.py

@@ -132,6 +132,8 @@ class GarbageReport(Job):
         self.referentsByReference = {}
         self.referentsByNumber = {}
 
+        self._id2garbageInfo = {}
+
         self.cycles = []
         self.cyclesBySyntax = []
         self.uniqueCycleSets = set()
@@ -167,6 +169,18 @@ class GarbageReport(Job):
                 self.referentsByNumber[i] = byNum
                 self.referentsByReference[i] = byRef
 
+        for i in xrange(self.numGarbage):
+            if hasattr(self.garbage[i], '_garbageInfo') and callable(self.garbage[i]._garbageInfo):
+                try:
+                    info = self.garbage[i]._garbageInfo()
+                except Exception, e:
+                    info = str(e)
+                self._id2garbageInfo[id(self.garbage[i])] = info
+                yield None
+            else:
+                if not (i % 20):
+                    yield None
+
         # find the cycles
         if self._args.findCycles and self.numGarbage > 0:
             if self._args.verbose:
@@ -335,6 +349,16 @@ class GarbageReport(Job):
                     yield None
                     s.append('%s:%s' % (ac.next(), self.cyclesBySyntax[i]))
 
+            if len(self._id2garbageInfo):
+                s.append('===== Garbage Custom Info =====')
+                ac = AlphabetCounter()
+                for i in xrange(len(self.cyclesBySyntax)):
+                    yield None
+                    counter = ac.next()
+                    _id = id(self.garbage[i])
+                    if _id in self._id2garbageInfo:
+                        s.append('%s:%s' % (counter, self._id2garbageInfo[_id]))
+
             if self._args.fullReport:
                 format = '%0' + '%s' % digits + 'i:%s'
                 s.append('===== Referrers By Number (what is referring to garbage item?) =====')