Skip to content

Commit fd27049

Browse files
committed
Optimize Report\Xml\Facade for speed
1 parent ba70759 commit fd27049

File tree

3 files changed

+17
-16
lines changed

3 files changed

+17
-16
lines changed

src/Report/Xml/Coverage.php

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@ public function __construct(DOMElement $context, string $line)
2626
$this->line = $line;
2727
}
2828

29-
public function finalize(array $tests): void
29+
public function appendToWriter(XMLWriter $writer, array $tests): void
3030
{
31-
$writer = new XMLWriter;
32-
$writer->openMemory();
3331
$writer->startElementNs(null, $this->contextNode->nodeName, 'https://schema.phpunit.de/coverage/1.0');
3432
$writer->writeAttribute('nr', $this->line);
3533

@@ -39,13 +37,5 @@ public function finalize(array $tests): void
3937
$writer->endElement();
4038
}
4139
$writer->endElement();
42-
43-
$fragment = $this->contextNode->ownerDocument->createDocumentFragment();
44-
$fragment->appendXML($writer->outputMemory());
45-
46-
$this->contextNode->parentNode->replaceChild(
47-
$fragment,
48-
$this->contextNode,
49-
);
5040
}
5141
}

src/Report/Xml/Facade.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
namespace SebastianBergmann\CodeCoverage\Report\Xml;
1111

12+
use XMLWriter;
1213
use const DIRECTORY_SEPARATOR;
1314
use function count;
1415
use function dirname;
@@ -159,15 +160,26 @@ private function processFile(FileNode $file, Directory $context): void
159160
$this->processFunction($function, $fileReport);
160161
}
161162

163+
$writer = new XMLWriter();
164+
$writer->openMemory();
165+
$coverageNode = $fileReport->lineCoverageNode();
162166
foreach ($file->lineCoverageData() as $line => $tests) {
163167
if (!is_array($tests) || count($tests) === 0) {
164168
continue;
165169
}
166170

167-
$coverage = $fileReport->lineCoverage((string) $line);
168-
$coverage->finalize($tests);
171+
$coverage = new Coverage($coverageNode, (string) $line);
172+
$coverage->appendToWriter($writer, $tests);
169173
}
170174

175+
$fragment = $coverageNode->ownerDocument->createDocumentFragment();
176+
$fragment->appendXML($writer->outputMemory());
177+
178+
$coverageNode->parentNode->replaceChild(
179+
$fragment,
180+
$coverageNode,
181+
);
182+
171183
$fileReport->source()->setSourceCode(
172184
file_get_contents($file->pathAsString()),
173185
);

src/Report/Xml/File.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function totals(): Totals
4545
return new Totals($totalsContainer);
4646
}
4747

48-
public function lineCoverage(string $line): Coverage
48+
public function lineCoverageNode(): DOMElement
4949
{
5050
$coverage = $this->contextNode->getElementsByTagNameNS(
5151
'https://schema.phpunit.de/coverage/1.0',
@@ -69,8 +69,7 @@ public function lineCoverage(string $line): Coverage
6969
);
7070

7171
assert($lineNode instanceof DOMElement);
72-
73-
return new Coverage($lineNode, $line);
72+
return $lineNode;
7473
}
7574

7675
protected function contextNode(): DOMElement

0 commit comments

Comments
 (0)