From 4c0c588a68e6f18c1f44fa2431233df648863f75 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Sat, 10 Nov 2012 17:53:14 +0100 Subject: [PATCH] [MemoryDataCollector] Stop being optimistic about memory usage Take into account the memory used in the kernel.terminate listeners --- .../DataCollector/MemoryDataCollector.php | 17 ++++++-- .../Debug/TraceableEventDispatcher.php | 41 ++++++++++--------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/DataCollector/MemoryDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/MemoryDataCollector.php index c41ca314da..649c88d764 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/MemoryDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/MemoryDataCollector.php @@ -21,14 +21,17 @@ use Symfony\Component\HttpFoundation\Response; */ class MemoryDataCollector extends DataCollector { + public function __construct() + { + $this->data = array('memory' => 0); + } + /** * {@inheritdoc} */ public function collect(Request $request, Response $response, \Exception $exception = null) { - $this->data = array( - 'memory' => memory_get_peak_usage(true), - ); + $this->updateMemoryUsage(); } /** @@ -41,6 +44,14 @@ class MemoryDataCollector extends DataCollector return $this->data['memory']; } + /** + * Updates the memory usage data. + */ + public function updateMemoryUsage() + { + $this->data['memory'] = memory_get_peak_usage(true); + } + /** * {@inheritdoc} */ diff --git a/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php b/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php index 9c93f29b99..e4aab5ba4d 100644 --- a/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php +++ b/src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php @@ -204,7 +204,7 @@ class TraceableEventDispatcher implements EventDispatcherInterface, TraceableEve $skipped = false; foreach ($skippedListeners as $skippedListener) { - $skippedListener = $this->unwrapListener($skippedListener, $eventName); + $skippedListener = $this->unwrapListener($skippedListener); if ($skipped) { $info = $this->getListenerInfo($skippedListener, $eventName); @@ -254,7 +254,7 @@ class TraceableEventDispatcher implements EventDispatcherInterface, TraceableEve */ private function getListenerInfo($listener, $eventName) { - $listener = $this->unwrapListener($listener, $eventName); + $listener = $this->unwrapListener($listener); $info = array( 'event' => $eventName, @@ -329,9 +329,25 @@ class TraceableEventDispatcher implements EventDispatcherInterface, TraceableEve */ private function saveInfoInProfile(Profile $profile, $updateChildren) { - $profile->getCollector('time')->setEvents($this->stopwatch->getSectionEvents($profile->getToken())); - $profile->getCollector('events')->setCalledListeners($this->getCalledListeners()); - $profile->getCollector('events')->setNotCalledListeners($this->getNotCalledListeners()); + try { + $collector = $profile->getCollector('memory'); + $collector->updateMemoryUsage(); + } catch (\InvalidArgumentException $e) { + } + + try { + $collector = $profile->getCollector('time'); + $collector->setEvents($this->stopwatch->getSectionEvents($profile->getToken())); + } catch (\InvalidArgumentException $e) { + } + + try { + $collector = $profile->getCollector('events'); + $collector->setCalledListeners($this->getCalledListeners()); + $collector->setNotCalledListeners($this->getNotCalledListeners()); + } catch (\InvalidArgumentException $e) { + } + $this->profiler->saveProfile($profile); if ($updateChildren) { @@ -341,19 +357,6 @@ class TraceableEventDispatcher implements EventDispatcherInterface, TraceableEve } } - 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); - } - private function preDispatch($eventName, Event $event) { // wrap all listeners before they are called @@ -437,7 +440,7 @@ class TraceableEventDispatcher implements EventDispatcherInterface, TraceableEve }; } - private function unwrapListener($listener, $eventName) + private function unwrapListener($listener) { // get the original listener if (is_object($listener) && isset($this->wrappedListeners[$this->id][$listener])) {