'; $failed = false; $sum = 0; for ($i = 0; $i < 3; ++$i) { $time = microtime (true); if (call_user_func_array ($callback, $params)) { $diff = microtime (true) - $time; $sum += $diff; echo ' '; } else { $failed = true; echo ' '; } } if ($failed) echo ' '; else echo ' '; } function bench_skip ($name) { echo ' '; } function test_proc_loop ($loops) { for ($i = 0; $i < $loops; ) ++$i; return true; } function test_disk_o ($loops, $size) { $buffer = str_repeat ('$', $size); for ($i = 0; $i < $loops; ++$i) { $f = fopen ('dummy', 'wb'); fwrite ($f, $buffer); fclose ($f); } unlink ('dummy'); return true; } function test_disk_r ($loops, $size) { $f = fopen ('dummy', 'wb'); fwrite ($f, str_repeat ('$', $size)); fclose ($f); for ($i = 0; $i < $loops; ++$i) { $f = fopen ('dummy', 'rb'); fread ($f, $size); fclose ($f); } unlink ('dummy'); return true; } function test_disk_w ($loops, $size) { $buffer = str_repeat ('$', $size); for ($i = 0; $i < $loops; ++$i) { $f = fopen ('dummy', 'wb'); fwrite ($f, $buffer); fclose ($f); unlink ('dummy'); } return true; } function test_mem_alloc ($loops, $size) { for ($i = 0; $i < $loops; ++$i) { $buffer = str_repeat ('$', $size); unset ($buffer); } return true; } function test_net_dl ($loops, $size) { for ($i = 0; $i < $loops; ++$i) { $ch = curl_init ('http://test-debit.free.fr/image.iso'); if ($ch === false) return false; curl_setopt ($ch, CURLOPT_RANGE, '0-' . ($size - 1)); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); if (curl_exec ($ch) === false) return false; curl_close ($ch); } return true; } function test_net_ul ($loops, $size) { $buffer = str_repeat ('$', $size); for ($i = 0; $i < $loops; ++$i) { $ch = curl_init ('http://test-debit.free.fr'); if ($ch === false) return false; curl_setopt ($ch, CURLOPT_POST, 1); curl_setopt ($ch, CURLOPT_POSTFIELDS, array ('buffer' => $buffer)); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); if (curl_exec ($ch) === false) return false; curl_close ($ch); } return true; } bench_perform ('Memory : allocate and release 1 MB, 100 times', 'test_mem_alloc', array (100, 1024 * 1024)); bench_perform ('Memory : allocate and release 8 MB, 10 times', 'test_mem_alloc', array (10, 8 * 1024 * 1024)); if (function_exists ('curl_init')) { bench_perform ('Network : download 100 B, 10 times', 'test_net_dl', array (10, 100)); bench_perform ('Network : download 10 KB, 5 times', 'test_net_dl', array (5, 10 * 1024)); bench_perform ('Network : upload 100 B, 10 times', 'test_net_ul', array (10, 100)); bench_perform ('Network : upload 10 KB, 5 times', 'test_net_ul', array (5, 10 * 1024)); } else bench_skip ('Network : cannot perform, cURL not available'); bench_perform ('Processor : empty loop, 10^5 iterations', 'test_proc_loop', array (100000)); bench_perform ('Processor : empty loop, 10^6 iterations', 'test_proc_loop', array (1000000)); bench_perform ('Storage : read 100 B from file, 20 times', 'test_disk_r', array (20, 100)); bench_perform ('Storage : read 10 KB from file, 10 times', 'test_disk_r', array (10, 10 * 1024)); bench_perform ('Storage : read 1 MB from file, 5 times', 'test_disk_r', array (5, 1024 * 1024)); bench_perform ('Storage : write 100 B without flush, 20 times', 'test_disk_w', array (20, 100)); bench_perform ('Storage : write 10 KB without flush, 10 times', 'test_disk_w', array (10, 10 * 1024)); bench_perform ('Storage : write 1 MB without flush, 5 times', 'test_disk_w', array (5, 1024 * 1024)); bench_perform ('Storage : write 100 B with flush, 20 times', 'test_disk_o', array (20, 100)); bench_perform ('Storage : write 10 KB with flush, 10 times', 'test_disk_o', array (10, 10 * 1024)); bench_perform ('Storage : write 1 MB with flush, 5 times', 'test_disk_o', array (5, 1024 * 1024)); ?>
Test name Loop #1 Loop #2 Loop #3 Average
' . htmlentities ($name, ENT_COMPAT, 'utf-8') . '' . round ($diff * 1000) . ' msfailedfailed
' . round ($sum * 1000 / 3) . ' ms
' . htmlentities ($name, ENT_COMPAT, 'utf-8') . ' skipped skipped skipped skipped