@@ -95,6 +95,11 @@ const String SKIP_OLD_RELEVANCE = 'skip-old-relevance';
9595/// A flag that causes additional output to be produced.
9696const String VERBOSE = 'verbose' ;
9797
98+ /// A [Counter] to track the performance of the new relevance to the old
99+ /// relevance.
100+ Counter oldVsNewComparison =
101+ Counter ('use old vs new relevance rank comparison' );
102+
98103/// Create a parser that can be used to parse the command-line arguments.
99104ArgParser createArgParser () {
100105 return ArgParser ()
@@ -477,6 +482,12 @@ class CompletionMetricsComputer {
477482 printMetrics (metricsOldMode);
478483 }
479484 printMetrics (metricsNewMode);
485+
486+ print ('' );
487+ print ('====================' );
488+ oldVsNewComparison.printCounterValues ();
489+ print ('====================' );
490+
480491 if (verbose) {
481492 printWorstResults (metricsNewMode);
482493 printSlowestResults (metricsNewMode);
@@ -485,7 +496,7 @@ class CompletionMetricsComputer {
485496 return resultCode;
486497 }
487498
488- bool forEachExpectedCompletion (
499+ int forEachExpectedCompletion (
489500 CompletionRequestImpl request,
490501 MetricsSuggestionListener listener,
491502 ExpectedCompletion expectedCompletion,
@@ -496,14 +507,14 @@ class CompletionMetricsComputer {
496507 bool doPrintMissedCompletions) {
497508 assert (suggestions != null );
498509
499- var successfulCompletion ;
510+ var rank ;
500511
501512 var place = placementInSuggestionList (suggestions, expectedCompletion);
502513
503514 metrics.mrrComputer.addRank (place.rank);
504515
505516 if (place.denominator != 0 ) {
506- successfulCompletion = true ;
517+ rank = place.rank ;
507518
508519 metrics.completionCounter.count ('successful' );
509520
@@ -518,7 +529,7 @@ class CompletionMetricsComputer {
518529 metrics.insertionLengthTheoretical
519530 .addValue (expectedCompletion.completion.length - charsBeforeTop);
520531 } else {
521- successfulCompletion = false ;
532+ rank = - 1 ;
522533
523534 metrics.completionCounter.count ('unsuccessful' );
524535
@@ -544,7 +555,7 @@ class CompletionMetricsComputer {
544555 print ('' );
545556 }
546557 }
547- return successfulCompletion ;
558+ return rank ;
548559 }
549560
550561 void printMetrics (CompletionMetrics metrics) {
@@ -864,7 +875,7 @@ class CompletionMetricsComputer {
864875 // and results are collected with varying settings for
865876 // comparison:
866877
867- Future <bool > handleExpectedCompletion (
878+ Future <int > handleExpectedCompletion (
868879 {MetricsSuggestionListener listener,
869880 @required CompletionMetrics metrics,
870881 @required bool printMissedCompletions,
@@ -910,33 +921,39 @@ class CompletionMetricsComputer {
910921
911922 // First we compute the completions useNewRelevance set to
912923 // false:
913- var oldRelevanceSucceeded = false ;
924+ var oldRank ;
914925 if (! skipOldRelevance) {
915- oldRelevanceSucceeded = await handleExpectedCompletion (
926+ oldRank = await handleExpectedCompletion (
916927 metrics: metricsOldMode,
917928 printMissedCompletions: false ,
918929 useNewRelevance: false );
919930 }
920931
921932 // And again here with useNewRelevance set to true:
922933 var listener = MetricsSuggestionListener ();
923- var newRelevanceSucceeded = await handleExpectedCompletion (
934+ var newRank = await handleExpectedCompletion (
924935 listener: listener,
925936 metrics: metricsNewMode,
926937 printMissedCompletions: verbose,
927938 useNewRelevance: true );
928939
929- if (! skipOldRelevance &&
930- verbose &&
931- oldRelevanceSucceeded != newRelevanceSucceeded) {
932- if (newRelevanceSucceeded) {
940+ if (! skipOldRelevance && newRank != - 1 && oldRank != - 1 ) {
941+ if (newRank <= oldRank) {
942+ oldVsNewComparison.count ('new relevance' );
943+ } else {
944+ oldVsNewComparison.count ('old relevance' );
945+ }
946+ }
947+
948+ if (! skipOldRelevance && verbose) {
949+ if (newRank > 0 && oldRank < 0 ) {
933950 print (' ===========' );
934951 print (
935952 ' The `useNewRelevance = true` generated a completion that `useNewRelevance = false` did not:' );
936953 print (' $expectedCompletion ' );
937954 print (' ===========' );
938955 print ('' );
939- } else {
956+ } else if (newRank < 0 && oldRank > 0 ) {
940957 print (' ===========' );
941958 print (
942959 ' The `useNewRelevance = false` generated a completion that `useNewRelevance = true` did not:' );
0 commit comments