From 8341b018c8401c9598e123069e5e8dc1f3d76fd2 Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Tue, 26 Oct 2010 17:21:35 +0000 Subject: [PATCH] Follow up r75429 : benchmark for wfIsWindows(); Also implements a basic class to build new benchmarks. --- maintenance/benchmarks/Benchmarker.php | 72 ++++++++++++++++++++ maintenance/benchmarks/bench_wfIsWindows.php | 46 +++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 maintenance/benchmarks/Benchmarker.php create mode 100644 maintenance/benchmarks/bench_wfIsWindows.php 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 ); -- 2.20.1