2015-08-17 17:00:26 -07:00
< ? 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 ()
{
2018-11-23 12:29:20 +00:00
$this -> reset ();
2015-08-17 17:00:26 -07:00
}
/**
* { @ inheritdoc }
*/
public function collect ( Request $request , Response $response , \Exception $exception = null )
{
$this -> updateMemoryUsage ();
}
2018-11-23 12:29:20 +00:00
/**
* { @ inheritdoc }
*/
public function reset ()
{
$this -> data = array (
'memory' => 0 ,
'memory_limit' => $this -> convertToBytes ( ini_get ( 'memory_limit' )),
);
}
2015-08-17 17:00:26 -07:00
/**
* { @ 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' )) {
2018-11-23 12:29:20 +00:00
$max = \intval ( $max , 16 );
2015-08-17 17:00:26 -07:00
} elseif ( 0 === strpos ( $max , '0' )) {
2018-11-23 12:29:20 +00:00
$max = \intval ( $max , 8 );
2015-08-17 17:00:26 -07:00
} else {
$max = ( int ) $max ;
}
switch ( substr ( $memoryLimit , - 1 )) {
case 't' : $max *= 1024 ;
2018-11-23 12:29:20 +00:00
// no break
2015-08-17 17:00:26 -07:00
case 'g' : $max *= 1024 ;
2018-11-23 12:29:20 +00:00
// no break
2015-08-17 17:00:26 -07:00
case 'm' : $max *= 1024 ;
2018-11-23 12:29:20 +00:00
// no break
2015-08-17 17:00:26 -07:00
case 'k' : $max *= 1024 ;
}
return $max ;
}
}