merged branch vicb/memory (PR #5973)

This PR was merged into the master branch.

Commits
-------

4c0c588 [MemoryDataCollector] Stop being optimistic about memory usage

Discussion
----------

[MemoryDataCollector] Stop being optimistic about memory usage

Take into account the memory used in the kernel.terminate listeners
This commit is contained in:
Fabien Potencier 2012-11-10 19:56:21 +01:00
commit 228c9e6613
2 changed files with 36 additions and 22 deletions

View File

@ -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}
*/

View File

@ -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])) {