<?php 
 
/** 
 * Run the script indefinitely seconds with the loop from the factory and report every 2 seconds: 
 * php 95-benchmark-memory.php 
 * Run the script for 30 seconds with the stream_select loop and report every 10 seconds: 
 * php 95-benchmark-memory.php -t 30 -l StreamSelect -r 10 
 */ 
 
use React\EventLoop\Factory; 
use React\EventLoop\LoopInterface; 
use React\EventLoop\TimerInterface; 
 
require __DIR__ . '/../vendor/autoload.php'; 
 
$args = getopt('t:l:r:'); 
$t  = isset($args['t']) ? (int)$args['t'] : 0; 
$loop = isset($args['l']) && class_exists('React\EventLoop\\' . $args['l'] . 'Loop') ? 'React\EventLoop\\' . $args['l'] . 'Loop' : Factory::create(); 
 
if (!($loop instanceof LoopInterface)) { 
    $loop = new $loop(); 
} 
 
$r = isset($args['r']) ? (int)$args['r'] : 2; 
 
$runs = 0; 
 
if (5 < $t) { 
    $loop->addTimer($t, function () use ($loop) { 
        $loop->stop(); 
    }); 
 
} 
 
$loop->addPeriodicTimer(0.001, function () use (&$runs, $loop) { 
    $runs++; 
 
    $loop->addPeriodicTimer(1, function (TimerInterface $timer) use ($loop) { 
        $loop->cancelTimer($timer); 
    }); 
}); 
 
$loop->addPeriodicTimer($r, function () use (&$runs) { 
    $kmem = round(memory_get_usage() / 1024); 
    $kmemReal = round(memory_get_usage(true) / 1024); 
    echo "Runs:\t\t\t$runs\n"; 
    echo "Memory (internal):\t$kmem KiB\n"; 
    echo "Memory (real):\t\t$kmemReal KiB\n"; 
    echo str_repeat('-', 50), "\n"; 
}); 
 
echo "PHP Version:\t\t", phpversion(), "\n"; 
echo "Loop\t\t\t", get_class($loop), "\n"; 
echo "Time\t\t\t", date('r'), "\n"; 
 
echo str_repeat('-', 50), "\n"; 
 
$beginTime = time(); 
$loop->run(); 
$endTime = time(); 
$timeTaken = $endTime - $beginTime; 
 
echo "PHP Version:\t\t", phpversion(), "\n"; 
echo "Loop\t\t\t", get_class($loop), "\n"; 
echo "Time\t\t\t", date('r'), "\n"; 
echo "Time taken\t\t", $timeTaken, " seconds\n"; 
echo "Runs per second\t\t", round($runs / $timeTaken), "\n"; 
 
 |