ソースを参照

Merge remote branch 'kriswallsmith/framework/optimize-debug-dispatcher'

* kriswallsmith/framework/optimize-debug-dispatcher:
  [FrameworkBundle] optimized the debug event dispatcher to avoid instantiating every listener every time
Fabien Potencier 14 年 前
コミット
6aa205c669
1 ファイル変更7 行追加11 行削除
  1. 7 11
      src/Symfony/Bundle/FrameworkBundle/Debug/EventDispatcher.php

+ 7 - 11
src/Symfony/Bundle/FrameworkBundle/Debug/EventDispatcher.php

@@ -47,12 +47,12 @@ class EventDispatcher extends BaseEventDispatcher implements EventDispatcherTrac
     public function notify(EventInterface $event)
     {
         foreach ($this->getListeners($event->getName()) as $listener) {
+            $this->addCall($event, $listener, 'notify');
+
             if (is_array($listener) && is_string($listener[0])) {
                 $listener[0] = $this->container->get($listener[0]);
             }
 
-            $this->addCall($event, $listener, 'notify');
-
             call_user_func($listener, $event);
         }
     }
@@ -63,12 +63,12 @@ class EventDispatcher extends BaseEventDispatcher implements EventDispatcherTrac
     public function notifyUntil(EventInterface $event)
     {
         foreach ($this->getListeners($event->getName()) as $i => $listener) {
+            $this->addCall($event, $listener, 'notifyUntil');
+
             if (is_array($listener) && is_string($listener[0])) {
                 $listener[0] = $this->container->get($listener[0]);
             }
 
-            $this->addCall($event, $listener, 'notifyUntil');
-
             $ret = call_user_func($listener, $event);
             if ($event->isProcessed()) {
                 if (null !== $this->logger) {
@@ -91,12 +91,12 @@ class EventDispatcher extends BaseEventDispatcher implements EventDispatcherTrac
     public function filter(EventInterface $event, $value)
     {
         foreach ($this->getListeners($event->getName()) as $listener) {
+            $this->addCall($event, $listener, 'filter');
+
             if (is_array($listener) && is_string($listener[0])) {
                 $listener[0] = $this->container->get($listener[0]);
             }
 
-            $this->addCall($event, $listener, 'filter');
-
             $value = call_user_func($listener, $event, $value);
         }
 
@@ -120,10 +120,6 @@ class EventDispatcher extends BaseEventDispatcher implements EventDispatcherTrac
 
         foreach (array_keys($this->listeners) as $name) {
             foreach ($this->getListeners($name) as $listener) {
-                if (is_array($listener) && is_string($listener[0])) {
-                    $listener[0] = $this->container->get($listener[0]);
-                }
-
                 $listener = $this->listenerToString($listener);
 
                 if (!isset($this->called[$name.'.'.$listener])) {
@@ -149,7 +145,7 @@ class EventDispatcher extends BaseEventDispatcher implements EventDispatcherTrac
         }
 
         if (is_array($listener)) {
-            return sprintf('%s::%s', is_object($listener[0]) ? get_class($listener[0]) : $listener[0], $listener[1]);
+            return is_object($listener[0]) ? sprintf('%s::%s', get_class($listener[0]), $listener[1]) : implode(':', $listener);
         }
     }