Skip to content

Commit 0f2b878

Browse files
committed
Report memory-usage while coverage report generation
1 parent 39f926a commit 0f2b878

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

src/Runner/CodeCoverage.php

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99
*/
1010
namespace PHPUnit\Runner;
1111

12+
use PHPUnit\Event\Telemetry\MemoryMeter;
13+
use PHPUnit\Event\Telemetry\MemoryUsage;
14+
use PHPUnit\Event\Telemetry\SystemMemoryMeter;
15+
use SebastianBergmann\Timer\ResourceUsageFormatter;
1216
use function assert;
1317
use function file_put_contents;
1418
use function sprintf;
@@ -62,6 +66,16 @@ final class CodeCoverage
6266
private bool $collecting = false;
6367
private ?TestCase $test = null;
6468
private ?Timer $timer = null;
69+
private ?MemoryUsage $memoryStartUsage = null;
70+
71+
/**
72+
* @var array<string,int>
73+
*/
74+
private const array SIZES = [
75+
'GB' => 1073741824,
76+
'MB' => 1048576,
77+
'KB' => 1024,
78+
];
6579

6680
public static function instance(): self
6781
{
@@ -448,6 +462,7 @@ private function codeCoverageGenerationStart(Printer $printer, string $format):
448462
);
449463

450464
$this->timer()->start();
465+
$this->memoryStartUsage = $this->memoryMeter()->memoryUsage();
451466
}
452467

453468
/**
@@ -457,8 +472,9 @@ private function codeCoverageGenerationSucceeded(Printer $printer): void
457472
{
458473
$printer->print(
459474
sprintf(
460-
"done [%s]\n",
475+
"done [Time: %s, Memory: %s]\n",
461476
$this->timer()->stop()->asString(),
477+
$this->bytesToString($this->memoryMeter()->memoryUsage()->diff($this->memoryStartUsage)->bytes()),
462478
),
463479
);
464480
}
@@ -470,8 +486,9 @@ private function codeCoverageGenerationFailed(Printer $printer, CodeCoverageExce
470486
{
471487
$printer->print(
472488
sprintf(
473-
"failed [%s]\n%s\n",
489+
"failed [Time: %s, Memory: %s]\n%s\n",
474490
$this->timer()->stop()->asString(),
491+
$this->bytesToString($this->memoryMeter()->memoryUsage()->diff($this->memoryStartUsage)->bytes()),
475492
$e->getMessage(),
476493
),
477494
);
@@ -485,4 +502,22 @@ private function timer(): Timer
485502

486503
return $this->timer;
487504
}
505+
506+
private function memoryMeter(): MemoryMeter
507+
{
508+
return new SystemMemoryMeter();
509+
}
510+
511+
private function bytesToString(int $bytes): string
512+
{
513+
foreach (self::SIZES as $unit => $value) {
514+
if ($bytes >= $value) {
515+
return sprintf('%.2f %s', $bytes / $value, $unit);
516+
}
517+
}
518+
519+
// @codeCoverageIgnoreStart
520+
return $bytes . ' byte' . ($bytes !== 1 ? 's' : '');
521+
// @codeCoverageIgnoreEnd
522+
}
488523
}

0 commit comments

Comments
 (0)