浏览代码

reduced memory footprint for creation stack traces

Darren Ranalli 17 年之前
父节点
当前提交
ba6a59d1dc
共有 2 个文件被更改,包括 8 次插入6 次删除
  1. 2 2
      direct/src/gui/DirectGuiBase.py
  2. 6 4
      direct/src/showbase/PythonUtil.py

+ 2 - 2
direct/src/gui/DirectGuiBase.py

@@ -12,7 +12,7 @@ from direct.directtools.DirectUtil import ROUND_TO
 from direct.showbase import DirectObject
 from direct.showbase import DirectObject
 from direct.task import Task
 from direct.task import Task
 from direct.showbase import ShowBase
 from direct.showbase import ShowBase
-from direct.showbase.PythonUtil import recordCreationStack
+from direct.showbase.PythonUtil import recordCreationStackStr
 from pandac.PandaModules import PStatCollector
 from pandac.PandaModules import PStatCollector
 import string, types
 import string, types
 
 
@@ -657,7 +657,7 @@ def setGuiGridSpacing(spacing):
 if config.GetBool('record-gui-creation-stack', __debug__):
 if config.GetBool('record-gui-creation-stack', __debug__):
     # this will help track down the code that created DirectGui objects
     # this will help track down the code that created DirectGui objects
     # call obj.getCreationStackTrace() to figure out what code created it
     # call obj.getCreationStackTrace() to figure out what code created it
-    DirectGuiBase = recordCreationStack(DirectGuiBase)
+    DirectGuiBase = recordCreationStackStr(DirectGuiBase)
 
 
 class DirectGuiWidget(DirectGuiBase, NodePath):
 class DirectGuiWidget(DirectGuiBase, NodePath):
     # Toggle if you wish widget's to snap to grid when draggin
     # Toggle if you wish widget's to snap to grid when draggin

+ 6 - 4
direct/src/showbase/PythonUtil.py

@@ -2979,18 +2979,20 @@ def recordCreationStack(cls):
     cls.printCreationStackTrace = printCreationStackTrace
     cls.printCreationStackTrace = printCreationStackTrace
     return cls
     return cls
 
 
-# like recordCreationStack but stores the stack as a compact stack string
+# like recordCreationStack but stores the stack as a compact stack list-of-strings
+# scales well for memory usage
 def recordCreationStackStr(cls):
 def recordCreationStackStr(cls):
     if not hasattr(cls, '__init__'):
     if not hasattr(cls, '__init__'):
         raise 'recordCreationStackStr: class \'%s\' must define __init__' % cls.__name__
         raise 'recordCreationStackStr: class \'%s\' must define __init__' % cls.__name__
     cls.__moved_init__ = cls.__init__
     cls.__moved_init__ = cls.__init__
     def __recordCreationStackStr_init__(self, *args, **kArgs):
     def __recordCreationStackStr_init__(self, *args, **kArgs):
-        self._creationStackTraceStr = StackTrace(start=1).compact()
+        # store as list of strings to conserve memory
+        self._creationStackTraceStrLst = StackTrace(start=1).compact().split(',')
         return self.__moved_init__(*args, **kArgs)
         return self.__moved_init__(*args, **kArgs)
     def getCreationStackTraceCompactStr(self):
     def getCreationStackTraceCompactStr(self):
-        return self._creationStackTraceStr
+        return string.join(self._creationStackTraceStrLst, ',')
     def printCreationStackTrace(self):
     def printCreationStackTrace(self):
-        print self._creationStackTraceStr
+        print string.join(self._creationStackTraceStrLst, ',')
     cls.__init__ = __recordCreationStackStr_init__
     cls.__init__ = __recordCreationStackStr_init__
     cls.getCreationStackTraceCompactStr = getCreationStackTraceCompactStr
     cls.getCreationStackTraceCompactStr = getCreationStackTraceCompactStr
     cls.printCreationStackTrace = printCreationStackTrace
     cls.printCreationStackTrace = printCreationStackTrace