Browse Source

Add tasks to pstats

David Rose 24 years ago
parent
commit
892b4465da
2 changed files with 25 additions and 4 deletions
  1. 1 0
      direct/src/showbase/ShowBase.py
  2. 24 4
      direct/src/task/Task.py

+ 1 - 0
direct/src/showbase/ShowBase.py

@@ -47,6 +47,7 @@ class ShowBase:
         self.wantStats = self.config.GetBool('want-stats', 0)
         self.wantStats = self.config.GetBool('want-stats', 0)
 
 
         taskMgr.taskTimerVerbose = self.config.GetBool('task-timer-verbose', 0)
         taskMgr.taskTimerVerbose = self.config.GetBool('task-timer-verbose', 0)
+        taskMgr.pStatsTasks = self.config.GetBool('pstats-tasks', 0)
 
 
         fsmRedefine = self.config.GetBool('fsm-redefine', 0)
         fsmRedefine = self.config.GetBool('fsm-redefine', 0)
         State.FsmRedefine = fsmRedefine
         State.FsmRedefine = fsmRedefine

+ 24 - 4
direct/src/task/Task.py

@@ -37,6 +37,7 @@ class Task:
         self.maxDt = 0.0
         self.maxDt = 0.0
         self.avgDt = 0.0
         self.avgDt = 0.0
         self.runningTotal = 0.0
         self.runningTotal = 0.0
+        self.pstats = None
 
 
     def getPriority(self):
     def getPriority(self):
         return self._priority
         return self._priority
@@ -53,16 +54,17 @@ class Task:
         self.time = currentTime - self.starttime
         self.time = currentTime - self.starttime
         self.frame = currentFrame - self.startframe
         self.frame = currentFrame - self.startframe
 
 
+    def setupPStats(self, name):
+        if __debug__:
+            import PStatCollector
+            self.pstats = PStatCollector.PStatCollector("App:Show code:" + name)
+
 def doLater(delayTime, task, taskName):
 def doLater(delayTime, task, taskName):
     task.name = taskName
     task.name = taskName
     # make a sequence out of the delay and the task
     # make a sequence out of the delay and the task
     seq = sequence(pause(delayTime), task)
     seq = sequence(pause(delayTime), task)
     return seq
     return seq
 
 
-def spawnMethodNamed(self, func, name):
-        task = Task(func)
-        self.spawnTaskNamed(task, name)
-
 def pause(delayTime):
 def pause(delayTime):
     def func(self):
     def func(self):
         if (self.time < self.delayTime):
         if (self.time < self.delayTime):
@@ -261,6 +263,7 @@ class TaskManager:
         if (TaskManager.notify == None):
         if (TaskManager.notify == None):
             TaskManager.notify = directNotify.newCategory("TaskManager")
             TaskManager.notify = directNotify.newCategory("TaskManager")
         self.taskTimerVerbose = 0
         self.taskTimerVerbose = 0
+        self.pStatsTasks = 0
 
 
     def stepping(value):
     def stepping(value):
         self.stepping = value
         self.stepping = value
@@ -284,6 +287,19 @@ class TaskManager:
             index = index - 1
             index = index - 1
         index = index + 1
         index = index + 1
         self.taskList.insert(index, task)
         self.taskList.insert(index, task)
+
+        if __debug__:
+            if self.pStatsTasks and name != "igloop":
+                # Get the PStats name for the task.  By convention,
+                # this is everything until the first hyphen; the part
+                # of the task name following the hyphen is generally
+                # used to differentiate particular tasks that do the
+                # same thing to different objects.
+                hyphen = name.find('-')
+                if hyphen >= 0:
+                    name = name[0:hyphen]
+                task.setupPStats(name)
+                
         return task
         return task
 
 
     def doMethodLater(self, delayTime, func, taskName):
     def doMethodLater(self, delayTime, func, taskName):
@@ -361,9 +377,13 @@ class TaskManager:
                 ret = task(task)
                 ret = task(task)
             else:
             else:
                 # Run the task and check the return value
                 # Run the task and check the return value
+                if task.pstats:
+                    task.pstats.start()
                 startTime = time.clock()
                 startTime = time.clock()
                 ret = task(task)
                 ret = task(task)
                 endTime = time.clock()
                 endTime = time.clock()
+                if task.pstats:
+                    task.pstats.stop()
 
 
                 # Record the dt
                 # Record the dt
                 dt = endTime - startTime
                 dt = endTime - startTime