summaryrefslogtreecommitdiff
path: root/maintenance/benchmarks
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2011-06-22 11:28:20 +0200
committerPierre Schmitz <pierre@archlinux.de>2011-06-22 11:28:20 +0200
commit9db190c7e736ec8d063187d4241b59feaf7dc2d1 (patch)
tree46d1a0dee7febef5c2d57a9f7b972be16a163b3d /maintenance/benchmarks
parent78677c7bbdcc9739f6c10c75935898a20e1acd9e (diff)
update to MediaWiki 1.17.0
Diffstat (limited to 'maintenance/benchmarks')
-rw-r--r--maintenance/benchmarks/Benchmarker.php72
-rw-r--r--maintenance/benchmarks/bench_HTTP_HTTPS.php38
-rw-r--r--maintenance/benchmarks/bench_wfIsWindows.php42
3 files changed, 152 insertions, 0 deletions
diff --git a/maintenance/benchmarks/Benchmarker.php b/maintenance/benchmarks/Benchmarker.php
new file mode 100644
index 00000000..66789ea4
--- /dev/null
+++ b/maintenance/benchmarks/Benchmarker.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Create a doxygen subgroup of Maintenance for benchmarks
+ * @defgroup Benchmark Benchmark
+ * @ingroup Maintenance
+ */
+
+/**
+ * TODO: report PHP version, OS ..
+ * @file
+ * @ingroup Benchmark
+ */
+
+require_once( dirname( __FILE__ ) . '/../Maintenance.php' );
+abstract class Benchmarker extends Maintenance {
+ private $results;
+
+ public function __construct() {
+ parent::__construct();
+ $this->addOption( 'count', "How many time to run a benchmark", false, true );
+ }
+
+ public function bench( array $benchs ) {
+ $bench_number = 0;
+ $count = $this->getOption( 'count', 100 );
+
+ 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_HTTP_HTTPS.php b/maintenance/benchmarks/bench_HTTP_HTTPS.php
new file mode 100644
index 00000000..13d15fce
--- /dev/null
+++ b/maintenance/benchmarks/bench_HTTP_HTTPS.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * This come from r75429 message
+ * @author Platonides
+ */
+
+require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+class bench_HTTP_HTTPS extends Benchmarker {
+
+ public function __construct() {
+ parent::__construct();
+ }
+
+ public function execute() {
+ $this->bench( array(
+ array( 'function' => array( $this, 'getHTTP' ) ),
+ array( 'function' => array( $this, 'getHTTPS' ) ),
+ ));
+ print $this->getFormattedResults();
+ }
+
+ static function doRequest( $proto ) {
+ Http::get( "$proto://localhost/" );
+ }
+
+ // bench function 1
+ function getHTTP() {
+ $this->doRequest( 'http' );
+ }
+
+ // bench function 2
+ function getHTTPS() {
+ $this->doRequest( 'https' );
+ }
+}
+
+$maintClass = 'bench_HTTP_HTTPS';
+require_once( RUN_MAINTENANCE_IF_MAIN );
diff --git a/maintenance/benchmarks/bench_wfIsWindows.php b/maintenance/benchmarks/bench_wfIsWindows.php
new file mode 100644
index 00000000..2f759e07
--- /dev/null
+++ b/maintenance/benchmarks/bench_wfIsWindows.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * This come from r75429 message
+ * @author Platonides
+ */
+
+require_once( dirname( __FILE__ ) . '/Benchmarker.php' );
+class bench_wfIsWindows extends Benchmarker {
+
+ public function __construct() {
+ parent::__construct();
+ }
+
+ public function execute() {
+ $this->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() {
+ return self::is_win();
+ }
+
+ // bench function 2
+ function wfIsWindowsCached() {
+ static $isWindows = null;
+ if( $isWindows == null ) {
+ $isWindows = self::is_win();
+ }
+ return $isWindows;
+ }
+}
+
+$maintClass = 'bench_wfIsWindows';
+require_once( RUN_MAINTENANCE_IF_MAIN );