1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehleruse Sabre\Event\EventEmitter; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerinclude __DIR__ . '/../../vendor/autoload.php'; 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehlerabstract class BenchMark { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler protected $startTime; 10*a1a3b679SAndreas Boehler protected $iterations = 10000; 11*a1a3b679SAndreas Boehler protected $totalTime; 12*a1a3b679SAndreas Boehler 13*a1a3b679SAndreas Boehler function setUp() { 14*a1a3b679SAndreas Boehler 15*a1a3b679SAndreas Boehler } 16*a1a3b679SAndreas Boehler 17*a1a3b679SAndreas Boehler abstract function test(); 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler function go() { 20*a1a3b679SAndreas Boehler 21*a1a3b679SAndreas Boehler $this->setUp(); 22*a1a3b679SAndreas Boehler $this->startTime = microtime(true); 23*a1a3b679SAndreas Boehler $this->test(); 24*a1a3b679SAndreas Boehler $this->totalTime = microtime(true) - $this->startTime; 25*a1a3b679SAndreas Boehler return $this->totalTime; 26*a1a3b679SAndreas Boehler 27*a1a3b679SAndreas Boehler } 28*a1a3b679SAndreas Boehler 29*a1a3b679SAndreas Boehler} 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehlerclass OneCallBack extends BenchMark { 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler protected $emitter; 34*a1a3b679SAndreas Boehler protected $iterations = 100000; 35*a1a3b679SAndreas Boehler 36*a1a3b679SAndreas Boehler function setUp() { 37*a1a3b679SAndreas Boehler 38*a1a3b679SAndreas Boehler $this->emitter = new EventEmitter(); 39*a1a3b679SAndreas Boehler $this->emitter->on('foo', function() { 40*a1a3b679SAndreas Boehler // NOOP 41*a1a3b679SAndreas Boehler }); 42*a1a3b679SAndreas Boehler 43*a1a3b679SAndreas Boehler } 44*a1a3b679SAndreas Boehler 45*a1a3b679SAndreas Boehler function test() { 46*a1a3b679SAndreas Boehler 47*a1a3b679SAndreas Boehler for ($i = 0;$i < $this->iterations;$i++) { 48*a1a3b679SAndreas Boehler $this->emitter->emit('foo', []); 49*a1a3b679SAndreas Boehler } 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler } 52*a1a3b679SAndreas Boehler 53*a1a3b679SAndreas Boehler} 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehlerclass ManyCallBacks extends BenchMark { 56*a1a3b679SAndreas Boehler 57*a1a3b679SAndreas Boehler protected $emitter; 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler function setUp() { 60*a1a3b679SAndreas Boehler 61*a1a3b679SAndreas Boehler $this->emitter = new EventEmitter(); 62*a1a3b679SAndreas Boehler for ($i = 0;$i < 100;$i++) { 63*a1a3b679SAndreas Boehler $this->emitter->on('foo', function() { 64*a1a3b679SAndreas Boehler // NOOP 65*a1a3b679SAndreas Boehler }); 66*a1a3b679SAndreas Boehler } 67*a1a3b679SAndreas Boehler 68*a1a3b679SAndreas Boehler } 69*a1a3b679SAndreas Boehler 70*a1a3b679SAndreas Boehler function test() { 71*a1a3b679SAndreas Boehler 72*a1a3b679SAndreas Boehler for ($i = 0;$i < $this->iterations;$i++) { 73*a1a3b679SAndreas Boehler $this->emitter->emit('foo', []); 74*a1a3b679SAndreas Boehler } 75*a1a3b679SAndreas Boehler 76*a1a3b679SAndreas Boehler } 77*a1a3b679SAndreas Boehler 78*a1a3b679SAndreas Boehler} 79*a1a3b679SAndreas Boehler 80*a1a3b679SAndreas Boehlerclass ManyPrioritizedCallBacks extends BenchMark { 81*a1a3b679SAndreas Boehler 82*a1a3b679SAndreas Boehler protected $emitter; 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler function setUp() { 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler $this->emitter = new EventEmitter(); 87*a1a3b679SAndreas Boehler for ($i = 0;$i < 100;$i++) { 88*a1a3b679SAndreas Boehler $this->emitter->on('foo', function() { 89*a1a3b679SAndreas Boehler }, 1000 - $i); 90*a1a3b679SAndreas Boehler } 91*a1a3b679SAndreas Boehler 92*a1a3b679SAndreas Boehler } 93*a1a3b679SAndreas Boehler 94*a1a3b679SAndreas Boehler function test() { 95*a1a3b679SAndreas Boehler 96*a1a3b679SAndreas Boehler for ($i = 0;$i < $this->iterations;$i++) { 97*a1a3b679SAndreas Boehler $this->emitter->emit('foo', []); 98*a1a3b679SAndreas Boehler } 99*a1a3b679SAndreas Boehler 100*a1a3b679SAndreas Boehler } 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler} 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler$tests = [ 105*a1a3b679SAndreas Boehler 'OneCallBack', 106*a1a3b679SAndreas Boehler 'ManyCallBacks', 107*a1a3b679SAndreas Boehler 'ManyPrioritizedCallBacks', 108*a1a3b679SAndreas Boehler]; 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehlerforeach ($tests as $test) { 111*a1a3b679SAndreas Boehler 112*a1a3b679SAndreas Boehler $testObj = new $test(); 113*a1a3b679SAndreas Boehler $result = $testObj->go(); 114*a1a3b679SAndreas Boehler echo $test . " " . $result . "\n"; 115*a1a3b679SAndreas Boehler 116*a1a3b679SAndreas Boehler} 117