added ~ailogtaskprofiles, added ~aitaskprofileflush <name>
This commit is contained in:
parent
cfb8fa8b3b
commit
26d56476f0
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Reference in New Issue