mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
additional leak debugging
This commit is contained in:
parent
4b0c19f61a
commit
8d80413d03
@ -279,6 +279,12 @@ class ObjectRef:
|
|||||||
indirection.release()
|
indirection.release()
|
||||||
yield str
|
yield str
|
||||||
|
|
||||||
|
def getFinalIndirectionStr(self):
|
||||||
|
prevIndirection = None
|
||||||
|
if len(self._indirections) > 1:
|
||||||
|
prevIndirection = self._indirections[-2]
|
||||||
|
return self._indirections[-1].getString(prevIndirection=prevIndirection)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
for result in self.getEvalStrGen():
|
for result in self.getEvalStrGen():
|
||||||
pass
|
pass
|
||||||
@ -816,6 +822,60 @@ class FPTObjsOfType(Job):
|
|||||||
if self._doneCallback:
|
if self._doneCallback:
|
||||||
self._doneCallback(self)
|
self._doneCallback(self)
|
||||||
|
|
||||||
|
class FPTObjsNamed(Job):
|
||||||
|
def __init__(self, name, leakDetector, on, doneCallback=None):
|
||||||
|
Job.__init__(self, name)
|
||||||
|
self._leakDetector = leakDetector
|
||||||
|
self.notify = self._leakDetector.notify
|
||||||
|
self._on = on
|
||||||
|
self._doneCallback = doneCallback
|
||||||
|
self._ldde = self._leakDetector._getDestroyEvent()
|
||||||
|
self.accept(self._ldde, self._handleLDDestroy)
|
||||||
|
ContainerLeakDetector.addPrivateObj(self.__dict__)
|
||||||
|
|
||||||
|
def destroy(self):
|
||||||
|
self.ignore(self._ldde)
|
||||||
|
self._leakDetector = None
|
||||||
|
self._doneCallback = None
|
||||||
|
ContainerLeakDetector.removePrivateObj(self.__dict__)
|
||||||
|
Job.destroy(self)
|
||||||
|
|
||||||
|
def _handleLDDestroy(self):
|
||||||
|
self.destroy()
|
||||||
|
|
||||||
|
def getPriority(self):
|
||||||
|
return Job.Priorities.High
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
ids = self._leakDetector.getContainerIds()
|
||||||
|
try:
|
||||||
|
for id in ids:
|
||||||
|
yield None
|
||||||
|
try:
|
||||||
|
for container in self._leakDetector.getContainerByIdGen(id):
|
||||||
|
yield None
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
name = self._leakDetector._id2ref[id].getFinalIndirectionStr()
|
||||||
|
if self._on.lower() in name.lower():
|
||||||
|
try:
|
||||||
|
for ptc in self._leakDetector.getContainerNameByIdGen(id):
|
||||||
|
yield None
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
print 'GPTCN(' + self._on + '):' + self.getJobName() + ': ' + ptc
|
||||||
|
except Exception, e:
|
||||||
|
print 'FPTObjsNamed job caught exception: %s' % e
|
||||||
|
if __dev__:
|
||||||
|
raise
|
||||||
|
yield Job.Done
|
||||||
|
|
||||||
|
def finished(self):
|
||||||
|
if self._doneCallback:
|
||||||
|
self._doneCallback(self)
|
||||||
|
|
||||||
class PruneObjectRefs(Job):
|
class PruneObjectRefs(Job):
|
||||||
"""
|
"""
|
||||||
Job to destroy any container refs that are no longer valid.
|
Job to destroy any container refs that are no longer valid.
|
||||||
@ -991,6 +1051,11 @@ class ContainerLeakDetector(Job):
|
|||||||
jobMgr.add(j)
|
jobMgr.add(j)
|
||||||
return j
|
return j
|
||||||
|
|
||||||
|
def getPathsToContainersNamed(self, name, on, doneCallback=None):
|
||||||
|
j = FPTObjsNamed(name, self, on, doneCallback)
|
||||||
|
jobMgr.add(j)
|
||||||
|
return j
|
||||||
|
|
||||||
def _scheduleNextLeakCheck(self):
|
def _scheduleNextLeakCheck(self):
|
||||||
taskMgr.doMethodLater(self._nextCheckDelay, self._checkForLeaks,
|
taskMgr.doMethodLater(self._nextCheckDelay, self._checkForLeaks,
|
||||||
self._getCheckTaskName())
|
self._getCheckTaskName())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user