Inheritance: extends PhpBench\Benchmark\Metadata\AbstractMetadata
コード例 #1
0
ファイル: Benchmark.php プロジェクト: dantleech/phpbench
 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;
 }
コード例 #2
0
ファイル: Runner.php プロジェクト: lmaslowski/phpbench
 private function runIterations(ExecutorInterface $executor, RunnerContext $context, SubjectMetadata $subject, ParameterSet $parameterSet, \DOMElement $variantEl)
 {
     $iterationCount = $context->getIterations($subject->getIterations());
     $revolutionCount = $context->getRevolutions($subject->getRevs());
     $warmupCount = $context->getWarmup($subject->getWarmUp());
     $executorConfig = $this->executorRegistry->getConfig($context->getExecutor());
     $iterationCollection = new IterationCollection($subject, $parameterSet, $iterationCount, $revolutionCount, $warmupCount, $context->getRetryThreshold($this->retryThreshold));
     $this->logger->iterationsStart($iterationCollection);
     try {
         foreach ($iterationCollection as $iteration) {
             $this->runIteration($executor, $executorConfig, $iteration, $context->getSleep($subject->getSleep()));
         }
     } catch (\Exception $e) {
         $iterationCollection->setException($e);
         $this->logger->iterationsEnd($iterationCollection);
         $this->appendException($variantEl, $e);
         return;
     }
     $iterationCollection->computeStats();
     $this->logger->iterationsEnd($iterationCollection);
     while ($iterationCollection->getRejectCount() > 0) {
         $this->logger->retryStart($iterationCollection->getRejectCount());
         $this->logger->iterationsStart($iterationCollection);
         foreach ($iterationCollection->getRejects() as $reject) {
             $reject->incrementRejectionCount();
             $this->runIteration($executor, $executorConfig, $reject, $context->getSleep($subject->getSleep()));
         }
         $iterationCollection->computeStats();
         $this->logger->iterationsEnd($iterationCollection);
     }
     $stats = $iterationCollection->getStats();
     foreach ($iterationCollection as $iteration) {
         $iterationEl = $variantEl->ownerDocument->createElement('iteration');
         $iterationEl->setAttribute('net-time', $iteration->getResult()->getTime());
         $iterationEl->setAttribute('rev-time', $iteration->getResult()->getTime() / $iteration->getRevolutions());
         $iterationEl->setAttribute('z-value', $iteration->getZValue());
         $iterationEl->setAttribute('memory', $iteration->getResult()->getMemory());
         $iterationEl->setAttribute('deviation', $iteration->getDeviation());
         $iterationEl->setAttribute('rejection-count', $iteration->getRejectionCount());
         $variantEl->appendChild($iterationEl);
     }
     $statsEl = $variantEl->appendElement('stats');
     foreach ($stats as $statName => $statValue) {
         $statsEl->setAttribute($statName, $statValue);
     }
 }
コード例 #3
0
 private function processSubject(SubjectMetadata $subject, $annotation)
 {
     if ($annotation instanceof Annotations\BeforeMethods) {
         $subject->setBeforeMethods($this->resolveValue($annotation, $subject->getBeforeMethods(), $annotation->getMethods()));
     }
     if ($annotation instanceof Annotations\AfterMethods) {
         $subject->setAfterMethods($this->resolveValue($annotation, $subject->getAfterMethods(), $annotation->getMethods()));
     }
     if ($annotation instanceof Annotations\ParamProviders) {
         $subject->setParamProviders($this->resolveValue($annotation, $subject->getParamProviders(), $annotation->getProviders()));
     }
     if ($annotation instanceof Annotations\Iterations) {
         $subject->setIterations($annotation->getIterations());
     }
     if ($annotation instanceof Annotations\Sleep) {
         $subject->setSleep($annotation->getSleep());
     }
     if ($annotation instanceof Annotations\Groups) {
         $subject->setGroups($this->resolveValue($annotation, $subject->getGroups(), $annotation->getGroups()));
     }
     if ($annotation instanceof Annotations\Revs) {
         $subject->setRevs($annotation->getRevs());
     }
     if ($annotation instanceof Annotations\Warmup) {
         $subject->setWarmup($annotation->getRevs());
     }
     if ($annotation instanceof Annotations\Skip) {
         $subject->setSkip(true);
     }
     if ($annotation instanceof Annotations\OutputTimeUnit) {
         $subject->setOutputTimeUnit($annotation->getTimeUnit());
         $subject->setOutputTimePrecision($annotation->getPrecision());
     }
     if ($annotation instanceof Annotations\OutputMode) {
         $subject->setOutputMode($annotation->getMode());
     }
 }
