Browse Source

frame profiler framework

Darren Ranalli 17 years ago
parent
commit
2e362128da
3 changed files with 52 additions and 0 deletions
  1. 18 0
      direct/src/task/FrameProfiler.py
  2. 17 0
      direct/src/task/TaskNew.py
  3. 17 0
      direct/src/task/TaskOrig.py

+ 18 - 0
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'

+ 17 - 0
direct/src/task/TaskNew.py

@@ -114,6 +114,8 @@ class TaskManager:
         self._frameProfileQueue = Queue()
         self._frameProfileQueue = Queue()
 
 
         # this will be set when it's safe to import StateVar 
         # this will be set when it's safe to import StateVar 
+        self._profileFrames = None
+        self._frameProfiler = None
         self._profileTasks = None
         self._profileTasks = None
         self._taskProfiler = None
         self._taskProfiler = None
         self._taskProfileInfo = ScratchPad(
         self._taskProfileInfo = ScratchPad(
@@ -128,6 +130,8 @@ class TaskManager:
         from direct.fsm.StatePush import StateVar
         from direct.fsm.StatePush import StateVar
         self._profileTasks = StateVar(False)
         self._profileTasks = StateVar(False)
         self.setProfileTasks(ConfigVariableBool('profile-task-spikes', 0).getValue())
         self.setProfileTasks(ConfigVariableBool('profile-task-spikes', 0).getValue())
+        self._profileFrames = StateVar(False)
+        self.setProfileFrames(ConfigVariableBool('profile-frame-spikes', 0).getValue())
 
 
     def destroy(self):
     def destroy(self):
         # This should be safe to call multiple times.
         # This should be safe to call multiple times.
@@ -554,6 +558,19 @@ class TaskManager:
             result = self.step()
             result = self.step()
         return result
         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):
     def getProfileTasks(self):
         return self._profileTasks.get()
         return self._profileTasks.get()
 
 

+ 17 - 0
direct/src/task/TaskOrig.py

@@ -427,6 +427,8 @@ class TaskManager:
         self.MaxEpockSpeed = 1.0/30.0;   
         self.MaxEpockSpeed = 1.0/30.0;   
 
 
         # this will be set when it's safe to import StateVar
         # this will be set when it's safe to import StateVar
+        self._profileFrames = None
+        self._frameProfiler = None
         self._profileTasks = None
         self._profileTasks = None
         self._taskProfiler = None
         self._taskProfiler = None
         self._taskProfileInfo = ScratchPad(
         self._taskProfileInfo = ScratchPad(
@@ -1035,6 +1037,19 @@ class TaskManager:
             result = self.step()
             result = self.step()
         return result
         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):
     def getProfileTasks(self):
         return self._profileTasks.get()
         return self._profileTasks.get()
 
 
@@ -1182,6 +1197,8 @@ class TaskManager:
                 from direct.fsm.StatePush import StateVar
                 from direct.fsm.StatePush import StateVar
                 self._profileTasks = StateVar(False)
                 self._profileTasks = StateVar(False)
                 self.setProfileTasks(getBase().config.GetBool('profile-task-spikes', 0))
                 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
         # Set the clock to have last frame's time in case we were
         # Paused at the prompt for a long time
         # Paused at the prompt for a long time