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