diff --git a/package-lock.json b/package-lock.json index c6e9c8e29755d..3a69bc38fb4a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,6 @@ "@esfx/canceltoken": "^1.0.0", "@octokit/rest": "^20.1.1", "@types/chai": "^4.3.16", - "@types/microsoft__typescript-etw": "^0.1.3", "@types/minimist": "^1.2.5", "@types/mocha": "^10.0.6", "@types/ms": "^0.7.34", @@ -998,12 +997,6 @@ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, - "node_modules/@types/microsoft__typescript-etw": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@types/microsoft__typescript-etw/-/microsoft__typescript-etw-0.1.3.tgz", - "integrity": "sha512-qbO0IoTPJERhGWOvdw9iQbRjM7OGc6+fHVziSKcw566BDSQpEdkGxXcE8BKSHJOP6mkTRobf4QxqRE/aKhrCxg==", - "dev": true - }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -5056,12 +5049,6 @@ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, - "@types/microsoft__typescript-etw": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@types/microsoft__typescript-etw/-/microsoft__typescript-etw-0.1.3.tgz", - "integrity": "sha512-qbO0IoTPJERhGWOvdw9iQbRjM7OGc6+fHVziSKcw566BDSQpEdkGxXcE8BKSHJOP6mkTRobf4QxqRE/aKhrCxg==", - "dev": true - }, "@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", diff --git a/package.json b/package.json index e1ba43001557a..6504ca0a216f4 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "@esfx/canceltoken": "^1.0.0", "@octokit/rest": "^20.1.1", "@types/chai": "^4.3.16", - "@types/microsoft__typescript-etw": "^0.1.3", "@types/minimist": "^1.2.5", "@types/mocha": "^10.0.6", "@types/ms": "^0.7.34", @@ -102,7 +101,6 @@ "path": false, "crypto": false, "buffer": false, - "@microsoft/typescript-etw": false, "source-map-support": false, "inspector": false, "perf_hooks": false diff --git a/src/compiler/_namespaces/ts.ts b/src/compiler/_namespaces/ts.ts index 17b7bd7841238..94fb16857d38e 100644 --- a/src/compiler/_namespaces/ts.ts +++ b/src/compiler/_namespaces/ts.ts @@ -5,7 +5,6 @@ export * from "../core.js"; export * from "../debug.js"; export * from "../semver.js"; export * from "../performanceCore.js"; -export * from "../perfLogger.js"; export * from "../tracing.js"; export * from "../types.js"; export * from "../sys.js"; diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index cab3c6911bf98..5c94dde5cc597 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -269,7 +269,6 @@ import { ParenthesizedExpression, Pattern, PatternAmbientModule, - perfLogger, PostfixUnaryExpression, PrefixUnaryExpression, PrivateIdentifier, @@ -513,9 +512,7 @@ const binder = /* @__PURE__ */ createBinder(); /** @internal */ export function bindSourceFile(file: SourceFile, options: CompilerOptions) { performance.mark("beforeBind"); - perfLogger?.logStartBindFile("" + file.fileName); binder(file, options); - perfLogger?.logStopBindFile(); performance.mark("afterBind"); performance.measure("Bind", "beforeBind", "afterBind"); } diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index 9ede133aae270..59a352a223547 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -83,7 +83,6 @@ import { pathIsRelative, Pattern, patternText, - perfLogger, readJson, removeExtension, removeFileExtension, @@ -1431,7 +1430,6 @@ export function resolveModuleName(moduleName: string, containingFile: string, co } } - perfLogger?.logStartResolveModule(moduleName /* , containingFile, ModuleResolutionKind[moduleResolution]*/); switch (moduleResolution) { case ModuleResolutionKind.Node16: result = node16ModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode); @@ -1451,8 +1449,6 @@ export function resolveModuleName(moduleName: string, containingFile: string, co default: return Debug.fail(`Unexpected moduleResolution: ${moduleResolution}`); } - if (result && result.resolvedModule) perfLogger?.logInfoEvent(`Module "${moduleName}" resolved to "${result.resolvedModule.resolvedFileName}"`); - perfLogger?.logStopResolveModule((result && result.resolvedModule) ? "" + result.resolvedModule.resolvedFileName : "null"); if (cache && !cache.isReadonly) { cache.getOrCreateCacheForDirectory(containingDirectory, redirectedReference).set(moduleName, resolutionMode, result); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 3cb942dfad62e..5859e7cf37190 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -293,7 +293,6 @@ import { ParenthesizedExpression, ParenthesizedTypeNode, PartiallyEmittedExpression, - perfLogger, PlusToken, PostfixUnaryExpression, PostfixUnaryOperator, @@ -1343,7 +1342,6 @@ export function createSourceFile(fileName: string, sourceText: string, languageV performance.mark("beforeParse"); let result: SourceFile; - perfLogger?.logStartParseSourceFile(fileName); const { languageVersion, setExternalModuleIndicator: overrideSetExternalModuleIndicator, @@ -1360,7 +1358,6 @@ export function createSourceFile(fileName: string, sourceText: string, languageV }; result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, setIndicator, jsDocParsingMode); } - perfLogger?.logStopParseSourceFile(); performance.mark("afterParse"); performance.measure("Parse", "beforeParse", "afterParse"); diff --git a/src/compiler/perfLogger.ts b/src/compiler/perfLogger.ts deleted file mode 100644 index f2476db967541..0000000000000 --- a/src/compiler/perfLogger.ts +++ /dev/null @@ -1,44 +0,0 @@ -/** @internal */ -export interface PerfLogger { - logEvent(msg: string): void; - logErrEvent(msg: string): void; - logPerfEvent(msg: string): void; - logInfoEvent(msg: string): void; - logStartCommand(command: string, msg: string): void; - logStopCommand(command: string, msg: string): void; - logStartUpdateProgram(msg: string): void; - logStopUpdateProgram(msg: string): void; - logStartUpdateGraph(): void; - logStopUpdateGraph(): void; - logStartResolveModule(name: string): void; - logStopResolveModule(success: string): void; - logStartParseSourceFile(filename: string): void; - logStopParseSourceFile(): void; - logStartReadFile(filename: string): void; - logStopReadFile(): void; - logStartBindFile(filename: string): void; - logStopBindFile(): void; - logStartScheduledOperation(operationId: string): void; - logStopScheduledOperation(): void; -} - -// Load optional module to enable Event Tracing for Windows -// See https://github.com/microsoft/typescript-etw for more information -let etwModule: typeof import("@microsoft/typescript-etw") | undefined; -try { - const etwModulePath = process.env.TS_ETW_MODULE_PATH ?? "./node_modules/@microsoft/typescript-etw"; - - // require() will throw an exception if the module is not found - // It may also return undefined if not installed properly - etwModule = require(etwModulePath); -} -catch (e) { - etwModule = undefined; -} - -/** - * Performance logger that will generate ETW events if possible - check for `logEvent` member, as `etwModule` will be `{}` when browserified - * - * @internal - */ -export const perfLogger: PerfLogger | undefined = etwModule?.logEvent ? etwModule : undefined; diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index a8fdd4d156822..57c945d868a1a 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -35,7 +35,6 @@ import { normalizeSlashes, orderedRemoveItem, Path, - perfLogger, PollingWatchKind, resolveJSModule, some, @@ -1786,7 +1785,7 @@ export let sys: System = (() => { ); } - function readFileWorker(fileName: string, _encoding?: string): string | undefined { + function readFile(fileName: string, _encoding?: string): string | undefined { let buffer: Buffer; try { buffer = _fs.readFileSync(fileName); @@ -1818,15 +1817,7 @@ export let sys: System = (() => { return buffer.toString("utf8"); } - function readFile(fileName: string, _encoding?: string): string | undefined { - perfLogger?.logStartReadFile(fileName); - const file = readFileWorker(fileName, _encoding); - perfLogger?.logStopReadFile(); - return file; - } - function writeFile(fileName: string, data: string, writeByteOrderMark?: boolean): void { - perfLogger?.logEvent("WriteFile: " + fileName); // If a BOM is required, emit one if (writeByteOrderMark) { data = byteOrderMarkIndicator + data; @@ -1846,7 +1837,6 @@ export let sys: System = (() => { } function getAccessibleFileSystemEntries(path: string): FileSystemEntries { - perfLogger?.logEvent("ReadDir: " + (path || ".")); try { const entries = _fs.readdirSync(path || ".", { withFileTypes: true }); const files: string[] = []; diff --git a/src/compiler/watchPublic.ts b/src/compiler/watchPublic.ts index fe64aa7e6d4e9..95c14ed1580db 100644 --- a/src/compiler/watchPublic.ts +++ b/src/compiler/watchPublic.ts @@ -62,7 +62,6 @@ import { parseConfigHostFromCompilerHostLike, ParsedCommandLine, Path, - perfLogger, PollingInterval, ProgramUpdateLevel, ProjectReference, @@ -891,19 +890,15 @@ export function createWatchProgram(host: WatchCompiler function updateProgram() { switch (updateLevel) { case ProgramUpdateLevel.RootNamesAndUpdate: - perfLogger?.logStartUpdateProgram("PartialConfigReload"); reloadFileNamesFromConfigFile(); break; case ProgramUpdateLevel.Full: - perfLogger?.logStartUpdateProgram("FullConfigReload"); reloadConfigFile(); break; default: - perfLogger?.logStartUpdateProgram("SynchronizeProgram"); synchronizeProgram(); break; } - perfLogger?.logStopUpdateProgram("Done"); return getCurrentBuilderProgram(); } diff --git a/src/server/project.ts b/src/server/project.ts index a851b346813a0..00d87b2224103 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -93,7 +93,6 @@ import { ParsedCommandLine, parsePackageName, Path, - perfLogger, PerformanceEvent, PluginImport, PollingInterval, @@ -1360,7 +1359,6 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo */ updateGraph(): boolean { tracing?.push(tracing.Phase.Session, "updateGraph", { name: this.projectName, kind: ProjectKind[this.projectKind] }); - perfLogger?.logStartUpdateGraph(); this.resolutionCache.startRecordingFilesWithChangedResolutions(); const hasNewProgram = this.updateGraphWorker(); @@ -1405,7 +1403,6 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo // Preload auto import provider so it's not created during completions request this.getPackageJsonAutoImportProvider(); } - perfLogger?.logStopUpdateGraph(); tracing?.pop(); return !hasNewProgram; } diff --git a/src/server/session.ts b/src/server/session.ts index 1d3b34d66f719..990e3ec7d5af5 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -102,7 +102,6 @@ import { OutliningSpan, PasteEdits, Path, - perfLogger, PerformanceEvent, PossibleProgramFileInfo, Program, @@ -1206,7 +1205,6 @@ export class Session implements EventSender { protected writeMessage(msg: protocol.Message) { const msgText = formatMessage(msg, this.logger, this.byteLength, this.host.newLine); - perfLogger?.logEvent(`Response message size: ${msgText.length}`); this.host.write(msgText); } @@ -3698,7 +3696,6 @@ export class Session implements EventSender { relevantFile = request.arguments && (request as protocol.FileRequest).arguments.file ? (request as protocol.FileRequest).arguments : undefined; tracing?.instant(tracing.Phase.Session, "request", { seq: request.seq, command: request.command }); - perfLogger?.logStartCommand("" + request.command, this.toStringMessage(message).substring(0, 100)); tracing?.push(tracing.Phase.Session, "executeCommand", { seq: request.seq, command: request.command }, /*separateBeginAndEnd*/ true); const { response, responseRequired } = this.executeCommand(request); @@ -3715,7 +3712,6 @@ export class Session implements EventSender { } // Note: Log before writing the response, else the editor can complete its activity before the server does - perfLogger?.logStopCommand("" + request.command, "Success"); tracing?.instant(tracing.Phase.Session, "response", { seq: request.seq, command: request.command, success: !!response }); if (response) { this.doOutput(response, request.command, request.seq, /*success*/ true); @@ -3730,14 +3726,12 @@ export class Session implements EventSender { if (err instanceof OperationCanceledException) { // Handle cancellation exceptions - perfLogger?.logStopCommand("" + (request && request.command), "Canceled: " + err); tracing?.instant(tracing.Phase.Session, "commandCanceled", { seq: request?.seq, command: request?.command }); this.doOutput({ canceled: true }, request!.command, request!.seq, /*success*/ true); return; } this.logErrorWorker(err, this.toStringMessage(message), relevantFile); - perfLogger?.logStopCommand("" + (request && request.command), "Error: " + err); tracing?.instant(tracing.Phase.Session, "commandError", { seq: request?.seq, command: request?.command, message: (err as Error).message }); this.doOutput( diff --git a/src/server/utilities.ts b/src/server/utilities.ts index 012270f5d14ad..fd3b221fb43e1 100644 --- a/src/server/utilities.ts +++ b/src/server/utilities.ts @@ -3,7 +3,6 @@ import { Comparer, getBaseFileName, identity, - perfLogger, SortedArray, } from "./_namespaces/ts.js"; import { @@ -48,13 +47,11 @@ export class ThrottledOperations { } private static run(operationId: string, self: ThrottledOperations, cb: () => void) { - perfLogger?.logStartScheduledOperation(operationId); self.pendingTimeouts.delete(operationId); if (self.logger) { self.logger.info(`Running: ${operationId}`); } cb(); - perfLogger?.logStopScheduledOperation(); } } @@ -75,7 +72,6 @@ export class GcTimer { private static run(self: GcTimer) { self.timerId = undefined; - perfLogger?.logStartScheduledOperation("GC collect"); const log = self.logger.hasLevel(LogLevel.requestTime); const before = log && self.host.getMemoryUsage!(); // TODO: GH#18217 @@ -84,7 +80,6 @@ export class GcTimer { const after = self.host.getMemoryUsage!(); // TODO: GH#18217 self.logger.perftrc(`GC::before ${before}, after ${after}`); } - perfLogger?.logStopScheduledOperation(); } } diff --git a/src/tsserver/nodeServer.ts b/src/tsserver/nodeServer.ts index 280b0d3b630df..c41b864feed5b 100644 --- a/src/tsserver/nodeServer.ts +++ b/src/tsserver/nodeServer.ts @@ -14,7 +14,6 @@ import { noopFileWatcher, normalizePath, normalizeSlashes, - perfLogger, startTracing, stripQuotes, sys, @@ -213,18 +212,6 @@ export function initializeNodeSystem(): StartInput { return this.loggingEnabled() && this.level >= level; } msg(s: string, type: ts.server.Msg = ts.server.Msg.Err) { - switch (type) { - case ts.server.Msg.Info: - perfLogger?.logInfoEvent(s); - break; - case ts.server.Msg.Perf: - perfLogger?.logPerfEvent(s); - break; - default: // Msg.Err - perfLogger?.logErrEvent(s); - break; - } - if (!this.canWrite()) return; s = `[${ts.server.nowString()}] ${s}\n`;