From 2e362128dae36a93c4363f214de21e96f96ffd74 Mon Sep 17 00:00:00 2001 From: Darren Ranalli Date: Thu, 30 Oct 2008 00:07:13 +0000 Subject: [PATCH] frame profiler framework --- direct/src/task/FrameProfiler.py | 18 ++++++++++++++++++ direct/src/task/TaskNew.py | 17 +++++++++++++++++ direct/src/task/TaskOrig.py | 17 +++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100755 direct/src/task/FrameProfiler.py diff --git a/direct/src/task/FrameProfiler.py b/direct/src/task/FrameProfiler.py new file mode 100755 index 0000000000..9bd44c4ad3 --- /dev/null +++ b/direct/src/task/FrameProfiler.py @@ -0,0 +1,18 @@ +from direct.directnotify.DirectNotifyGlobal import directNotify +from direct.fsm.StatePush import FunctionCall + +class FrameProfiler: + notify = directNotify.newCategory('FrameProfiler') + + def __init__(self): + self._enableFC = FunctionCall(self._setEnabled, taskMgr.getProfileFramesSV()) + + def destroy(self): + self._enableFC.set(False) + self._enableFC.destroy() + + def _setEnabled(self, enabled): + if enabled: + print 'FrameProfiler enabled' + else: + print 'FrameProfiler disabled' diff --git a/direct/src/task/TaskNew.py b/direct/src/task/TaskNew.py index 77121c81ee..e175834eb1 100644 --- a/direct/src/task/TaskNew.py +++ b/direct/src/task/TaskNew.py @@ -114,6 +114,8 @@ class TaskManager: self._frameProfileQueue = Queue() # this will be set when it's safe to import StateVar + self._profileFrames = None + self._frameProfiler = None self._profileTasks = None self._taskProfiler = None self._taskProfileInfo = ScratchPad( @@ -128,6 +130,8 @@ class TaskManager: from direct.fsm.StatePush import StateVar self._profileTasks = StateVar(False) self.setProfileTasks(ConfigVariableBool('profile-task-spikes', 0).getValue()) + self._profileFrames = StateVar(False) + self.setProfileFrames(ConfigVariableBool('profile-frame-spikes', 0).getValue()) def destroy(self): # This should be safe to call multiple times. @@ -554,6 +558,19 @@ class TaskManager: result = self.step() return result + def getProfileFrames(self): + return self._profileFrames.get() + + def getProfileFramesSV(self): + return self._profileFrames + + def setProfileFrames(self, profileFrames): + self._profileFrames.set(profileFrames) + if (not self._frameProfiler) and profileFrames: + # import here due to import dependencies + from direct.task.FrameProfiler import FrameProfiler + self._frameProfiler = FrameProfiler() + def getProfileTasks(self): return self._profileTasks.get() diff --git a/direct/src/task/TaskOrig.py b/direct/src/task/TaskOrig.py index 67342ea747..d6bb48803c 100644 --- a/direct/src/task/TaskOrig.py +++ b/direct/src/task/TaskOrig.py @@ -427,6 +427,8 @@ class TaskManager: self.MaxEpockSpeed = 1.0/30.0; # this will be set when it's safe to import StateVar + self._profileFrames = None + self._frameProfiler = None self._profileTasks = None self._taskProfiler = None self._taskProfileInfo = ScratchPad( @@ -1035,6 +1037,19 @@ class TaskManager: result = self.step() return result + def getProfileFrames(self): + return self._profileFrames.get() + + def getProfileFramesSV(self): + return self._profileFrames + + def setProfileFrames(self, profileFrames): + self._profileFrames.set(profileFrames) + if (not self._frameProfiler) and profileFrames: + # import here due to import dependencies + from direct.task.FrameProfiler import FrameProfiler + self._frameProfiler = FrameProfiler() + def getProfileTasks(self): return self._profileTasks.get() @@ -1182,6 +1197,8 @@ class TaskManager: from direct.fsm.StatePush import StateVar self._profileTasks = StateVar(False) self.setProfileTasks(getBase().config.GetBool('profile-task-spikes', 0)) + self._profileFrames = StateVar(False) + self.setProfileFrames(ConfigVariableBool('profile-frame-spikes', 0).getValue()) # Set the clock to have last frame's time in case we were # Paused at the prompt for a long time