diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /Zend/micro_bench.php | |
download | php2-c4dd7a1a684490673e25aaf4fabec5df138854c4.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'Zend/micro_bench.php')
-rw-r--r-- | Zend/micro_bench.php | 358 |
1 files changed, 358 insertions, 0 deletions
diff --git a/Zend/micro_bench.php b/Zend/micro_bench.php new file mode 100644 index 0000000..7052588 --- /dev/null +++ b/Zend/micro_bench.php @@ -0,0 +1,358 @@ +<?php + +function hallo() { +} + +function simpleucall($n) { + for ($i = 0; $i < $n; $i++) + hallo(); +} + +function simpleudcall($n) { + for ($i = 0; $i < $n; $i++) + hallo2(); +} + +function hallo2() { +} + +function simpleicall($n) { + for ($i = 0; $i < $n; $i++) + func_num_args(); +} + +class Foo { + static $a = 0; + public $b = 0; + const TEST = 0; + + static function read_static($n) { + for ($i = 0; $i < $n; ++$i) { + $x = self::$a; + } + } + + static function write_static($n) { + for ($i = 0; $i < $n; ++$i) { + self::$a = 0; + } + } + + static function isset_static($n) { + for ($i = 0; $i < $n; ++$i) { + $x = isset(self::$a); + } + } + + static function empty_static($n) { + for ($i = 0; $i < $n; ++$i) { + $x = empty(self::$a); + } + } + + static function f() { + } + + static function call_static($n) { + for ($i = 0; $i < $n; ++$i) { + self::f(); + } + } + + function read_prop($n) { + for ($i = 0; $i < $n; ++$i) { + $x = $this->b; + } + } + + function write_prop($n) { + for ($i = 0; $i < $n; ++$i) { + $this->b = 0; + } + } + + function assign_add_prop($n) { + for ($i = 0; $i < $n; ++$i) { + $this->b += 2; + } + } + + function pre_inc_prop($n) { + for ($i = 0; $i < $n; ++$i) { + ++$this->b; + } + } + + function pre_dec_prop($n) { + for ($i = 0; $i < $n; ++$i) { + --$this->b; + } + } + + function post_inc_prop($n) { + for ($i = 0; $i < $n; ++$i) { + $this->b++; + } + } + + function post_dec_prop($n) { + for ($i = 0; $i < $n; ++$i) { + $this->b--; + } + } + + function isset_prop($n) { + for ($i = 0; $i < $n; ++$i) { + $x = isset($this->b); + } + } + + function empty_prop($n) { + for ($i = 0; $i < $n; ++$i) { + $x = empty($this->b); + } + } + + function g() { + } + + function call($n) { + for ($i = 0; $i < $n; ++$i) { + $this->g(); + } + } + + function read_const($n) { + for ($i = 0; $i < $n; ++$i) { + $x = $this::TEST; + } + } + +} + +function read_static($n) { + for ($i = 0; $i < $n; ++$i) { + $x = Foo::$a; + } +} + +function write_static($n) { + for ($i = 0; $i < $n; ++$i) { + Foo::$a = 0; + } +} + +function isset_static($n) { + for ($i = 0; $i < $n; ++$i) { + $x = isset(Foo::$a); + } +} + +function empty_static($n) { + for ($i = 0; $i < $n; ++$i) { + $x = empty(Foo::$a); + } +} + +function call_static($n) { + for ($i = 0; $i < $n; ++$i) { + Foo::f(); + } +} + +function create_object($n) { + for ($i = 0; $i < $n; ++$i) { + $x = new Foo(); + } +} + +define('TEST', null); + +function read_const($n) { + for ($i = 0; $i < $n; ++$i) { + $x = TEST; + } +} + +function read_auto_global($n) { + for ($i = 0; $i < $n; ++$i) { + $x = $_GET; + } +} + +$g_var = 0; + +function read_global_var($n) { + for ($i = 0; $i < $n; ++$i) { + $x = $GLOBALS['g_var']; + } +} + +function read_hash($n) { + $hash = array('test' => 0); + for ($i = 0; $i < $n; ++$i) { + $x = $hash['test']; + } +} + +function read_str_offset($n) { + $str = "test"; + for ($i = 0; $i < $n; ++$i) { + $x = $str[1]; + } +} + +function issetor($n) { + $val = array(0,1,2,3,4,5,6,7,8,9); + for ($i = 0; $i < $n; ++$i) { + $x = $val ?: null; + } +} + +function issetor2($n) { + $f = false; $j = 0; + for ($i = 0; $i < $n; ++$i) { + $x = $f ?: $j + 1; + } +} + +function ternary($n) { + $val = array(0,1,2,3,4,5,6,7,8,9); + $f = false; + for ($i = 0; $i < $n; ++$i) { + $x = $f ? null : $val; + } +} + +function ternary2($n) { + $f = false; $j = 0; + for ($i = 0; $i < $n; ++$i) { + $x = $f ? $f : $j + 1; + } +} + +/*****/ + +function empty_loop($n) { + for ($i = 0; $i < $n; ++$i) { + } +} + +function getmicrotime() +{ + $t = gettimeofday(); + return ($t['sec'] + $t['usec'] / 1000000); +} + +function start_test() +{ + ob_start(); + return getmicrotime(); +} + +function end_test($start, $name, $overhead = null) +{ + global $total; + global $last_time; + $end = getmicrotime(); + ob_end_clean(); + $last_time = $end-$start; + $total += $last_time; + $num = number_format($last_time,3); + $pad = str_repeat(" ", 24-strlen($name)-strlen($num)); + if (is_null($overhead)) { + echo $name.$pad.$num."\n"; + } else { + $num2 = number_format($last_time - $overhead,3); + echo $name.$pad.$num." ".$num2."\n"; + } + ob_start(); + return getmicrotime(); +} + +function total() +{ + global $total; + $pad = str_repeat("-", 24); + echo $pad."\n"; + $num = number_format($total,3); + $pad = str_repeat(" ", 24-strlen("Total")-strlen($num)); + echo "Total".$pad.$num."\n"; +} + +const N = 5000000; + +$t0 = $t = start_test(); +empty_loop(N); +$t = end_test($t, 'empty_loop'); +$overhead = $last_time; +simpleucall(N); +$t = end_test($t, 'func()', $overhead); +simpleudcall(N); +$t = end_test($t, 'undef_func()', $overhead); +simpleicall(N); +$t = end_test($t, 'int_func()', $overhead); +Foo::read_static(N); +$t = end_test($t, '$x = self::$x', $overhead); +Foo::write_static(N); +$t = end_test($t, 'self::$x = 0', $overhead); +Foo::isset_static(N); +$t = end_test($t, 'isset(self::$x)', $overhead); +Foo::empty_static(N); +$t = end_test($t, 'empty(self::$x)', $overhead); +read_static(N); +$t = end_test($t, '$x = Foo::$x', $overhead); +write_static(N); +$t = end_test($t, 'Foo::$x = 0', $overhead); +isset_static(N); +$t = end_test($t, 'isset(Foo::$x)', $overhead); +empty_static(N); +$t = end_test($t, 'empty(Foo::$x)', $overhead); +Foo::call_static(N); +$t = end_test($t, 'self::f()', $overhead); +call_static(N); +$t = end_test($t, 'Foo::f()', $overhead); +$x = new Foo(); +$x->read_prop(N); +$t = end_test($t, '$x = $this->x', $overhead); +$x->write_prop(N); +$t = end_test($t, '$this->x = 0', $overhead); +$x->assign_add_prop(N); +$t = end_test($t, '$this->x += 2', $overhead); +$x->pre_inc_prop(N); +$t = end_test($t, '++$this->x', $overhead); +$x->pre_dec_prop(N); +$t = end_test($t, '--$this->x', $overhead); +$x->post_inc_prop(N); +$t = end_test($t, '$this->x++', $overhead); +$x->post_dec_prop(N); +$t = end_test($t, '$this->x--', $overhead); +$x->isset_prop(N); +$t = end_test($t, 'isset($this->x)', $overhead); +$x->empty_prop(N); +$t = end_test($t, 'empty($this->x)', $overhead); +$x->call(N); +$t = end_test($t, '$this->f()', $overhead); +$x->read_const(N); +$t = end_test($t, '$x = Foo::TEST', $overhead); +create_object(N); +$t = end_test($t, 'new Foo()', $overhead); +read_const(N); +$t = end_test($t, '$x = TEST', $overhead); +read_auto_global(N); +$t = end_test($t, '$x = $_GET', $overhead); +read_global_var(N); +$t = end_test($t, '$x = $GLOBALS[\'v\']', $overhead); +read_hash(N); +$t = end_test($t, '$x = $hash[\'v\']', $overhead); +read_str_offset(N); +$t = end_test($t, '$x = $str[0]', $overhead); +issetor(N); +$t = end_test($t, '$x = $a ?: null', $overhead); +issetor2(N); +$t = end_test($t, '$x = $f ?: tmp', $overhead); +ternary(N); +$t = end_test($t, '$x = $f ? $f : $a', $overhead); +ternary2(N); +$t = end_test($t, '$x = $f ? $f : tmp', $overhead); +total($t0, "Total"); |