internal void Send()

in src/Editor/Language/Impl/Language/AsyncCompletion/CompletionTelemetry.cs [357:481]


        internal void Send()
        {
            if (_logger == null)
                return;

            foreach (var data in ItemManagerData)
            {
                if (data.Value.SessionCount == 0)
                    continue;
                if (data.Value.ProcessCount == 0)
                    continue;

                _logger.PostEvent(TelemetryEventType.Operation,
                    ItemManagerEventName,
                    TelemetryResult.Success,
                    (ItemManagerName, data.Key),
                    (ItemManagerAverageFinalItemCount, data.Value.FinalItemCount / (double)data.Value.SessionCount),
                    (ItemManagerAverageInitialProcessDuration, data.Value.InitialProcessTime / (double)data.Value.SessionCount),
                    (ItemManagerAverageFilterDuration, data.Value.TotalProcessTime / (double)data.Value.ProcessCount),
                    (ItemManagerAverageKeystrokeCount, data.Value.TotalKeystrokes / (double)data.Value.SessionCount),
                    (ItemManagerAverageScrolled, data.Value.UserEverScrolled / (double)data.Value.SessionCount),
                    (ItemManagerAverageSetFilters, data.Value.UserEverSetFilters / (double)data.Value.SessionCount),
                    (ItemManagerAverageBlockingComputationDuration, data.Value.TotalBlockingComputationTime / (double)data.Value.SessionCount),
                    (ItemManagerMaxBlockingComputationDuration, data.Value.MaxBlockingComputationTime)
                );
            }

            foreach (var data in SourceData)
            {
                if (data.Value.SetupCount == 0)
                    continue;
                if (data.Value.GetContextCount == 0)
                    data.Value.GetContextCount = 1; // the result of division will remain 0 and the division won't throw

                _logger.PostEvent(TelemetryEventType.Operation,
                    SourceEventName,
                    TelemetryResult.Success,
                    (SourceName, data.Key),
                    (SourceAverageGetContextDuration, data.Value.TotalGetContextTime / (double)data.Value.GetContextCount),
                    (SourceAverageSetupDuration, data.Value.TotalSetupTime / (double)data.Value.SetupCount),
                    (SourceMaxSetupDuration, data.Value.MaxSetupTime)
                );
            }

            foreach (var data in CommitManagerData)
            {
                if (data.Value.CommitCount == 0)
                    continue;

                _logger.PostEvent(TelemetryEventType.Operation,
                    CommitManagerEventName,
                    TelemetryResult.Success,
                    (CommitManagerName, data.Key),
                    (CommitManagerAverageCommitDuration, data.Value.TotalCommitTime / (double)data.Value.CommitCount),
                    (CommitManagerAverageSetupDuration, data.Value.TotalSetupTime / (double)data.Value.SetupCount),
                    (CommitManagerMaxCommitDuration, data.Value.MaxCommitTime),
                    (CommitManagerMaxSetupDuration, data.Value.MaxSetupTime)
                );
            }

            foreach (var data in PresenterData)
            {
                if (data.Value.RenderCount == 0)
                    continue;

                _logger.PostEvent(TelemetryEventType.Operation,
                    PresenterEventName,
                    TelemetryResult.Success,
                    (PresenterName, data.Key),
                    (PresenterAverageInitialRendering, data.Value.InitialRenderTime / (double)data.Value.ClosingCount),
                    (PresenterAverageRendering, data.Value.TotalRenderTime / (double)data.Value.RenderCount),
                    (PresenterAverageClosing, data.Value.TotalClosingTime / (double)data.Value.ClosingCount),
                    (PresenterMaxRendering, data.Value.MaxRenderTime),
                    (PresenterMaxClosing, data.Value.MaxClosingTime)
                );
            }

            _logger.PostEvent(TelemetryEventType.Operation,
                E2EEventName,
                TelemetryResult.Success,
                (E2EContentType, _textViewContentType),
                (E2EBucket25, E2EData.HistogramBucket25),
                (E2EBucket50, E2EData.HistogramBucket50),
                (E2EBucket100, E2EData.HistogramBucket100),
                (E2EBucket250, E2EData.HistogramBucket250),
                (E2EBucket500, E2EData.HistogramBucket500),
                (E2EBucket1000, E2EData.HistogramBucket1000),
                (E2EBucket2000, E2EData.HistogramBucket2000),
                (E2EBucketLast, E2EData.HistogramBucketLast),
                (E2EBucketCanceled, E2EData.HistogramBucketCanceled),
                (E2EBucketInvalid, E2EData.HistogramBucketInvalid),
                (E2ECommittedStandard, E2EData.Committed),
                (E2ECommittedClick, E2EData.CommittedThroughClick),
                (E2ECommittedCompleteWord, E2EData.CommittedThroughCompleteWord),
                (E2ECommittedSuggestionItem, E2EData.CommittedSuggestionItem),
                (E2ECommittedThroughTypedChar, E2EData.CommittedThroughTypedChar),
                (E2EDismissedStandard, E2EData.Dismissed),
                (E2EDismissedBackspace, E2EData.DismissedDueToBackspace),
                (E2EDismissedCancellation, E2EData.DismissedDueToCancellation),
                (E2EDismissedCaretLeaving, E2EData.DismissedDueToCaretLeaving),
                (E2EDismissedFiltering, E2EData.DismissedDuringFiltering),
                (E2EDismissedNoItems, E2EData.DismissedDueToNoItems),
                (E2EDismissedNonBlocking, E2EData.DismissedDueToNonBlockingMode),
                (E2EDismissedResponsive, E2EData.DismissedDueToResponsiveMode),
                (E2EDismissedSuggestion, E2EData.DismissedDueToSuggestionMode),
                (E2EDismissedUnhandledError, E2EData.DismissedDueToUnhandledError),
                (E2EDismissedUI, E2EData.DismissedThroughUI),
                (E2EDismissedUninitialized, E2EData.DismissedUninitialized),
                (E2EScenarioNoChanges, E2EData.HistogramNoChanges),
                (E2EScenarioUserWaitedForNoChanges, E2EData.HistogramNoChangesAndUserWaited)
            );

            foreach (var data in BlockingExtensionData)
            {
                if (data.Value == 0)
                    continue;

                _logger.PostEvent(TelemetryEventType.Operation,
                    BlockingExtensionEventName,
                    TelemetryResult.Success,
                    (BlockingExtensionName, data.Key),
                    (BlockingCount, data.Value)
                );
            }
        }