MediaWiki  master
benchmarkLruHash.php
Go to the documentation of this file.
1 <?php
22 require_once __DIR__ . '/Benchmarker.php';
23 
30  protected $defaultCount = 1000;
31 
32  public function __construct() {
33  parent::__construct();
34  $this->addDescription( 'Benchmarks HashBagOStuff and MapCacheLRU.' );
35  $this->addOption( 'method', 'One of "construct" or "set". Default: [All]', false, true );
36  }
37 
38  public function execute() {
39  $exampleKeys = [];
40  $max = 100;
41  $count = 500;
42  while ( $count-- ) {
43  $exampleKeys[] = wfRandomString();
44  }
45  // 1000 keys (1...500, 500...1)
46  $keys = array_merge( $exampleKeys, array_reverse( $exampleKeys ) );
47 
48  $method = $this->getOption( 'method' );
49  $benches = [];
50 
51  if ( !$method || $method === 'construct' ) {
52  $benches['HashBagOStuff::__construct'] = [
53  'function' => function () use ( $max ) {
54  $obj = new HashBagOStuff( [ 'maxKeys' => $max ] );
55  },
56  ];
57  $benches['MapCacheLRU::__construct'] = [
58  'function' => function () use ( $max ) {
59  $obj = new MapCacheLRU( $max );
60  },
61  ];
62  }
63 
64  if ( !$method || $method === 'set' ) {
65  // For the set bechmark, do object creation in setup (not measured)
66  $hObj = null;
67  $benches['HashBagOStuff::set'] = [
68  'setup' => function () use ( &$hObj, $max ) {
69  $hObj = new HashBagOStuff( [ 'maxKeys' => $max ] );
70  },
71  'function' => function () use ( &$hObj, &$keys ) {
72  foreach ( $keys as $i => $key ) {
73  $hObj->set( $key, $i );
74  }
75  }
76  ];
77  $mObj = null;
78  $benches['MapCacheLRU::set'] = [
79  'setup' => function () use ( &$mObj, $max ) {
80  $mObj = new MapCacheLRU( $max );
81  },
82  'function' => function () use ( &$mObj, &$keys ) {
83  foreach ( $keys as $i => $key ) {
84  $mObj->set( $key, $i );
85  }
86  }
87  ];
88  }
89 
90  $this->bench( $benches );
91  }
92 }
93 
94 $maintClass = BenchmarkLruHash::class;
95 require_once RUN_MAINTENANCE_IF_MAIN;
Maintenance script that benchmarks HashBagOStuff and MapCacheLRU.
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:39
getOption( $name, $default=null)
Get an option, or return the default.
bench(array $benchs)
Definition: Benchmarker.php:50
wfRandomString( $length=32)
Get a random string containing a number of pseudo-random hex characters.
$maintClass
addDescription( $text)
Set the description text.
Base class for benchmark scripts.
Definition: Benchmarker.php:40
addOption( $name, $description, $required=false, $withArg=false, $shortName=false, $multiOccurrence=false)
Add a parameter to the script.