• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import { noop } from "./_namespaces/ts";
2
3/** @internal */
4export interface PerfLogger {
5    logEvent(msg: string): void;
6    logErrEvent(msg: string): void;
7    logPerfEvent(msg: string): void;
8    logInfoEvent(msg: string): void;
9    logStartCommand(command: string, msg: string): void;
10    logStopCommand(command: string, msg: string): void;
11    logStartUpdateProgram(msg: string): void;
12    logStopUpdateProgram(msg: string): void;
13    logStartUpdateGraph(): void;
14    logStopUpdateGraph(): void;
15    logStartResolveModule(name: string): void;
16    logStopResolveModule(success: string): void;
17    logStartParseSourceFile(filename: string): void;
18    logStopParseSourceFile(): void;
19    logStartReadFile(filename: string): void;
20    logStopReadFile(): void;
21    logStartBindFile(filename: string): void;
22    logStopBindFile(): void;
23    logStartScheduledOperation(operationId: string): void;
24    logStopScheduledOperation(): void;
25}
26
27const nullLogger: PerfLogger = {
28    logEvent: noop,
29    logErrEvent: noop,
30    logPerfEvent: noop,
31    logInfoEvent: noop,
32    logStartCommand: noop,
33    logStopCommand: noop,
34    logStartUpdateProgram: noop,
35    logStopUpdateProgram: noop,
36    logStartUpdateGraph: noop,
37    logStopUpdateGraph: noop,
38    logStartResolveModule: noop,
39    logStopResolveModule: noop,
40    logStartParseSourceFile: noop,
41    logStopParseSourceFile: noop,
42    logStartReadFile: noop,
43    logStopReadFile: noop,
44    logStartBindFile: noop,
45    logStopBindFile: noop,
46    logStartScheduledOperation: noop,
47    logStopScheduledOperation: noop,
48};
49
50// Load optional module to enable Event Tracing for Windows
51// See https://github.com/microsoft/typescript-etw for more information
52let etwModule: typeof import("@microsoft/typescript-etw") | undefined;
53try {
54    const etwModulePath = process.env.TS_ETW_MODULE_PATH ?? "./node_modules/@microsoft/typescript-etw";
55
56    // require() will throw an exception if the module is not found
57    // It may also return undefined if not installed properly
58    etwModule = require(etwModulePath);
59}
60catch (e) {
61    etwModule = undefined;
62}
63
64/** Performance logger that will generate ETW events if possible - check for `logEvent` member, as `etwModule` will be `{}` when browserified
65 *
66 * @internal
67 */
68export const perfLogger: PerfLogger = etwModule?.logEvent ? etwModule : nullLogger;
69