From 26d56476f03288e9581fe3150bae7cf6dc8eceb1 Mon Sep 17 00:00:00 2001 From: Darren Ranalli Date: Fri, 19 Sep 2008 00:28:05 +0000 Subject: [PATCH] added ~ailogtaskprofiles, added ~aitaskprofileflush --- direct/src/task/Task.py | 8 ++++++-- direct/src/task/TaskProfiler.py | 26 ++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/direct/src/task/Task.py b/direct/src/task/Task.py index 92907df519..05c64fe55a 100644 --- a/direct/src/task/Task.py +++ b/direct/src/task/Task.py @@ -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( diff --git a/direct/src/task/TaskProfiler.py b/direct/src/task/TaskProfiler.py index a7530abef4..84da7f38e2 100755 --- a/direct/src/task/TaskProfiler.py +++ b/direct/src/task/TaskProfiler.py @@ -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):