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