in src/Editor/Language/Impl/Language/AsyncCompletion/CompletionTelemetry.cs [594:703]
private static void AddE2EData(CompletionSessionTelemetry telemetry, AggregateE2EData e2eData)
{
switch (telemetry.CompletionState)
{
case CompletionSessionState.Committed:
e2eData.Committed++;
break;
case CompletionSessionState.CommittedSuggestionItem:
e2eData.CommittedSuggestionItem++;
break;
case CompletionSessionState.CommittedThroughClick:
e2eData.CommittedThroughClick++;
break;
case CompletionSessionState.CommittedThroughCompleteWord:
e2eData.CommittedThroughCompleteWord++;
break;
case CompletionSessionState.CommittedThroughTypedChar:
e2eData.CommittedThroughTypedChar++;
break;
case CompletionSessionState.DismissedDueToBackspace:
e2eData.DismissedDueToBackspace++;
break;
case CompletionSessionState.DismissedDueToCancellation:
e2eData.DismissedDueToCancellation++;
break;
case CompletionSessionState.DismissedDueToCaretLeaving:
e2eData.DismissedDueToCaretLeaving++;
break;
case CompletionSessionState.DismissedDuringFiltering:
e2eData.DismissedDuringFiltering++;
break;
case CompletionSessionState.DismissedDueToNoItems:
e2eData.DismissedDueToNoItems++;
break;
case CompletionSessionState.DismissedDueToNonBlockingMode:
e2eData.DismissedDueToNonBlockingMode++;
break;
case CompletionSessionState.DismissedDueToResponsiveMode:
e2eData.DismissedDueToResponsiveMode++;
break;
case CompletionSessionState.DismissedDueToSuggestionMode:
e2eData.DismissedDueToSuggestionMode++;
break;
case CompletionSessionState.DismissedDueToUnhandledError:
e2eData.DismissedDueToUnhandledError++;
break;
case CompletionSessionState.DismissedThroughUI:
e2eData.DismissedThroughUI++;
break;
case CompletionSessionState.DismissedUninitialized:
e2eData.DismissedUninitialized++;
break;
default:
e2eData.Dismissed++;
break;
}
if (telemetry.CompletionState == CompletionSessionState.DismissedDueToCancellation)
{
e2eData.HistogramBucketCanceled++;
}
else
{
var E2eDuration = telemetry.E2EStopwatch.ElapsedMilliseconds;
if (E2eDuration == 0)
e2eData.HistogramBucketInvalid++;
else if (E2eDuration <= 25)
e2eData.HistogramBucket25++;
else if (E2eDuration <= 50)
e2eData.HistogramBucket50++;
else if (E2eDuration <= 100)
e2eData.HistogramBucket100++;
else if (E2eDuration <= 250)
e2eData.HistogramBucket250++;
else if (E2eDuration <= 500)
e2eData.HistogramBucket500++;
else if (E2eDuration <= 1000)
e2eData.HistogramBucket1000++;
else if (E2eDuration <= 2000)
e2eData.HistogramBucket2000++;
else
e2eData.HistogramBucketLast++;
}
if (telemetry.CompletionState == CompletionSessionState.Committed || telemetry.CompletionState == CompletionSessionState.CommittedThroughTypedChar || telemetry.CompletionState == CompletionSessionState.CommittedThroughCompleteWord)
{
if (telemetry.NoChanges)
{
if (telemetry.CompletionState == CompletionSessionState.CommittedThroughTypedChar && telemetry.UserWaitedForNoChanges)
e2eData.HistogramNoChangesAndUserWaitedThroughTypedChar++;
else if (telemetry.CompletionState == CompletionSessionState.CommittedThroughTypedChar && !telemetry.UserWaitedForNoChanges)
e2eData.HistogramNoChangesThroughTypedChar++;
else if (telemetry.CompletionState == CompletionSessionState.CommittedThroughTypedChar && telemetry.UserWaitedForNoChanges)
e2eData.HistogramNoChangesAndUserWaited++;
else if (telemetry.CompletionState == CompletionSessionState.CommittedThroughTypedChar && !telemetry.UserWaitedForNoChanges)
e2eData.HistogramNoChanges++;
}
else
{
if (telemetry.CompletionState == CompletionSessionState.CommittedThroughTypedChar && telemetry.UserWaitedForNoChanges)
e2eData.HistogramChangesAndUserWaitedThroughTypedChar++;
else if (telemetry.CompletionState == CompletionSessionState.CommittedThroughTypedChar && !telemetry.UserWaitedForNoChanges)
e2eData.HistogramChangesThroughTypedChar++;
else if (telemetry.CompletionState != CompletionSessionState.CommittedThroughTypedChar && telemetry.UserWaitedForNoChanges)
e2eData.HistogramChangesAndUserWaited++;
else if (telemetry.CompletionState != CompletionSessionState.CommittedThroughTypedChar && !telemetry.UserWaitedForNoChanges)
e2eData.HistogramChanges++;
}
}
}