Skip to content

Commit 5788f5a

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

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

src/Runner/CodeCoverage.php

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
use function sprintf;
1515
use function sys_get_temp_dir;
1616
use PHPUnit\Event\Facade as EventFacade;
17+
use PHPUnit\Event\Telemetry\MemoryMeter;
18+
use PHPUnit\Event\Telemetry\MemoryUsage;
19+
use PHPUnit\Event\Telemetry\SystemMemoryMeter;
1720
use PHPUnit\Framework\TestCase;
1821
use PHPUnit\TextUI\Configuration\CodeCoverageFilterRegistry;
1922
use PHPUnit\TextUI\Configuration\Configuration;
@@ -52,16 +55,25 @@
5255
*/
5356
final class CodeCoverage
5457
{
58+
/**
59+
* @var array<string,int>
60+
*/
61+
private const array SIZES = [
62+
'GB' => 1073741824,
63+
'MB' => 1048576,
64+
'KB' => 1024,
65+
];
5566
private static ?self $instance = null;
5667
private ?\SebastianBergmann\CodeCoverage\CodeCoverage $codeCoverage = null;
5768

5869
/**
5970
* @phpstan-ignore property.internalClass
6071
*/
61-
private ?Driver $driver = null;
62-
private bool $collecting = false;
63-
private ?TestCase $test = null;
64-
private ?Timer $timer = null;
72+
private ?Driver $driver = null;
73+
private bool $collecting = false;
74+
private ?TestCase $test = null;
75+
private ?Timer $timer = null;
76+
private ?MemoryUsage $memoryStartUsage = null;
6577

6678
public static function instance(): self
6779
{
@@ -448,6 +460,7 @@ private function codeCoverageGenerationStart(Printer $printer, string $format):
448460
);
449461

450462
$this->timer()->start();
463+
$this->memoryStartUsage = $this->memoryMeter()->memoryUsage();
451464
}
452465

453466
/**
@@ -457,8 +470,9 @@ private function codeCoverageGenerationSucceeded(Printer $printer): void
457470
{
458471
$printer->print(
459472
sprintf(
460-
"done [%s]\n",
473+
"done [Time: %s, Memory: %s]\n",
461474
$this->timer()->stop()->asString(),
475+
$this->bytesToString($this->memoryMeter()->memoryUsage()->diff($this->memoryStartUsage)->bytes()),
462476
),
463477
);
464478
}
@@ -470,8 +484,9 @@ private function codeCoverageGenerationFailed(Printer $printer, CodeCoverageExce
470484
{
471485
$printer->print(
472486
sprintf(
473-
"failed [%s]\n%s\n",
487+
"failed [Time: %s, Memory: %s]\n%s\n",
474488
$this->timer()->stop()->asString(),
489+
$this->bytesToString($this->memoryMeter()->memoryUsage()->diff($this->memoryStartUsage)->bytes()),
475490
$e->getMessage(),
476491
),
477492
);
@@ -485,4 +500,22 @@ private function timer(): Timer
485500

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

0 commit comments

Comments
 (0)