benchmarker: Implement setupEach for per-iteration setup
To bypass caches in legacy code where injection doesn't easily work, support a per-iteration setup function, 'setupEach', which runs right before the actual function is timed and called. And use it in benchmarkTitleValue, where I mistakenly assumed that 'setup' did what I wanted. Bug: T201992 Change-Id: I2d01d899bf63576df2833705667f1a16604ab4cc
This commit is contained in:
parent
f5f625a4da
commit
dc9b750b16
2 changed files with 14 additions and 2 deletions
|
|
@ -94,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;
|
||||
|
|
|
|||
|
|
@ -83,14 +83,22 @@ class BenchmarkTitleValue extends Benchmarker {
|
|||
[
|
||||
'function' => [ $this, 'getPrefixedTextTitle' ],
|
||||
],
|
||||
[
|
||||
'parseTitleValue cached' => [
|
||||
'function' => [ $this, 'parseTitleValue' ],
|
||||
'setup' => [ $this, 'randomize' ],
|
||||
],
|
||||
[
|
||||
'parseTitle cached' => [
|
||||
'function' => [ $this, 'parseTitle' ],
|
||||
'setup' => [ $this, 'randomize' ],
|
||||
],
|
||||
'parseTitleValue no cache' => [
|
||||
'function' => [ $this, 'parseTitleValue' ],
|
||||
'setupEach' => [ $this, 'randomize' ],
|
||||
],
|
||||
'parseTitle no cache' => [
|
||||
'function' => [ $this, 'parseTitle' ],
|
||||
'setupEach' => [ $this, 'randomize' ],
|
||||
],
|
||||
] );
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue