Browse Source

EventManager: various microoptimizations to Python event handling

rdb 6 years ago
parent
commit
6640e5698d
1 changed files with 36 additions and 44 deletions
  1. 36 44
      direct/src/showbase/EventManager.py

+ 36 - 44
direct/src/showbase/EventManager.py

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