don't use ExclusiveObjectPool for now

This commit is contained in:
Darren Ranalli 2006-07-06 02:25:32 +00:00
parent 3ca67a4446
commit 140f6bea3c

View File

@ -1,5 +1,5 @@
from direct.directnotify.DirectNotifyGlobal import directNotify from direct.directnotify.DirectNotifyGlobal import directNotify
from direct.showbase import DirectObject, ObjectPool from direct.showbase import DirectObject, ObjectPool, GarbageReport
from direct.showbase.PythonUtil import makeList, Sync from direct.showbase.PythonUtil import makeList, Sync
import gc import gc
import sys import sys
@ -13,11 +13,10 @@ import sys
>>> o2=ObjectReport.ObjectReport('') >>> o2=ObjectReport.ObjectReport('')
>>> o.diff(o2) >>> o.diff(o2)
<wait a loooong time>
""" """
class ExclusiveObjectPool(DirectObject.DirectObject): class ExclusiveObjectPool(DirectObject.DirectObject):
"""ObjectPool specialization that excludes particular objects""" # ObjectPool specialization that excludes particular objects
# IDs of objects to globally exclude from reporting # IDs of objects to globally exclude from reporting
_ExclObjs = [] _ExclObjs = []
_ExclObjIds = {} _ExclObjIds = {}
@ -71,7 +70,7 @@ class ExclusiveObjectPool(DirectObject.DirectObject):
for obj in self._objects: for obj in self._objects:
if id(obj) not in ExclusiveObjectPool._ExclObjIds: if id(obj) not in ExclusiveObjectPool._ExclObjIds:
self._postFilterObjs.append(obj) self._postFilterObjs.append(obj)
self._filteredPool = ObjectPool.ObjectPool(self._postFilterObjs) self._filteredPool = ExclusiveObjectPool(self._postFilterObjs)
ExclusiveObjectPool.addExclObjs(self._filteredPool) ExclusiveObjectPool.addExclObjs(self._filteredPool)
ExclusiveObjectPool.addExclObjs(*self._filteredPool._getInternalObjs()) ExclusiveObjectPool.addExclObjs(*self._filteredPool._getInternalObjs())
self._sync.sync(self._SyncMaster) self._sync.sync(self._SyncMaster)
@ -96,21 +95,21 @@ class ObjectReport:
"""report on every Python object in the current process""" """report on every Python object in the current process"""
notify = directNotify.newCategory('ObjectReport') notify = directNotify.newCategory('ObjectReport')
def __init__(self, name, log=True, garbageCollect=True): def __init__(self, name, log=True):
if not hasattr(sys, 'getobjects'): if not hasattr(sys, 'getobjects'):
self.notify.error( self.notify.error(
'%s only works in debug Python (pyd-shell)' % self.__class__.__name__) '%s only works in debug Python (pyd-shell)' % self.__class__.__name__)
if garbageCollect: gr = GarbageReport.GarbageReport('ObjectReport\'s GarbageReport: %s' % name, log=log)
import gc gr.destroy()
gc.collect() del gr
self._name = name self._name = name
self._pool = ExclusiveObjectPool(self._getObjectList()) self._pool = ObjectPool.ObjectPool(self._getObjectList())
ExclusiveObjectPool.addExclObjs(self, self._pool, self._name) #ExclusiveObjectPool.addExclObjs(self, self._pool, self._name)
if log: if log:
self.notify.info('===== ObjectReport: \'%s\' =====\n%s' % (self._name, self.typeFreqStr())) self.notify.info('===== ObjectReport: \'%s\' =====\n%s' % (self._name, self.typeFreqStr()))
def destroy(self): def destroy(self):
ExclusiveObjectPool.removeExclObjs(self, self._pool, self._name) #ExclusiveObjectPool.removeExclObjs(self, self._pool, self._name)
self._pool.destroy() self._pool.destroy()
del self._pool del self._pool
del self._name del self._name