--- /dev/null
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\HttpKernel\DataCollector;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+
+/**
+ * MemoryDataCollector.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ */
+class MemoryDataCollector extends DataCollector implements LateDataCollectorInterface
+{
+ public function __construct()
+ {
+ $this->data = array(
+ 'memory' => 0,
+ 'memory_limit' => $this->convertToBytes(ini_get('memory_limit')),
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function collect(Request $request, Response $response, \Exception $exception = null)
+ {
+ $this->updateMemoryUsage();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function lateCollect()
+ {
+ $this->updateMemoryUsage();
+ }
+
+ /**
+ * Gets the memory.
+ *
+ * @return int The memory
+ */
+ public function getMemory()
+ {
+ return $this->data['memory'];
+ }
+
+ /**
+ * Gets the PHP memory limit.
+ *
+ * @return int The memory limit
+ */
+ public function getMemoryLimit()
+ {
+ return $this->data['memory_limit'];
+ }
+
+ /**
+ * Updates the memory usage data.
+ */
+ public function updateMemoryUsage()
+ {
+ $this->data['memory'] = memory_get_peak_usage(true);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return 'memory';
+ }
+
+ private function convertToBytes($memoryLimit)
+ {
+ if ('-1' === $memoryLimit) {
+ return -1;
+ }
+
+ $memoryLimit = strtolower($memoryLimit);
+ $max = strtolower(ltrim($memoryLimit, '+'));
+ if (0 === strpos($max, '0x')) {
+ $max = intval($max, 16);
+ } elseif (0 === strpos($max, '0')) {
+ $max = intval($max, 8);
+ } else {
+ $max = (int) $max;
+ }
+
+ switch (substr($memoryLimit, -1)) {
+ case 't': $max *= 1024;
+ case 'g': $max *= 1024;
+ case 'm': $max *= 1024;
+ case 'k': $max *= 1024;
+ }
+
+ return $max;
+ }
+}