diff --git a/direct/src/showbase/Job.py b/direct/src/showbase/Job.py index daa2de22cf..f34b6f5615 100755 --- a/direct/src/showbase/Job.py +++ b/direct/src/showbase/Job.py @@ -1,4 +1,9 @@ -class Job: +from direct.showbase.DirectObject import DirectObject + +if __debug__: + from pandac.PandaModules import PStatCollector + +class Job(DirectObject): # Base class for cpu-intensive or non-time-critical operations that # are run through the JobManager. @@ -15,12 +20,17 @@ class Job: self._generator = None self._id = Job._SerialGen.next() self._printing = False + if __debug__: + self._pstats = PStatCollector("App:Show code:jobManager:%s" % self._name) def destroy(self): del self._name del self._generator del self._printing + def getFinishedEvent(self): + return 'job-finished-%s' % self._id + def run(self): # this is a generator # override and do your processing diff --git a/direct/src/showbase/JobManager.py b/direct/src/showbase/JobManager.py index 1a2654d5f0..02b47716d0 100755 --- a/direct/src/showbase/JobManager.py +++ b/direct/src/showbase/JobManager.py @@ -83,6 +83,8 @@ class JobManager: # grab the job job = self._pri2jobId2job[pri][jobId] gen = job._getGenerator() + if __debug__: + job._pstats.start() job.resume() while True: try: @@ -96,8 +98,11 @@ class JobManager: job.suspend() self.remove(job) job.finished() + messenger.send(job.getFinishedEvent()) # job is done. break + if __debug__: + job._pstats.stop() # how long should we run per frame? def getTimeslice(self): @@ -125,6 +130,8 @@ class JobManager: jobId = self._pri2jobIds[self._highestPriority][0] job = jobId2job[jobId] gen = job._getGenerator() + if __debug__: + job._pstats.start() job.resume() while globalClock.getRealTime() < endT: try: @@ -138,6 +145,9 @@ class JobManager: job.suspend() self.remove(job) job.finished() + if __debug__: + job._pstats.stop() + messenger.send(job.getFinishedEvent()) # highest-priority job is done. # grab the next one if there's time left break @@ -145,6 +155,8 @@ class JobManager: # we've run out of time #assert self.notify.debug('timeslice end: %s, %s' % (endT, globalClock.getRealTime())) job.suspend() + if __debug__: + job._pstats.stop() break if len(self._pri2jobId2job) == 0: