1414use function sprintf ;
1515use function sys_get_temp_dir ;
1616use PHPUnit \Event \Facade as EventFacade ;
17+ use PHPUnit \Event \Telemetry \MemoryMeter ;
18+ use PHPUnit \Event \Telemetry \MemoryUsage ;
19+ use PHPUnit \Event \Telemetry \SystemMemoryMeter ;
1720use PHPUnit \Framework \TestCase ;
1821use PHPUnit \TextUI \Configuration \CodeCoverageFilterRegistry ;
1922use PHPUnit \TextUI \Configuration \Configuration ;
5255 */
5356final 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