added ~ailogtaskprofiles, added ~aitaskprofileflush <name>

This commit is contained in:
Darren Ranalli 2008-09-19 00:28:05 +00:00
parent cfb8fa8b3b
commit 26d56476f0
2 changed files with 30 additions and 4 deletions

View File

@ -973,9 +973,13 @@ class TaskManager:
from direct.task.TaskProfiler import TaskProfiler
self._taskProfiler = TaskProfiler()
def flushTaskProfiles(self):
def logTaskProfiles(self, name=None):
if self._taskProfiler:
self._taskProfiler.flush()
self._taskProfiler.logProfiles(name)
def flushTaskProfiles(self, name=None):
if self._taskProfiler:
self._taskProfiler.flush(name)
def _setProfileTask(self, task):
self._profileInfo = ScratchPad(

View File

@ -3,6 +3,8 @@ from direct.fsm.StatePush import FunctionCall
from direct.showbase.PythonUtil import getProfileResultString, Averager
class TaskTracker:
# call it TaskProfiler to avoid confusion for the user
notify = directNotify.newCategory("TaskProfiler")
def __init__(self, namePattern):
self._namePattern = namePattern
self._durationAverager = Averager('%s-durationAverager' % namePattern)
@ -52,6 +54,14 @@ class TaskTracker:
def getMaxNonSpikeData(self):
# returns duration, data for closest-to-average sample
return self._maxNonSpikeDataDur, self._maxNonSpikeData
def log(self):
self.notify.info('task CPU profile (%s):\n'
'== AVERAGE (%s wall-clock seconds)\n%s\n'
'== LONGEST NON-SPIKE (%s wall-clock seconds)\n%s' % (
self._namePattern,
self._avgDataDur, self._avgData,
self._maxNonSpikeDataDur, self._maxNonSpikeData,
))
class TaskProfiler:
# this does intermittent profiling of tasks running on the system
@ -79,9 +89,21 @@ class TaskProfiler:
del self._namePattern2tracker
del self._task
def flush(self):
def logProfiles(self, name=None):
if name:
name = name.lower()
for namePattern, tracker in self._namePattern2tracker.iteritems():
if (name and (name not in namePattern.lower())):
continue
tracker.log()
def flush(self, name):
if name:
name = name.lower()
# flush stored task profiles
for tracker in self._namePattern2tracker.itervalues():
for namePattern, tracker in self._namePattern2tracker.iteritems():
if (name and (name not in namePattern.lower())):
continue
tracker.flush()
def _setEnabled(self, enabled):