X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2Fbenchmarks%2FBenchmarker.php;h=ffb8cb353f7481572a46e7a8376fdf3dfff75037;hb=5f0080715ab1f9e176420c737b4a0511e3cb280b;hp=0039d2063254e91b9ab6337beb17dd2eb49fc84c;hpb=e1090009434d4908a37c8bc481fe07e96c5f647f;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/benchmarks/Benchmarker.php b/maintenance/benchmarks/Benchmarker.php index 0039d20632..ffb8cb353f 100644 --- a/maintenance/benchmarks/Benchmarker.php +++ b/maintenance/benchmarks/Benchmarker.php @@ -26,7 +26,9 @@ * @ingroup Benchmark */ +// @codeCoverageIgnoreStart require_once __DIR__ . '/../Maintenance.php'; +// @codeCoverageIgnoreEnd /** * Base class for benchmark scripts. @@ -35,15 +37,20 @@ require_once __DIR__ . '/../Maintenance.php'; */ abstract class Benchmarker extends Maintenance { protected $defaultCount = 100; + private $lang; public function __construct() { parent::__construct(); $this->addOption( 'count', 'How many times to run a benchmark', false, true ); + $this->addOption( 'verbose', 'Verbose logging of resource usage', false, false, 'v' ); } public function bench( array $benchs ) { + $this->lang = Language::factory( 'en' ); + $this->startBench(); $count = $this->getOption( 'count', $this->defaultCount ); + $verbose = $this->hasOption( 'verbose' ); foreach ( $benchs as $key => $bench ) { // Shortcut for simple functions if ( is_callable( $bench ) ) { @@ -66,6 +73,9 @@ abstract class Benchmarker extends Maintenance { $t = microtime( true ); call_user_func_array( $bench['function'], $bench['args'] ); $t = ( microtime( true ) - $t ) * 1000; + if ( $verbose ) { + $this->verboseRun( $i ); + } $times[] = $t; } @@ -104,6 +114,10 @@ abstract class Benchmarker extends Maintenance { 'median' => $median, 'mean' => $mean, 'max' => $max, + 'usage' => [ + 'mem' => memory_get_usage( true ), + 'mempeak' => memory_get_peak_usage( true ), + ], ] ); } } @@ -126,12 +140,32 @@ abstract class Benchmarker extends Maintenance { 'times', $res['count'] ); + foreach ( [ 'total', 'min', 'median', 'mean', 'max' ] as $metric ) { $ret .= sprintf( " %' 6s: %6.2fms\n", $metric, $res[$metric] ); } + + foreach ( [ + 'mem' => 'Current memory usage', + 'mempeak' => 'Peak memory usage' + ] as $key => $label ) { + $ret .= sprintf( "%' 20s: %s\n", + $label, + $this->lang->formatSize( $res['usage'][$key] ) + ); + } + $this->output( "$ret\n" ); } + + protected function verboseRun( $iteration ) { + $this->output( sprintf( "#%3d - memory: %-10s - peak: %-10s\n", + $iteration, + $this->lang->formatSize( memory_get_usage( true ) ), + $this->lang->formatSize( memory_get_peak_usage( true ) ) + ) ); + } }