frame profiler framework

This commit is contained in:
Darren Ranalli 2008-10-30 00:07:13 +00:00
parent b742e9050d
commit 2e362128da
3 changed files with 52 additions and 0 deletions

View File

@ -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'

View File

@ -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()

View File

@ -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