public function createSubjectFromMetadata(SubjectMetadata $metadata) { $subject = new Subject($this, $metadata->getName()); $subject->setGroups($metadata->getGroups()); $subject->setSleep($metadata->getSleep()); $subject->setRetryThreshold($metadata->getRetryThreshold()); $subject->setOutputTimeUnit($metadata->getOutputTimeUnit()); $subject->setOutputTimePrecision($metadata->getOutputTimePrecision()); $subject->setOutputMode($metadata->getOutputMode()); $this->subjects[] = $subject; return $subject; }
private function runSubject(ExecutorInterface $executor, RunnerContext $context, SubjectMetadata $subject, \DOMElement $subjectEl) { $parameterSets = $context->getParameterSets($subject->getParameterSets()); $paramsIterator = new CartesianParameterIterator($parameterSets); foreach ($paramsIterator as $parameterSet) { $variantEl = $subjectEl->ownerDocument->createElement('variant'); $variantEl->setAttribute('sleep', $context->getSleep($subject->getSleep())); $variantEl->setAttribute('output-time-unit', $subject->getOutputTimeUnit() ?: TimeUnit::MICROSECONDS); $variantEl->setAttribute('output-mode', $subject->getOutputMode() ?: TimeUnit::MODE_TIME); $variantEl->setAttribute('revs', $context->getRevolutions($subject->getRevs())); $variantEl->setAttribute('warmup', $context->getWarmup($subject->getWarmup())); foreach ($parameterSet as $name => $value) { $parameterEl = $this->createParameter($subjectEl, $name, $value); $variantEl->appendChild($parameterEl); } $subjectEl->appendChild($variantEl); $this->runIterations($executor, $context, $subject, $parameterSet, $variantEl); } }