99 */
1010namespace 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 ;
1216use function assert ;
1317use function file_put_contents ;
1418use 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