Add telemetry for rendering of markdown path

- Once per notebook, post if we see some rendered katex
- For each known katex unsupported formula, see if it exists in the output. This will help us see which ones are used most often in the real world
This commit is contained in:
Matt Bierner
2021-04-22 14:44:17 -07:00
parent 1ea93521fe
commit cd9a6a4820
2 changed files with 54 additions and 1 deletions
@@ -22,6 +22,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView
import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
import { IFileService } from 'vs/platform/files/common/files';
import { IOpenerService, matchesScheme } from 'vs/platform/opener/common/opener';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
import { CellEditState, ICellOutputViewModel, ICommonCellInfo, ICommonNotebookEditor, IDisplayOutputLayoutUpdateRequest, IDisplayOutputViewModel, IGenericCellViewModel, IInsetRenderOutput, RenderOutputType } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { preloadsScriptStr } from 'vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads';
@@ -162,6 +163,15 @@ export interface IInitializedMarkdownPreviewMessage extends BaseToWebviewMessage
readonly type: 'initializedMarkdownPreview';
}
export interface ITelemetryFoundRenderedMarkdownMath extends BaseToWebviewMessage {
readonly type: 'telemetryFoundRenderedMarkdownMath';
}
export interface ITelemetryFoundUnrenderedMarkdownMath extends BaseToWebviewMessage {
readonly type: 'telemetryFoundUnrenderedMarkdownMath';
readonly latexDirective: string;
}
export interface IClearMessage {
type: 'clear';
}
@@ -339,7 +349,10 @@ export type FromWebviewMessage =
| ICellDropMessage
| ICellDragEndMessage
| IInitializedMarkdownPreviewMessage
| ITelemetryFoundRenderedMarkdownMath
| ITelemetryFoundUnrenderedMarkdownMath
;
export type ToWebviewMessage =
| IClearMessage
| IFocusOutputMessage
@@ -426,6 +439,7 @@ export class BackLayerWebView<T extends ICommonCellInfo> extends Disposable {
@IContextMenuService private readonly contextMenuService: IContextMenuService,
@IMenuService private readonly menuService: IMenuService,
@IContextKeyService private readonly contextKeyService: IContextKeyService,
@ITelemetryService private readonly telemetryService: ITelemetryService,
) {
super();
@@ -1054,6 +1068,27 @@ var requirejs = (function() {
this.notebookEditor.markdownCellDragEnd(data.cellId);
break;
}
case 'telemetryFoundRenderedMarkdownMath':
{
this.telemetryService.publicLog2<{}, {}>('notebook/markdown/renderedLatex', {});
break;
}
case 'telemetryFoundUnrenderedMarkdownMath':
{
type Classification = {
latexDirective: { classification: 'SystemMetaData', purpose: 'FeatureInsight'; };
};
type TelemetryEvent = {
latexDirective: string;
};
this.telemetryService.publicLog2<TelemetryEvent, Classification>('notebook/markdown/foundUnrenderedLatex', {
latexDirective: data.latexDirective
});
break;
}
}
}));
}
@@ -6,7 +6,7 @@
import type { Event } from 'vs/base/common/event';
import type { IDisposable } from 'vs/base/common/lifecycle';
import { RenderOutputType } from 'vs/workbench/contrib/notebook/browser/notebookBrowser';
import { FromWebviewMessage, IBlurOutputMessage, ICellDropMessage, ICellDragMessage, ICellDragStartMessage, IClickedDataUrlMessage, ICustomRendererMessage, IDimensionMessage, IClickMarkdownPreviewMessage, IMouseEnterMarkdownPreviewMessage, IMouseEnterMessage, IMouseLeaveMarkdownPreviewMessage, IMouseLeaveMessage, IToggleMarkdownPreviewMessage, IWheelMessage, ToWebviewMessage, ICellDragEndMessage, IOutputFocusMessage, IOutputBlurMessage, DimensionUpdate, IContextMenuMarkdownPreviewMessage } from 'vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView';
import { FromWebviewMessage, IBlurOutputMessage, ICellDropMessage, ICellDragMessage, ICellDragStartMessage, IClickedDataUrlMessage, ICustomRendererMessage, IDimensionMessage, IClickMarkdownPreviewMessage, IMouseEnterMarkdownPreviewMessage, IMouseEnterMessage, IMouseLeaveMarkdownPreviewMessage, IMouseLeaveMessage, IToggleMarkdownPreviewMessage, IWheelMessage, ToWebviewMessage, ICellDragEndMessage, IOutputFocusMessage, IOutputBlurMessage, DimensionUpdate, IContextMenuMarkdownPreviewMessage, ITelemetryFoundRenderedMarkdownMath, ITelemetryFoundUnrenderedMarkdownMath } from 'vs/workbench/contrib/notebook/browser/view/renderers/backLayerWebView';
// !! IMPORTANT !! everything must be in-line within the webviewPreloads
// function. Imports are not allowed. This is stringifies and injected into
@@ -894,6 +894,9 @@ function webviewPreloads() {
});
}
let hasPostedRenderedMathTelemetry = false;
const unsupportedKatexTermsRegex = /(\\(?:abovewithdelims|array|Arrowvert|arrowvert|atopwithdelims|bbox|bracevert|buildrel|cancelto|cases|class|cssId|ddddot|dddot|DeclareMathOperator|definecolor|displaylines|enclose|eqalign|eqalignno|eqref|hfil|hfill|idotsint|iiiint|label|leftarrowtail|leftroot|leqalignno|lower|mathtip|matrix|mbox|mit|mmlToken|moveleft|moveright|mspace|newenvironment|Newextarrow|notag|oldstyle|overparen|overwithdelims|pmatrix|raise|ref|renewenvironment|require|root|Rule|scr|shoveleft|shoveright|sideset|skew|Space|strut|style|texttip|Tiny|toggle|underparen|unicode|uproot)\b)/g;
function updateMarkdownPreview(cellId: string, content: string | undefined) {
const previewContainerNode = document.getElementById(cellId);
if (!previewContainerNode) {
@@ -914,6 +917,21 @@ function webviewPreloads() {
element: previewNode,
content: content
}]);
if (!hasPostedRenderedMathTelemetry) {
const hasRenderedMath = previewNode.querySelector('.katex');
if (hasRenderedMath) {
hasPostedRenderedMathTelemetry = true;
postNotebookMessage<ITelemetryFoundRenderedMarkdownMath>('telemetryFoundRenderedMarkdownMath', {});
}
}
const matches = previewNode.innerText.match(unsupportedKatexTermsRegex);
if (matches) {
postNotebookMessage<ITelemetryFoundUnrenderedMarkdownMath>('telemetryFoundUnrenderedMarkdownMath', {
latexDirective: matches[0],
});
}
}
}