From 62fb019c6283ee0510f34ea188159cdb83fee47b Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Thu, 17 Nov 2011 08:26:11 +0100 Subject: [PATCH] added event priorities in the profiler --- .../Debug/TraceableEventDispatcher.php | 33 ++++++++++++------- .../views/Collector/events.html.twig | 4 +++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Debug/TraceableEventDispatcher.php b/src/Symfony/Bundle/FrameworkBundle/Debug/TraceableEventDispatcher.php index 27bda5c00a83..770932c2d866 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Debug/TraceableEventDispatcher.php +++ b/src/Symfony/Bundle/FrameworkBundle/Debug/TraceableEventDispatcher.php @@ -30,6 +30,7 @@ class TraceableEventDispatcher extends ContainerAwareEventDispatcher implements private $logger; private $called; private $stopwatch; + private $priorities; /** * Constructor. @@ -84,19 +85,11 @@ public function dispatch($eventName, Event $event = null) public function addListener($eventName, $listener, $priority = 0) { if (!is_callable($listener)) { - if (is_string($listener)) { - $typeDefinition = '[string] '.$listener; - } elseif (is_array($listener)) { - $typeDefinition = '[array] '.(is_object($listener[0]) ? get_class($listener[0]) : $listener[0]).'::'.$listener[1]; - } elseif (is_object($listener)) { - $typeDefinition = '[object] '.get_class($listener); - } else { - $typeDefinition = '[?] '.var_export($listener, true); - } - - throw new \RuntimeException(sprintf('The given callback (%s) for event "%s" is not callable.', $typeDefinition, $eventName)); + throw new \RuntimeException(sprintf('The given callback (%s) for event "%s" is not callable.', $this->getListenerAsString($listener), $eventName)); } + $this->priorities[$eventName.'_'.$this->getListenerAsString($listener)] = $priority; + parent::addListener($eventName, $listener, $priority); } @@ -203,7 +196,10 @@ public function getNotCalledListeners() */ private function getListenerInfo($listener, $eventName) { - $info = array('event' => $eventName); + $info = array( + 'event' => $eventName, + 'priority' => $this->priorities[$eventName.'_'.$this->getListenerAsString($listener)], + ); if ($listener instanceof \Closure) { $info += array( 'type' => 'Closure', @@ -271,4 +267,17 @@ private function updateProfile($token) $profiler->saveProfile($child); } } + + private function getListenerAsString($listener) + { + if (is_string($listener)) { + return '[string] '.$listener; + } elseif (is_array($listener)) { + return '[array] '.(is_object($listener[0]) ? get_class($listener[0]) : $listener[0]).'::'.$listener[1]; + } elseif (is_object($listener)) { + return '[object] '.get_class($listener); + } + + return '[?] '.var_export($listener, true); + } } diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/events.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/events.html.twig index ba994c8ae613..6fc8f6f897f2 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/events.html.twig +++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/events.html.twig @@ -15,11 +15,13 @@ + {% for listener in collector.calledlisteners %} + {% endfor %} @@ -31,12 +33,14 @@
Event namePriority Listener
{{ listener.event }}{{ listener.priority }} {{ display_listener(listener) }}
+ {% set listeners = collector.notcalledlisteners %} {% for listener in listeners|keys|sort %} + {% endfor %}
Event namePriority Listener
{{ listeners[listener].event }}{{ listeners[listener].priority }} {{ display_listener(listeners[listener]) }}