@@ -654,14 +654,43 @@ namespace ts {
654
654
candidateCount : measures [ 0 ] . candidateCount ,
655
655
count : measures . length ,
656
656
timeMs : measures . map ( m => m . timeMs ) . reduce ( ( a , b ) => a + b , 0 ) ,
657
+ symbolCount : measures . map ( m => m . symbolCount ) . reduce ( ( a , b ) => a + b , 0 ) ,
658
+ nodeCount : measures . map ( m => m . nodeCount ) . reduce ( ( a , b ) => a + b , 0 ) ,
659
+ mergeCount : measures . map ( m => m . mergeCount ) . reduce ( ( a , b ) => a + b , 0 ) ,
660
+ flowCount : measures . map ( m => m . flowCount ) . reduce ( ( a , b ) => a + b , 0 ) ,
657
661
} ) ) ;
658
662
659
- const sortedOverloadStatistics = overloadStatistics . sort ( ( a , b ) => b . timeMs - a . timeMs ) ;
660
- for ( let i = 0 ; i < 10 && i < sortedOverloadStatistics . length ; i ++ ) {
661
- const stat = sortedOverloadStatistics [ i ] ;
662
- // sys.write(`${stat.symbolName}: ${stat.timeMs}ms (count = ${stat.count}) ${sys.newLine}`);
663
+ const topCount = 5 ;
664
+
665
+ sys . write ( "Top " + topCount + " by time" + sys . newLine ) ;
666
+ for ( const stat of takeAtMost ( topCount , overloadStatistics . sort ( ( a , b ) => b . timeMs - a . timeMs ) ) ) {
667
+ sys . write ( JSON . stringify ( stat ) + sys . newLine ) ;
668
+ }
669
+ sys . write ( sys . newLine ) ;
670
+
671
+ sys . write ( "Top " + topCount + " by symbols" + sys . newLine ) ;
672
+ for ( const stat of takeAtMost ( topCount , overloadStatistics . sort ( ( a , b ) => b . symbolCount - a . symbolCount ) ) ) {
663
673
sys . write ( JSON . stringify ( stat ) + sys . newLine ) ;
664
674
}
675
+ sys . write ( sys . newLine ) ;
676
+
677
+ sys . write ( "Top " + topCount + " by nodes" + sys . newLine ) ;
678
+ for ( const stat of takeAtMost ( topCount , overloadStatistics . sort ( ( a , b ) => b . nodeCount - a . nodeCount ) ) ) {
679
+ sys . write ( JSON . stringify ( stat ) + sys . newLine ) ;
680
+ }
681
+ sys . write ( sys . newLine ) ;
682
+
683
+ sys . write ( "Top " + topCount + " by merges" + sys . newLine ) ;
684
+ for ( const stat of takeAtMost ( topCount , overloadStatistics . sort ( ( a , b ) => b . mergeCount - a . mergeCount ) ) ) {
685
+ sys . write ( JSON . stringify ( stat ) + sys . newLine ) ;
686
+ }
687
+ sys . write ( sys . newLine ) ;
688
+
689
+ sys . write ( "Top " + topCount + " by flows" + sys . newLine ) ;
690
+ for ( const stat of takeAtMost ( topCount , overloadStatistics . sort ( ( a , b ) => b . flowCount - a . flowCount ) ) ) {
691
+ sys . write ( JSON . stringify ( stat ) + sys . newLine ) ;
692
+ }
693
+ sys . write ( sys . newLine ) ;
665
694
}
666
695
else {
667
696
// Individual component times.
@@ -681,6 +710,10 @@ namespace ts {
681
710
performance . disable ( ) ;
682
711
}
683
712
713
+ function takeAtMost < T > ( count : number , array : readonly T [ ] ) : readonly T [ ] {
714
+ return array . slice ( 0 , Math . min ( array . length , count ) ) ;
715
+ }
716
+
684
717
function reportStatistics ( ) {
685
718
let nameSize = 0 ;
686
719
let valueSize = 0 ;
0 commit comments