| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | <?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;/** * @author Fabien Potencier <fabien@symfony.com> * * @final */class MemoryDataCollector extends DataCollector implements LateDataCollectorInterface{    public function __construct()    {        $this->reset();    }    /**     * {@inheritdoc}     */    public function collect(Request $request, Response $response, \Throwable $exception = null)    {        $this->updateMemoryUsage();    }    /**     * {@inheritdoc}     */    public function reset()    {        $this->data = [            'memory' => 0,            'memory_limit' => $this->convertToBytes(\ini_get('memory_limit')),        ];    }    /**     * {@inheritdoc}     */    public function lateCollect()    {        $this->updateMemoryUsage();    }    public function getMemory(): int    {        return $this->data['memory'];    }    /**     * @return int|float     */    public function getMemoryLimit()    {        return $this->data['memory_limit'];    }    public function updateMemoryUsage()    {        $this->data['memory'] = memory_get_peak_usage(true);    }    /**     * {@inheritdoc}     */    public function getName(): string    {        return 'memory';    }    /**     * @return int|float     */    private function convertToBytes(string $memoryLimit)    {        if ('-1' === $memoryLimit) {            return -1;        }        $memoryLimit = strtolower($memoryLimit);        $max = strtolower(ltrim($memoryLimit, '+'));        if (str_starts_with($max, '0x')) {            $max = \intval($max, 16);        } elseif (str_starts_with($max, '0')) {            $max = \intval($max, 8);        } else {            $max = (int) $max;        }        switch (substr($memoryLimit, -1)) {            case 't': $max *= 1024;                // no break            case 'g': $max *= 1024;                // no break            case 'm': $max *= 1024;                // no break            case 'k': $max *= 1024;        }        return $max;    }}
 |