mirror of
https://github.com/panda3d/panda3d.git
synced 2026-03-18 10:00:59 -05:00
first rev
This commit is contained in:
75
direct/src/showbase/GarbageReport.py
Executable file
75
direct/src/showbase/GarbageReport.py
Executable file
@@ -0,0 +1,75 @@
|
||||
from direct.directnotify import DirectNotifyGlobal
|
||||
from direct.showbase import PythonUtil
|
||||
import gc
|
||||
|
||||
class GarbageReport:
|
||||
notify = DirectNotifyGlobal.directNotify.newCategory("GarbageReport")
|
||||
|
||||
def __init__(self, name=None):
|
||||
wasOn = PythonUtil.gcDebugOn()
|
||||
if not wasOn:
|
||||
gc.set_debug(gc.DEBUG_LEAK)
|
||||
gc.collect()
|
||||
garbage = list(gc.garbage)
|
||||
del gc.garbage[:]
|
||||
if not wasOn:
|
||||
gc.set_debug(0)
|
||||
|
||||
numGarbage = len(garbage)
|
||||
# grab the referents
|
||||
referentsByReference = {}
|
||||
referentsByNumber = {}
|
||||
for i in xrange(numGarbage):
|
||||
referents = gc.get_referents(garbage[i])
|
||||
referentsByReference[i] = list(referents)
|
||||
# look to see if each referent is another garbage item
|
||||
referentsByNumber[i] = list()
|
||||
for referent in referents:
|
||||
try:
|
||||
num = garbage.index(referent)
|
||||
except:
|
||||
num = 'NG' # Not Garbage
|
||||
referentsByNumber[i].append(num)
|
||||
# grab the referrers
|
||||
referrersByReference = {}
|
||||
referrersByNumber = {}
|
||||
for i in xrange(numGarbage):
|
||||
referrers = gc.get_referrers(garbage[i])
|
||||
referrersByReference[i] = list(referrers)
|
||||
# look to see if each referrer is another garbage item
|
||||
referrersByNumber[i] = list()
|
||||
for referrer in referrers:
|
||||
try:
|
||||
num = garbage.index(referrer)
|
||||
except:
|
||||
num = 'NG' # Not Garbage
|
||||
referrersByNumber[i].append(num)
|
||||
|
||||
s = '\n===== GarbageReport: \'%s\' (%s items) =====' % (name, numGarbage)
|
||||
if numGarbage > 0:
|
||||
# log each individual item with a number in front of it
|
||||
s += '\n\n===== Garbage Items ====='
|
||||
digits = 0
|
||||
n = numGarbage
|
||||
while n > 0:
|
||||
digits += 1
|
||||
n /= 10
|
||||
format = '\n%0' + '%s' % digits + 'i:%s \t%s'
|
||||
for i in range(len(garbage)):
|
||||
s += format % (i, type(garbage[i]), garbage[i])
|
||||
|
||||
format = '\n%0' + '%s' % digits + 'i:%s'
|
||||
s += '\n\n===== Referents By Number (what is garbage item referring to?) NG=NonGarbage ====='
|
||||
for i in xrange(numGarbage):
|
||||
s += format % (i, referentsByNumber[i])
|
||||
s += '\n\n===== Referrers By Number (what is referring to garbage item?) NG=NonGarbage ====='
|
||||
for i in xrange(numGarbage):
|
||||
s += format % (i, referrersByNumber[i])
|
||||
s += '\n\n===== Referents (what is garbage item referring to?) ====='
|
||||
for i in xrange(numGarbage):
|
||||
s += format % (i, referentsByReference[i])
|
||||
s += '\n\n===== Referrers (what is referring to garbage item?) ====='
|
||||
for i in xrange(numGarbage):
|
||||
s += format % (i, referrersByReference[i])
|
||||
|
||||
self.notify.info(s)
|
||||
Reference in New Issue
Block a user