PhpBench\Extensions\XDebug\Executor\TraceExecutor::launch PHP Метод

launch() публичный Метод

public launch ( Payload $payload, Iteration $iteration, Config $config )
$payload PhpBench\Benchmark\Remote\Payload
$iteration PhpBench\Model\Iteration
$config PhpBench\Registry\Config
    public function launch(Payload $payload, Iteration $iteration, Config $config)
    {
        $name = XDebugUtil::filenameFromIteration($iteration);
        $dir = $config['output_dir'];
        $phpConfig = ['xdebug.trace_output_name' => $name, 'xdebug.trace_output_dir' => $dir, 'xdebug.trace_format' => '1', 'xdebug.auto_trace' => '1', 'xdebug.coverage_enable' => '0', 'xdebug.collect_params' => '3'];
        $payload->setPhpConfig($phpConfig);
        $path = $dir . DIRECTORY_SEPARATOR . $name . '.xt';
        // if the file exists, remove it. XDebug might not be installed
        // on the PHP binary and the file may not be generated. We should
        // fail in such a case and not use the file from a previous run.
        if ($this->filesystem->exists($path)) {
            $this->filesystem->remove($path);
        }
        $result = $payload->launch();
        if (false === $this->filesystem->exists($path)) {
            throw new \RuntimeException(sprintf('Trace file at "%s" was not generated.', $path));
        }
        $dom = $this->converter->convert($path);
        $subject = $iteration->getVariant()->getSubject();
        $class = $subject->getBenchmark()->getClass();
        // remove leading slash from class name for matching
        // the class in the trace.
        if (substr($class, 0, 1) == '\\') {
            $class = substr($class, 1);
        }
        // extract only the timings for the benchmark class, ignore the bootstrapping
        $selector = '//entry[@function="' . $class . '->' . $subject->getName() . '"]';
        // calculate stats from the trace
        $time = (int) ($dom->evaluate(sprintf('number(%s/@end-time) - number(%s/@start-time)', $selector, $selector)) * 1000000.0);
        $memory = (int) $dom->evaluate(sprintf('number(%s/@end-memory) - number(%s/@start-memory)', $selector, $selector));
        $funcCalls = (int) $dom->evaluate('count(' . $selector . '//*)');
        $iteration->setResult(new TimeResult($result['time']));
        $iteration->setResult(MemoryResult::fromArray($result['mem']));
        $iteration->setResult(new XDebugTraceResult($time, $memory, $funcCalls, $dom));
    }