|
@@ -132,6 +132,8 @@ class GarbageReport(Job):
|
|
|
self.referentsByReference = {}
|
|
self.referentsByReference = {}
|
|
|
self.referentsByNumber = {}
|
|
self.referentsByNumber = {}
|
|
|
|
|
|
|
|
|
|
+ self._id2garbageInfo = {}
|
|
|
|
|
+
|
|
|
self.cycles = []
|
|
self.cycles = []
|
|
|
self.cyclesBySyntax = []
|
|
self.cyclesBySyntax = []
|
|
|
self.uniqueCycleSets = set()
|
|
self.uniqueCycleSets = set()
|
|
@@ -167,6 +169,18 @@ class GarbageReport(Job):
|
|
|
self.referentsByNumber[i] = byNum
|
|
self.referentsByNumber[i] = byNum
|
|
|
self.referentsByReference[i] = byRef
|
|
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
|
|
# find the cycles
|
|
|
if self._args.findCycles and self.numGarbage > 0:
|
|
if self._args.findCycles and self.numGarbage > 0:
|
|
|
if self._args.verbose:
|
|
if self._args.verbose:
|
|
@@ -335,6 +349,16 @@ class GarbageReport(Job):
|
|
|
yield None
|
|
yield None
|
|
|
s.append('%s:%s' % (ac.next(), self.cyclesBySyntax[i]))
|
|
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:
|
|
if self._args.fullReport:
|
|
|
format = '%0' + '%s' % digits + 'i:%s'
|
|
format = '%0' + '%s' % digits + 'i:%s'
|
|
|
s.append('===== Referrers By Number (what is referring to garbage item?) =====')
|
|
s.append('===== Referrers By Number (what is referring to garbage item?) =====')
|