EventManager: various microoptimizations to Python event handling

This commit is contained in:
rdb 2019-02-12 14:13:39 +01:00
parent e1b86287ef
commit 6640e5698d

View File

@ -19,7 +19,7 @@ class EventManager:
Create a C++ event queue and handler Create a C++ event queue and handler
""" """
# Make a notify category for this class (unless there already is one) # Make a notify category for this class (unless there already is one)
if (EventManager.notify == None): if EventManager.notify is None:
EventManager.notify = directNotify.newCategory("EventManager") EventManager.notify = directNotify.newCategory("EventManager")
self.eventQueue = eventQueue self.eventQueue = eventQueue
@ -37,8 +37,10 @@ class EventManager:
processFunc = self.processEventPstats processFunc = self.processEventPstats
else: else:
processFunc = self.processEvent processFunc = self.processEvent
while (not self.eventQueue.isQueueEmpty()): isEmptyFunc = self.eventQueue.isQueueEmpty
processFunc(self.eventQueue.dequeueEvent()) dequeueFunc = self.eventQueue.dequeueEvent
while not isEmptyFunc():
processFunc(dequeueFunc())
def eventLoopTask(self, task): def eventLoopTask(self, task):
""" """
@ -78,13 +80,13 @@ class EventManager:
# ******** Duplicate any changes in processEventPstats ********* # ******** Duplicate any changes in processEventPstats *********
# ************************************************************** # **************************************************************
# Get the event name # Get the event name
eventName = event.getName() eventName = event.name
if eventName: if eventName:
paramList = [] paramList = []
for i in range(event.getNumParameters()): for eventParameter in event.parameters:
eventParameter = event.getParameter(i)
eventParameterData = self.parseEventParameter(eventParameter) eventParameterData = self.parseEventParameter(eventParameter)
paramList.append(eventParameterData) paramList.append(eventParameterData)
# Do not print the new frame debug, it is too noisy! # Do not print the new frame debug, it is too noisy!
if (EventManager.notify.getDebug() and eventName != 'NewFrame'): if (EventManager.notify.getDebug() and eventName != 'NewFrame'):
EventManager.notify.debug('received C++ event named: ' + eventName + EventManager.notify.debug('received C++ event named: ' + eventName +
@ -94,13 +96,12 @@ class EventManager:
# ************************************************************** # **************************************************************
# Send the event, we used to send it with the event # Send the event, we used to send it with the event
# name as a parameter, but now you can use extraArgs for that # name as a parameter, but now you can use extraArgs for that
if paramList: messenger.send(eventName, paramList)
messenger.send(eventName, paramList)
else:
messenger.send(eventName)
# Also send the event down into C++ land # Also send the event down into C++ land
if self.eventHandler: handler = self.eventHandler
self.eventHandler.dispatchEvent(event) if handler:
handler.dispatchEvent(event)
else: else:
# An unnamed event from C++ is probably a bad thing # An unnamed event from C++ is probably a bad thing
@ -115,13 +116,13 @@ class EventManager:
# ******** Duplicate any changes in processEvent ********* # ******** Duplicate any changes in processEvent *********
# ******************************************************** # ********************************************************
# Get the event name # Get the event name
eventName = event.getName() eventName = event.name
if eventName: if eventName:
paramList = [] paramList = []
for i in range(event.getNumParameters()): for eventParameter in event.parameters:
eventParameter = event.getParameter(i)
eventParameterData = self.parseEventParameter(eventParameter) eventParameterData = self.parseEventParameter(eventParameter)
paramList.append(eventParameterData) paramList.append(eventParameterData)
# Do not print the new frame debug, it is too noisy! # Do not print the new frame debug, it is too noisy!
if (EventManager.notify.getDebug() and eventName != 'NewFrame'): if (EventManager.notify.getDebug() and eventName != 'NewFrame'):
EventManager.notify.debug('received C++ event named: ' + eventName + EventManager.notify.debug('received C++ event named: ' + eventName +
@ -131,45 +132,36 @@ class EventManager:
# ******************************************************** # ********************************************************
# ******** Duplicate any changes in processEvent ********* # ******** Duplicate any changes in processEvent *********
# ******************************************************** # ********************************************************
if self._wantPstats: name = eventName
name = eventName hyphen = name.find('-')
hyphen = name.find('-') if hyphen >= 0:
if hyphen >= 0: name = name[0:hyphen]
name = name[0:hyphen] pstatCollector = PStatCollector('App:Show code:eventManager:' + name)
pstatCollector = PStatCollector('App:Show code:eventManager:' + name) pstatCollector.start()
pstatCollector.start()
if self.eventHandler:
cppPstatCollector = PStatCollector(
'App:Show code:eventManager:' + name + ':C++')
if paramList:
messenger.send(eventName, paramList)
else:
messenger.send(eventName)
# Also send the event down into C++ land
if self.eventHandler: if self.eventHandler:
if self._wantPstats: cppPstatCollector = PStatCollector(
cppPstatCollector.start() 'App:Show code:eventManager:' + name + ':C++')
self.eventHandler.dispatchEvent(event)
# ********************************************************
# ******** Duplicate any changes in processEvent *********
# ********************************************************
if self._wantPstats: messenger.send(eventName, paramList)
if self.eventHandler:
cppPstatCollector.stop() # Also send the event down into C++ land
pstatCollector.stop() handler = self.eventHandler
if handler:
cppPstatCollector.start()
handler.dispatchEvent(event)
cppPstatCollector.stop()
pstatCollector.stop()
else: else:
# An unnamed event from C++ is probably a bad thing # An unnamed event from C++ is probably a bad thing
EventManager.notify.warning('unnamed event in processEvent') EventManager.notify.warning('unnamed event in processEvent')
def restart(self): def restart(self):
if self.eventQueue == None: if self.eventQueue is None:
self.eventQueue = EventQueue.getGlobalEventQueue() self.eventQueue = EventQueue.getGlobalEventQueue()
if self.eventHandler == None: if self.eventHandler is None:
if self.eventQueue == EventQueue.getGlobalEventQueue(): if self.eventQueue == EventQueue.getGlobalEventQueue():
# If we are using the global event queue, then we also # If we are using the global event queue, then we also
# want to use the global event handler. # want to use the global event handler.