mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 18:31:55 -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
|
# Base class for cpu-intensive or non-time-critical operations that
|
||||||
# are run through the JobManager.
|
# are run through the JobManager.
|
||||||
|
|
||||||
@ -15,12 +20,17 @@ class Job:
|
|||||||
self._generator = None
|
self._generator = None
|
||||||
self._id = Job._SerialGen.next()
|
self._id = Job._SerialGen.next()
|
||||||
self._printing = False
|
self._printing = False
|
||||||
|
if __debug__:
|
||||||
|
self._pstats = PStatCollector("App:Show code:jobManager:%s" % self._name)
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
del self._name
|
del self._name
|
||||||
del self._generator
|
del self._generator
|
||||||
del self._printing
|
del self._printing
|
||||||
|
|
||||||
|
def getFinishedEvent(self):
|
||||||
|
return 'job-finished-%s' % self._id
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
# this is a generator
|
# this is a generator
|
||||||
# override and do your processing
|
# override and do your processing
|
||||||
|
@ -83,6 +83,8 @@ class JobManager:
|
|||||||
# grab the job
|
# grab the job
|
||||||
job = self._pri2jobId2job[pri][jobId]
|
job = self._pri2jobId2job[pri][jobId]
|
||||||
gen = job._getGenerator()
|
gen = job._getGenerator()
|
||||||
|
if __debug__:
|
||||||
|
job._pstats.start()
|
||||||
job.resume()
|
job.resume()
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
@ -96,8 +98,11 @@ class JobManager:
|
|||||||
job.suspend()
|
job.suspend()
|
||||||
self.remove(job)
|
self.remove(job)
|
||||||
job.finished()
|
job.finished()
|
||||||
|
messenger.send(job.getFinishedEvent())
|
||||||
# job is done.
|
# job is done.
|
||||||
break
|
break
|
||||||
|
if __debug__:
|
||||||
|
job._pstats.stop()
|
||||||
|
|
||||||
# how long should we run per frame?
|
# how long should we run per frame?
|
||||||
def getTimeslice(self):
|
def getTimeslice(self):
|
||||||
@ -125,6 +130,8 @@ class JobManager:
|
|||||||
jobId = self._pri2jobIds[self._highestPriority][0]
|
jobId = self._pri2jobIds[self._highestPriority][0]
|
||||||
job = jobId2job[jobId]
|
job = jobId2job[jobId]
|
||||||
gen = job._getGenerator()
|
gen = job._getGenerator()
|
||||||
|
if __debug__:
|
||||||
|
job._pstats.start()
|
||||||
job.resume()
|
job.resume()
|
||||||
while globalClock.getRealTime() < endT:
|
while globalClock.getRealTime() < endT:
|
||||||
try:
|
try:
|
||||||
@ -138,6 +145,9 @@ class JobManager:
|
|||||||
job.suspend()
|
job.suspend()
|
||||||
self.remove(job)
|
self.remove(job)
|
||||||
job.finished()
|
job.finished()
|
||||||
|
if __debug__:
|
||||||
|
job._pstats.stop()
|
||||||
|
messenger.send(job.getFinishedEvent())
|
||||||
# highest-priority job is done.
|
# highest-priority job is done.
|
||||||
# grab the next one if there's time left
|
# grab the next one if there's time left
|
||||||
break
|
break
|
||||||
@ -145,6 +155,8 @@ class JobManager:
|
|||||||
# we've run out of time
|
# we've run out of time
|
||||||
#assert self.notify.debug('timeslice end: %s, %s' % (endT, globalClock.getRealTime()))
|
#assert self.notify.debug('timeslice end: %s, %s' % (endT, globalClock.getRealTime()))
|
||||||
job.suspend()
|
job.suspend()
|
||||||
|
if __debug__:
|
||||||
|
job._pstats.stop()
|
||||||
break
|
break
|
||||||
|
|
||||||
if len(self._pri2jobId2job) == 0:
|
if len(self._pri2jobId2job) == 0:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user