private function runBenchmark(ExecutorInterface $executor, RunnerContext $context, Benchmark $benchmark, BenchmarkMetadata $benchmarkMetadata)
{
if ($benchmarkMetadata->getBeforeClassMethods()) {
$executor->executeMethods($benchmarkMetadata, $benchmarkMetadata->getBeforeClassMethods());
}
// the keys are subject names, convert them to numerical indexes.
$subjectMetadatas = array_filter($benchmarkMetadata->getSubjects(), function ($subjectMetadata) {
if ($subjectMetadata->getSkip()) {
return false;
}
return true;
});
$subjectMetadatas = array_values($subjectMetadatas);
foreach ($subjectMetadatas as $subjectMetadata) {
// override parameters
$subjectMetadata->setIterations($context->getIterations($subjectMetadata->getIterations()));
$subjectMetadata->setRevs($context->getRevolutions($subjectMetadata->getRevs()));
$subjectMetadata->setWarmup($context->getWarmup($subjectMetadata->getWarmUp()));
$subjectMetadata->setSleep($context->getSleep($subjectMetadata->getSleep()));
$subjectMetadata->setRetryThreshold($context->getRetryThreshold($this->retryThreshold));
$benchmark->createSubjectFromMetadata($subjectMetadata);
}
$this->logger->benchmarkStart($benchmark);
foreach ($benchmark->getSubjects() as $index => $subject) {
$subjectMetadata = $subjectMetadatas[$index];
$this->logger->subjectStart($subject);
$this->runSubject($executor, $context, $subject, $subjectMetadata);
$this->logger->subjectEnd($subject);
}
$this->logger->benchmarkEnd($benchmark);
if ($benchmarkMetadata->getAfterClassMethods()) {
$executor->executeMethods($benchmarkMetadata, $benchmarkMetadata->getAfterClassMethods());
}
}