From: Antoine Musso Date: Tue, 26 Oct 2010 17:21:35 +0000 (+0000) Subject: Follow up r75429 : benchmark for wfIsWindows(); X-Git-Tag: 1.31.0-rc.0~34293 X-Git-Url: http://git.cyclocoop.org/%7B%7B%20url_for%28%27admin_vote_add%27%29%20%7D%7D?a=commitdiff_plain;h=8341b018c8401c9598e123069e5e8dc1f3d76fd2;p=lhc%2Fweb%2Fwiklou.git Follow up r75429 : benchmark for wfIsWindows(); Also implements a basic class to build new benchmarks. --- diff --git a/maintenance/benchmarks/Benchmarker.php b/maintenance/benchmarks/Benchmarker.php new file mode 100644 index 0000000000..9149ea2d09 --- /dev/null +++ b/maintenance/benchmarks/Benchmarker.php @@ -0,0 +1,72 @@ +addOption( 'count', "How many time to run a benchmark", false, true ); + } + + public function bench( array $benchs ) { + $bench_number = 0; + $count = $this->getOption( 'count' ); + + foreach( $benchs as $bench ) { + // handle empty args + if(!array_key_exists( 'args', $bench )) { + $bench['args'] = array(); + } + + $bench_number++; + $start = wfTime(); + for( $i=0; $i<$count; $i++ ) { + call_user_func_array( $bench['function'], $bench['args'] ); + } + $delta = wfTime() - $start; + + // function passed as a callback + if( is_array( $bench['function'] ) ) { + $ret = get_class( $bench['function'][0] ). '->' . $bench['function'][1]; + $bench['function'] = $ret; + } + + $this->results[$bench_number] = array( + 'function' => $bench['function'], + 'arguments' => $bench['args'], + 'count' => $count, + 'delta' => $delta, + 'average' => $delta / $count, + ); + } + } + + public function getFormattedResults( ) { + $ret = ''; + foreach( $this->results as $res ) { + // show function with args + $ret .= sprintf( "%s times: function %s(%s) :\n", + $res['count'], + $res['function'], + join( ', ', $res['arguments'] ) + ); + $ret .= sprintf( " %6.2fms (%6.2fms each)\n", + $res['delta'] * 1000, + $res['average'] * 1000 + ); + } + return $ret; + } +} diff --git a/maintenance/benchmarks/bench_wfIsWindows.php b/maintenance/benchmarks/bench_wfIsWindows.php new file mode 100644 index 0000000000..c7292066d5 --- /dev/null +++ b/maintenance/benchmarks/bench_wfIsWindows.php @@ -0,0 +1,46 @@ +bench( array( + array( 'function' => array( $this, 'wfIsWindows' ) ), + array( 'function' => array( $this, 'wfIsWindowsCached' ) ), + )); + print $this->getFormattedResults(); + } + + static function is_win() { + return substr( php_uname(), 0, 7 == 'Windows' ); + } + + // bench function 1 + function wfIsWindows() { + if( self::is_win() ) { + return true; + } else { + return false; + } + } + + // bench function 2 + function wfIsWindowsCached() { + static $isWindows = null; + if( $isWindows == null ) { + $isWindows = self::is_win(); + } + return $isWindows; + } +} + +$maintClass = 'bench_wfIsWindows'; +require_once( DO_MAINTENANCE );