private function benchmarkQueryResultSerialization($queryResult)
 {
     if (!$queryResult instanceof QueryResult || $queryResult->getCount() == 0) {
         $this->benchmarkRunner->addMessage("- S: no serialization");
         return;
     }
     $this->benchmarkRunner->getBenchmarker()->clear();
     $memoryBefore = memory_get_peak_usage(false);
     for ($i = 0; $i < $this->repetitionExecutionThreshold; $i++) {
         $start = microtime(true);
         $queryResult->toArray();
         $this->benchmarkRunner->getBenchmarker()->addBenchmarkPoint(microtime(true) - $start);
     }
     $memoryAfter = memory_get_peak_usage(false);
     $memoryDiff = $memoryAfter - $memoryBefore;
     $sum = $this->benchmarkRunner->getBenchmarker()->getSum();
     $mean = $this->benchmarkRunner->getBenchmarker()->getMean();
     $sd = $this->benchmarkRunner->getBenchmarker()->getStandardDeviation();
     $norm = $this->benchmarkRunner->getBenchmarker()->getNormalizedValueBy($queryResult->getCount());
     $this->benchmarkSummaryContainer['(t) serialize'][] = $mean;
     $this->benchmarkSummaryContainer['(n) serialize'][] = $norm;
     $this->benchmarkRunner->addMessage("- S: {$mean} (mean) {$sum} (total) {$sd} (sd) (sec)");
     if ($this->showMemoryUsage) {
         $this->benchmarkRunner->addMessage("+- Memory: {$memoryBefore} (before) {$memoryAfter} (after) {$memoryDiff} (diff)");
     }
 }
 private function createJobQueueBenchmarks($job)
 {
     $jobQueueRunner = $this->runnerFactory->newJobQueueRunner($job);
     $this->benchmarkRunner->getBenchmarker()->clear();
     $memoryBefore = memory_get_peak_usage(false);
     for ($i = 0; $i < $this->repetitionExecutionThreshold; $i++) {
         $start = microtime(true);
         $jobQueueRunner->run();
         $this->benchmarkRunner->getBenchmarker()->addBenchmarkPoint(microtime(true) - $start);
     }
     $memoryAfter = memory_get_peak_usage(false);
     $memoryDiff = $memoryAfter - $memoryBefore;
     $sum = $this->benchmarkRunner->getBenchmarker()->getSum();
     $mean = $this->benchmarkRunner->getBenchmarker()->getMean();
     $norm = $this->benchmarkRunner->getBenchmarker()->getNormalizedValueBy($job === 'SMW\\RefreshJob' ? 1 : $this->pageCopyThreshold);
     $this->benchmarkRunner->addMessage("- {$job}: {$norm} (n) {$mean} (mean) {$sum} (total) (sec)");
     if ($this->showMemoryUsage) {
         $this->benchmarkRunner->addMessage("+- Memory: {$memoryBefore} (before) {$memoryAfter} (after) {$memoryDiff} (diff)");
     }
 }
 private function createMaintenanceBenchmarks($maintenanceScript)
 {
     $maintenanceRunner = $this->runnerFactory->newMaintenanceRunner($maintenanceScript);
     $maintenanceRunner->setQuiet();
     $maintenanceRunner->setOptions(array('f' => $this->fullDelete));
     $this->benchmarkRunner->getBenchmarker()->clear();
     $memoryBefore = memory_get_peak_usage(false);
     for ($i = 0; $i < $this->repetitionExecutionThreshold; $i++) {
         $start = microtime(true);
         $maintenanceRunner->run();
         $this->benchmarkRunner->getBenchmarker()->addBenchmarkPoint(microtime(true) - $start);
     }
     $memoryAfter = memory_get_peak_usage(false);
     $memoryDiff = $memoryAfter - $memoryBefore;
     $sum = $this->benchmarkRunner->getBenchmarker()->getSum();
     $mean = $this->benchmarkRunner->getBenchmarker()->getMean();
     $norm = $this->benchmarkRunner->getBenchmarker()->getNormalizedValueBy($this->pageCopyThreshold);
     $this->benchmarkRunner->addMessage("- {$maintenanceScript}: {$norm} (n) {$mean} (mean) {$sum} (total) (sec)");
     if ($this->showMemoryUsage) {
         $this->benchmarkRunner->addMessage("+- Memory: {$memoryBefore} (before) {$memoryAfter} (after) {$memoryDiff} (diff)");
     }
 }
 /**
  * @test
  */
 public function doBenchmark()
 {
     $dataset = 'ExtendedLoremIpsumDataset.v2.xml';
     $this->benchmarkRunner->addMessage("\n" . '==========================================================================================');
     $this->benchmarkRunner->addMessage('Edit benchmarks (Lorem donec = [[::]]; Lorem enim = #subobject; Lorem sit = #set/template) ');
     $this->benchmarkRunner->addMessage('------------------------------------------------------------------------------------------');
     $this->benchmarkRunner->addMessage("- Dataset: " . $dataset);
     $this->benchmarkRunner->addMessage("- MediaWiki: " . $this->benchmarkRunner->getMediaWikiVersion());
     $this->benchmarkRunner->addMessage("- Store: " . $this->benchmarkRunner->getQueryEngine());
     $this->benchmarkRunner->addMessage("- ShowMemoryUsage: " . var_export($this->showMemoryUsage, true));
     $this->benchmarkRunner->addMessage("- PageEditThreshold: " . $this->pageEditThreshold);
     $this->benchmarkRunner->addMessage('------------------------------------------------------------------------------------------');
     $this->benchmarkRunner->doImportDataset($dataset);
     $this->benchmarkRunner->addMessage('------------------------------------------------------------------------------------------');
     // Standard annotation
     $datasetFixture = Title::newFromText('Lorem donec');
     $this->assertTrue($datasetFixture->exists());
     $this->benchmarkRunner->editPageContent($datasetFixture, $this->pageEditThreshold);
     // Subobject annotation
     $datasetFixture = Title::newFromText('Lorem enim');
     $this->assertTrue($datasetFixture->exists());
     $this->benchmarkRunner->editPageContent($datasetFixture, $this->pageEditThreshold);
     // Template
     $datasetFixture = Title::newFromText('Lorem sit');
     $this->assertTrue($datasetFixture->exists());
     $this->benchmarkRunner->editPageContent($datasetFixture, $this->pageEditThreshold);
     // Queries
     $datasetFixture = Title::newFromText('Lorem tempor');
     $this->assertTrue($datasetFixture->exists());
     $this->benchmarkRunner->editPageContent($datasetFixture, $this->pageEditThreshold);
     $this->benchmarkRunner->addMessage('==========================================================================================');
     $this->benchmarkRunner->printMessages();
 }
 /**
  * @test
  */
 public function doBenchmark()
 {
     $dataset = $this->benchmarkRunner->getDefaultDataset();
     $this->benchmarkRunner->addMessage("\n" . '==========================================================================================');
     $this->benchmarkRunner->addMessage('Dataset import benchmarks');
     $this->benchmarkRunner->addMessage('------------------------------------------------------------------------------------------');
     $this->benchmarkRunner->addMessage("- Dataset: " . $dataset);
     $this->benchmarkRunner->addMessage("- MediaWiki: " . $this->benchmarkRunner->getMediaWikiVersion());
     $this->benchmarkRunner->addMessage("- Store: " . $this->benchmarkRunner->getQueryEngine());
     $this->benchmarkRunner->addMessage("- ShowMemoryUsage: " . var_export($this->showMemoryUsage, true));
     $this->benchmarkRunner->addMessage("- ReuseDatasets: " . var_export($this->reuseDatasets, true));
     $this->benchmarkRunner->addMessage("- PageCopyThreshold: " . $this->pageCopyThreshold);
     $this->benchmarkRunner->addMessage('------------------------------------------------------------------------------------------');
     $this->benchmarkRunner->doImportDataset($dataset);
     $datasetFixture = Title::newFromText('Lorem ipsum');
     $this->assertTrue($datasetFixture->exists());
     $this->benchmarkRunner->copyPageContent($datasetFixture, $this->pageCopyThreshold);
     $this->benchmarkRunner->addMessage('==========================================================================================');
     $this->benchmarkRunner->printMessages();
 }