PhpBench\Serializer\XmlEncoder::processVariant PHP Method

processVariant() private method

private processVariant ( Subject $subject, Variant $variant, DOMElement $subjectEl )
$subject PhpBench\Model\Subject
$variant PhpBench\Model\Variant
$subjectEl DOMElement
    private function processVariant(Subject $subject, Variant $variant, \DOMElement $subjectEl)
    {
        $variantEl = $subjectEl->appendElement('variant');
        // TODO: These attributes should be on the subject, see
        // https://github.com/phpbench/phpbench/issues/307
        $variantEl->setAttribute('sleep', $subject->getSleep());
        $variantEl->setAttribute('output-time-unit', $subject->getOutputTimeUnit() ?: TimeUnit::MICROSECONDS);
        $variantEl->setAttribute('output-time-precision', $subject->getOutputTimePrecision());
        $variantEl->setAttribute('output-mode', $subject->getOutputMode() ?: TimeUnit::MODE_TIME);
        $variantEl->setAttribute('revs', $variant->getRevolutions());
        $variantEl->setAttribute('warmup', $variant->getWarmup());
        $variantEl->setAttribute('retry-threshold', $subject->getRetryThreshold());
        foreach ($variant->getParameterSet() as $name => $value) {
            $this->createParameter($variantEl, $name, $value);
        }
        if ($variant->hasErrorStack()) {
            $errorsEl = $variantEl->appendElement('errors');
            foreach ($variant->getErrorStack() as $error) {
                $errorEl = $errorsEl->appendElement('error', $error->getMessage());
                $errorEl->setAttribute('exception-class', $error->getClass());
                $errorEl->setAttribute('code', $error->getCode());
                $errorEl->setAttribute('file', $error->getFile());
                $errorEl->setAttribute('line', $error->getLine());
            }
            return;
        }
        $stats = $variant->getStats();
        $stats = iterator_to_array($stats);
        $resultClasses = [];
        // ensure same order (for testing)
        ksort($stats);
        foreach ($variant as $iteration) {
            $iterationEl = $variantEl->appendElement('iteration');
            foreach ($iteration->getResults() as $result) {
                // we need to store the class FQNs of the results for deserialization later.
                if (!isset($resultClasses[$result->getKey()])) {
                    $resultClasses[$result->getKey()] = get_class($result);
                }
                $prefix = $result->getKey();
                $metrics = $result->getMetrics();
                foreach ($metrics as $key => $value) {
                    $iterationEl->setAttribute(sprintf('%s-%s', $prefix, str_replace('_', '-', $key)), $value);
                }
            }
        }
        $statsEl = $variantEl->appendElement('stats');
        foreach ($stats as $statName => $statValue) {
            $statsEl->setAttribute($statName, $statValue);
        }
        foreach ($resultClasses as $resultKey => $classFqn) {
            if ($subjectEl->queryOne('ancestor::suite/result[@key="' . $resultKey . '"]')) {
                continue;
            }
            $resultEl = $subjectEl->queryOne('ancestor::suite')->appendElement('result');
            $resultEl->setAttribute('key', $resultKey);
            $resultEl->setAttribute('class', $classFqn);
        }
    }