Merge "Simplify HTMLTitleTextField::validate"
[lhc/web/wiklou.git] / maintenance / benchmarks / Benchmarker.php
index 04aee80..1559ee9 100644 (file)
@@ -53,6 +53,9 @@ abstract class Benchmarker extends Maintenance {
                $this->startBench();
                $count = $this->getOption( 'count', $this->defaultCount );
                $verbose = $this->hasOption( 'verbose' );
+
+               // Normalise
+               $normBenchs = [];
                foreach ( $benchs as $key => $bench ) {
                        // Shortcut for simple functions
                        if ( is_callable( $bench ) ) {
@@ -64,6 +67,25 @@ abstract class Benchmarker extends Maintenance {
                                $bench['args'] = [];
                        }
 
+                       // Name defaults to name of called function
+                       if ( is_string( $key ) ) {
+                               $name = $key;
+                       } else {
+                               if ( is_array( $bench['function'] ) ) {
+                                       $name = get_class( $bench['function'][0] ) . '::' . $bench['function'][1];
+                               } else {
+                                       $name = strval( $bench['function'] );
+                               }
+                               $name = sprintf( "%s(%s)",
+                                       $name,
+                                       implode( ', ', $bench['args'] )
+                               );
+                       }
+
+                       $normBenchs[$name] = $bench;
+               }
+
+               foreach ( $normBenchs as $name => $bench ) {
                        // Optional setup called outside time measure
                        if ( isset( $bench['setup'] ) ) {
                                call_user_func( $bench['setup'] );
@@ -72,6 +94,10 @@ abstract class Benchmarker extends Maintenance {
                        // Run benchmarks
                        $stat = new RunningStat();
                        for ( $i = 0; $i < $count; $i++ ) {
+                               // Setup outside of time measure for each loop
+                               if ( isset( $bench['setupEach'] ) ) {
+                                       $bench['setupEach']();
+                               }
                                $t = microtime( true );
                                call_user_func_array( $bench['function'], $bench['args'] );
                                $t = ( microtime( true ) - $t ) * 1000;
@@ -81,21 +107,6 @@ abstract class Benchmarker extends Maintenance {
                                $stat->addObservation( $t );
                        }
 
-                       // Name defaults to name of called function
-                       if ( is_string( $key ) ) {
-                               $name = $key;
-                       } else {
-                               if ( is_array( $bench['function'] ) ) {
-                                       $name = get_class( $bench['function'][0] ) . '::' . $bench['function'][1];
-                               } else {
-                                       $name = strval( $bench['function'] );
-                               }
-                               $name = sprintf( "%s(%s)",
-                                       $name,
-                                       implode( ', ', $bench['args'] )
-                               );
-                       }
-
                        $this->addResult( [
                                'name' => $name,
                                'count' => $stat->getCount(),