コード例 #4
0
ファイル: Runner.php プロジェクト: stof/phpbench
 private function runIterations(RunnerContext $context, SubjectMetadata $subject, ParameterSet $parameterSet, \DOMElement $variantEl)
 {
     $iterationCount = $context->getIterations($subject->getIterations());
     $revolutionCount = $context->getRevolutions($subject->getRevs());
     $iterationCollection = new IterationCollection($subject, $parameterSet, $context->getRetryThreshold($this->retryThreshold));
     $this->logger->iterationsStart($iterationCollection);
     $iterations = $iterationCollection->spawnIterations($iterationCount, $revolutionCount);
     foreach ($iterations as $iteration) {
         $this->runIteration($iteration, $subject->getSleep());
         $iterationCollection->add($iteration);
     }
     $iterationCollection->computeStats();
     $this->logger->iterationsEnd($iterationCollection);
     while ($iterationCollection->getRejectCount() > 0) {
         $this->logger->retryStart($iterationCollection->getRejectCount());
         $this->logger->iterationsStart($iterationCollection);
         foreach ($iterationCollection->getRejects() as $reject) {
             $reject->incrementRejectionCount();
             $this->runIteration($reject, $context->getSleep($subject->getSleep()));
         }
         $iterationCollection->computeStats();
         $this->logger->iterationsEnd($iterationCollection);
     }
     $stats = $iterationCollection->getStats();
     foreach ($iterationCollection as $iteration) {
         $iterationEl = $variantEl->ownerDocument->createElement('iteration');
         $iterationEl->setAttribute('revs', $iteration->getRevolutions());
         $iterationEl->setAttribute('time-net', $iteration->getResult()->getTime());
         $iterationEl->setAttribute('time', $iteration->getResult()->getTime() / $iteration->getRevolutions());
         $iterationEl->setAttribute('z-value', $iteration->getZValue());
         $iterationEl->setAttribute('memory', $iteration->getResult()->getMemory());
         $iterationEl->setAttribute('deviation', $iteration->getDeviation());
         $iterationEl->setAttribute('rejection-count', $iteration->getRejectionCount());
         $variantEl->appendChild($iterationEl);
     }
     $statsEl = $variantEl->appendElement('stats');
     foreach ($stats as $statName => $statValue) {
         $statsEl->setAttribute($statName, $statValue);
     }
 }
コード例 #5
0
ファイル: RunnerTest.php プロジェクト: dantleech/phpbench
 /**
  * It should set the warmup attribute in the DOM.
  */
 public function testWarmup()
 {
     $subject = new SubjectMetadata($this->benchmark->reveal(), 'name', 0);
     $subject->setWarmup([50]);
     $this->benchmark->getSubjects()->willReturn([$subject]);
     TestUtil::configureBenchmarkMetadata($this->benchmark);
     $test = $this;
     $this->executor->execute(Argument::type('PhpBench\\Benchmark\\Metadata\\SubjectMetadata'), Argument::type('PhpBench\\Model\\Iteration'), $this->executorConfig)->will(function ($args) use($test) {
         $iteration = $args[1];
         $test->assertEquals(50, $iteration->getVariant()->getWarmup());
         $callback = $test->loadIterationResultCallback();
         $callback($args);
     });
     $suite = $this->runner->run(new RunnerContext(__DIR__, []));
     $this->assertInstanceOf('PhpBench\\Model\\Suite', $suite);
     $this->assertNoErrors($suite);
 }
コード例 #6
0
ファイル: Runner.php プロジェクト: dantleech/phpbench
 private function runSubject(ExecutorInterface $executor, RunnerContext $context, Subject $subject, SubjectMetadata $subjectMetadata)
 {
     $parameterSets = $context->getParameterSets($subjectMetadata->getParameterSets());
     $paramsIterator = new CartesianParameterIterator($parameterSets);
     // create the variants.
     foreach ($paramsIterator as $parameterSet) {
         foreach ($subjectMetadata->getIterations() as $nbIterations) {
             foreach ($subjectMetadata->getRevs() as $revolutions) {
                 foreach ($subjectMetadata->getWarmup() as $warmup) {
                     $variant = $subject->createVariant($parameterSet, $revolutions, $warmup);
                     $variant->spawnIterations($nbIterations);
                 }
             }
         }
     }
     // run the variants.
     foreach ($subject->getVariants() as $variant) {
         $this->runVariant($executor, $context, $subjectMetadata, $variant);
     }
     return $subject;
 }
コード例 #7
0
ファイル: BaseExecutor.php プロジェクト: dantleech/phpbench
 /**
  * {@inheritdoc}
  */
 public function execute(SubjectMetadata $subjectMetadata, Iteration $iteration, Config $config)
 {
     $tokens = ['class' => $subjectMetadata->getBenchmark()->getClass(), 'file' => $subjectMetadata->getBenchmark()->getPath(), 'subject' => $subjectMetadata->getName(), 'revolutions' => $iteration->getVariant()->getRevolutions(), 'beforeMethods' => var_export($subjectMetadata->getBeforeMethods(), true), 'afterMethods' => var_export($subjectMetadata->getAfterMethods(), true), 'parameters' => var_export($iteration->getVariant()->getParameterSet()->getArrayCopy(), true), 'warmup' => $iteration->getVariant()->getWarmup() ?: 0];
     $payload = $this->launcher->payload(__DIR__ . '/template/microtime.template', $tokens);
     return $this->launch($payload, $iteration, $config);
 }