xref: /plugin/davcal/vendor/sabre/event/tests/benchmark/bench.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
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