From 3136c2379597b0f3da54c2dfe5be92ca373e25e9 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Wed, 9 Apr 2014 02:37:37 +0200 Subject: [PATCH] Added small benchmark --- src/pocketmine/math/AxisAlignedBB.php | 5 +- src/tests/Benchmark.php | 142 ++++++++++++++++++++++++++ 2 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 src/tests/Benchmark.php diff --git a/src/pocketmine/math/AxisAlignedBB.php b/src/pocketmine/math/AxisAlignedBB.php index b16120653..fe44dba01 100644 --- a/src/pocketmine/math/AxisAlignedBB.php +++ b/src/pocketmine/math/AxisAlignedBB.php @@ -21,7 +21,10 @@ namespace pocketmine\math; - +/** + * WARNING: This class is available on the PocketMine-MP Zephir project. + * If this class is modified, remember to modify the PHP C extension. + */ class AxisAlignedBB{ public $minX; public $minY; diff --git a/src/tests/Benchmark.php b/src/tests/Benchmark.php new file mode 100644 index 000000000..1d38bc5fc --- /dev/null +++ b/src/tests/Benchmark.php @@ -0,0 +1,142 @@ +add("pocketmine", array( + \pocketmine\PATH . "src" +)); +$autoloader->register(true); +@define("ENDIANNESS", (pack("d", 1) === "\77\360\0\0\0\0\0\0" ? Binary::BIG_ENDIAN : Binary::LITTLE_ENDIAN)); +@define("INT32_MASK", is_int(0xffffffff) ? 0xffffffff : -1); + +echo "=== PocketMine Benchmark suite ===\n"; +if(extension_loaded("pocketmine")){ + echo "[*] PocketMine native PHP extension v".phpversion("pocketmine")." loaded.\n"; +} + +$iterations = 200000; +$score = 0; +$tests = 0; + +echo "[*] Using $iterations iterations\n"; + + +$expect = 0.3; +echo "[*] Measuring Random integer generation [$expect]... "; +$random = new Random(1337); +$start = microtime(true); +for($i = $iterations; $i > 0; --$i){ + $random->nextSignedInt(); +} +$taken = microtime(true) - $start; +$score += $taken / $expect; +++$tests; +echo round($taken, 6)."s\n"; + + +$expect = 1.2; +echo "[*] Measuring Simplex noise (8 octaves) [$expect]... "; +$noise = new Simplex(new Random(0), 8, 0.5, 8); +$start = microtime(true); +for($i = $iterations; $i > 0; --$i){ + $noise->getNoise2D($i, $i ^ 0xdead); +} +$taken = microtime(true) - $start; +$score += $taken / $expect; +++$tests; +echo round($taken, 6)."s\n"; + + +$expect = 3.5; +echo "[*] Measuring Perlin noise (8 octaves) [$expect]... "; +$noise = new Perlin(new Random(0), 8, 0.5, 8); +$start = microtime(true); +for($i = $iterations; $i > 0; --$i){ + $noise->getNoise2D($i, $i ^ 0xdead); +} +$taken = microtime(true) - $start; +$score += $taken / $expect; +++$tests; +echo round($taken, 6)."s\n"; + + +$expect = 0.8; +echo "[*] Measuring Vector3 creation & distance [$expect]... "; +$vector = new Vector3(1337, 31337, 0xff); +$start = microtime(true); +for($i = $iterations; $i > 0; --$i){ + $vector->distance(new Vector3(600, 300, 600)); +} +$taken = microtime(true) - $start; +$score += $taken / $expect; +++$tests; +echo round($taken, 6)."s\n"; + + +$expect = 5.5; +echo "[*] Measuring file operations [$expect]... "; +$start = microtime(true); +for($i = $iterations; $i > 0; --$i){ + @file_exists("./$i.example"); +} +$taken = microtime(true) - $start; +$score += $taken / $expect; +++$tests; +echo round($taken, 6)."s\n"; + + +$expect = 12.1; +echo "[*] Simple Packet decoding [$expect]... "; +$packet = hex2bin("8400000000000815"); +$start = microtime(true); +for($i = $iterations; $i > 0; --$i){ + $pk = new Packet(ord($packet{0})); + $pk->buffer =& $packet; + $pk->decode(); +} + +$taken = microtime(true) - $start; +$score += $taken / $expect; +++$tests; +echo round($taken, 6)."s\n"; + + +echo "\n\n[*] Total score (~1000 good; less is better): ".round(($score / $tests) * 1000, 3)."\n"; + +