mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
added Job pstats, derive from DirectObject
This commit is contained in:
parent
1b12685fee
commit
e5fc82670d
@ -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
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user