mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
don't use ExclusiveObjectPool for now
This commit is contained in:
parent
3ca67a4446
commit
140f6bea3c
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user