Skip to content

Commit a727ca1

Browse files
authored
Make perfLogger potentially undefined rather than using a noop logger (#53229)
1 parent 63495be commit a727ca1

File tree

10 files changed

+30
-54
lines changed

10 files changed

+30
-54
lines changed

src/compiler/binder.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,9 +493,9 @@ const binder = /* @__PURE__ */ createBinder();
493493
/** @internal */
494494
export function bindSourceFile(file: SourceFile, options: CompilerOptions) {
495495
performance.mark("beforeBind");
496-
perfLogger.logStartBindFile("" + file.fileName);
496+
perfLogger?.logStartBindFile("" + file.fileName);
497497
binder(file, options);
498-
perfLogger.logStopBindFile();
498+
perfLogger?.logStopBindFile();
499499
performance.mark("afterBind");
500500
performance.measure("Bind", "beforeBind", "afterBind");
501501
}

src/compiler/moduleNameResolver.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,7 +1328,7 @@ export function resolveModuleName(moduleName: string, containingFile: string, co
13281328
}
13291329
}
13301330

1331-
perfLogger.logStartResolveModule(moduleName /* , containingFile, ModuleResolutionKind[moduleResolution]*/);
1331+
perfLogger?.logStartResolveModule(moduleName /* , containingFile, ModuleResolutionKind[moduleResolution]*/);
13321332
switch (moduleResolution) {
13331333
case ModuleResolutionKind.Node16:
13341334
result = node16ModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode);
@@ -1348,8 +1348,8 @@ export function resolveModuleName(moduleName: string, containingFile: string, co
13481348
default:
13491349
return Debug.fail(`Unexpected moduleResolution: ${moduleResolution}`);
13501350
}
1351-
if (result && result.resolvedModule) perfLogger.logInfoEvent(`Module "${moduleName}" resolved to "${result.resolvedModule.resolvedFileName}"`);
1352-
perfLogger.logStopResolveModule((result && result.resolvedModule) ? "" + result.resolvedModule.resolvedFileName : "null");
1351+
if (result && result.resolvedModule) perfLogger?.logInfoEvent(`Module "${moduleName}" resolved to "${result.resolvedModule.resolvedFileName}"`);
1352+
perfLogger?.logStopResolveModule((result && result.resolvedModule) ? "" + result.resolvedModule.resolvedFileName : "null");
13531353

13541354
cache?.getOrCreateCacheForDirectory(containingDirectory, redirectedReference).set(moduleName, resolutionMode, result);
13551355
if (!isExternalModuleNameRelative(moduleName)) {

src/compiler/parser.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1321,7 +1321,7 @@ export function createSourceFile(fileName: string, sourceText: string, languageV
13211321
performance.mark("beforeParse");
13221322
let result: SourceFile;
13231323

1324-
perfLogger.logStartParseSourceFile(fileName);
1324+
perfLogger?.logStartParseSourceFile(fileName);
13251325
const {
13261326
languageVersion,
13271327
setExternalModuleIndicator: overrideSetExternalModuleIndicator,
@@ -1337,7 +1337,7 @@ export function createSourceFile(fileName: string, sourceText: string, languageV
13371337
};
13381338
result = Parser.parseSourceFile(fileName, sourceText, languageVersion, /*syntaxCursor*/ undefined, setParentNodes, scriptKind, setIndicator);
13391339
}
1340-
perfLogger.logStopParseSourceFile();
1340+
perfLogger?.logStopParseSourceFile();
13411341

13421342
performance.mark("afterParse");
13431343
performance.measure("Parse", "beforeParse", "afterParse");

src/compiler/perfLogger.ts

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { noop } from "./_namespaces/ts";
2-
31
/** @internal */
42
export interface PerfLogger {
53
logEvent(msg: string): void;
@@ -24,28 +22,6 @@ export interface PerfLogger {
2422
logStopScheduledOperation(): void;
2523
}
2624

27-
const 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-
};
4925

5026
// Load optional module to enable Event Tracing for Windows
5127
// See https://github.com/microsoft/typescript-etw for more information
@@ -66,4 +42,4 @@ catch (e) {
6642
*
6743
* @internal
6844
*/
69-
export const perfLogger: PerfLogger = etwModule?.logEvent ? etwModule : nullLogger;
45+
export const perfLogger: PerfLogger | undefined = etwModule?.logEvent ? etwModule : undefined;

src/compiler/sys.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,14 +1814,14 @@ export let sys: System = (() => {
18141814
}
18151815

18161816
function readFile(fileName: string, _encoding?: string): string | undefined {
1817-
perfLogger.logStartReadFile(fileName);
1817+
perfLogger?.logStartReadFile(fileName);
18181818
const file = readFileWorker(fileName, _encoding);
1819-
perfLogger.logStopReadFile();
1819+
perfLogger?.logStopReadFile();
18201820
return file;
18211821
}
18221822

18231823
function writeFile(fileName: string, data: string, writeByteOrderMark?: boolean): void {
1824-
perfLogger.logEvent("WriteFile: " + fileName);
1824+
perfLogger?.logEvent("WriteFile: " + fileName);
18251825
// If a BOM is required, emit one
18261826
if (writeByteOrderMark) {
18271827
data = byteOrderMarkIndicator + data;
@@ -1841,7 +1841,7 @@ export let sys: System = (() => {
18411841
}
18421842

18431843
function getAccessibleFileSystemEntries(path: string): FileSystemEntries {
1844-
perfLogger.logEvent("ReadDir: " + (path || "."));
1844+
perfLogger?.logEvent("ReadDir: " + (path || "."));
18451845
try {
18461846
const entries = _fs.readdirSync(path || ".", { withFileTypes: true });
18471847
const files: string[] = [];

src/compiler/watchPublic.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -843,19 +843,19 @@ export function createWatchProgram<T extends BuilderProgram>(host: WatchCompiler
843843
function updateProgram() {
844844
switch (reloadLevel) {
845845
case ConfigFileProgramReloadLevel.Partial:
846-
perfLogger.logStartUpdateProgram("PartialConfigReload");
846+
perfLogger?.logStartUpdateProgram("PartialConfigReload");
847847
reloadFileNamesFromConfigFile();
848848
break;
849849
case ConfigFileProgramReloadLevel.Full:
850-
perfLogger.logStartUpdateProgram("FullConfigReload");
850+
perfLogger?.logStartUpdateProgram("FullConfigReload");
851851
reloadConfigFile();
852852
break;
853853
default:
854-
perfLogger.logStartUpdateProgram("SynchronizeProgram");
854+
perfLogger?.logStartUpdateProgram("SynchronizeProgram");
855855
synchronizeProgram();
856856
break;
857857
}
858-
perfLogger.logStopUpdateProgram("Done");
858+
perfLogger?.logStopUpdateProgram("Done");
859859
return getCurrentBuilderProgram();
860860
}
861861

src/server/project.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1259,7 +1259,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
12591259
*/
12601260
updateGraph(): boolean {
12611261
tracing?.push(tracing.Phase.Session, "updateGraph", { name: this.projectName, kind: ProjectKind[this.projectKind] });
1262-
perfLogger.logStartUpdateGraph();
1262+
perfLogger?.logStartUpdateGraph();
12631263
this.resolutionCache.startRecordingFilesWithChangedResolutions();
12641264

12651265
const hasNewProgram = this.updateGraphWorker();
@@ -1305,7 +1305,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
13051305
// Preload auto import provider so it's not created during completions request
13061306
this.getPackageJsonAutoImportProvider();
13071307
}
1308-
perfLogger.logStopUpdateGraph();
1308+
perfLogger?.logStopUpdateGraph();
13091309
tracing?.pop();
13101310
return !hasNewProgram;
13111311
}

src/server/session.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,7 @@ export class Session<TMessage = string> implements EventSender {
11771177

11781178
protected writeMessage(msg: protocol.Message) {
11791179
const msgText = formatMessage(msg, this.logger, this.byteLength, this.host.newLine);
1180-
perfLogger.logEvent(`Response message size: ${msgText.length}`);
1180+
perfLogger?.logEvent(`Response message size: ${msgText.length}`);
11811181
this.host.write(msgText);
11821182
}
11831183

@@ -3540,7 +3540,7 @@ export class Session<TMessage = string> implements EventSender {
35403540
relevantFile = request.arguments && (request as protocol.FileRequest).arguments.file ? (request as protocol.FileRequest).arguments : undefined;
35413541

35423542
tracing?.instant(tracing.Phase.Session, "request", { seq: request.seq, command: request.command });
3543-
perfLogger.logStartCommand("" + request.command, this.toStringMessage(message).substring(0, 100));
3543+
perfLogger?.logStartCommand("" + request.command, this.toStringMessage(message).substring(0, 100));
35443544

35453545
tracing?.push(tracing.Phase.Session, "executeCommand", { seq: request.seq, command: request.command }, /*separateBeginAndEnd*/ true);
35463546
const { response, responseRequired } = this.executeCommand(request);
@@ -3557,7 +3557,7 @@ export class Session<TMessage = string> implements EventSender {
35573557
}
35583558

35593559
// Note: Log before writing the response, else the editor can complete its activity before the server does
3560-
perfLogger.logStopCommand("" + request.command, "Success");
3560+
perfLogger?.logStopCommand("" + request.command, "Success");
35613561
tracing?.instant(tracing.Phase.Session, "response", { seq: request.seq, command: request.command, success: !!response });
35623562
if (response) {
35633563
this.doOutput(response, request.command, request.seq, /*success*/ true);
@@ -3572,14 +3572,14 @@ export class Session<TMessage = string> implements EventSender {
35723572

35733573
if (err instanceof OperationCanceledException) {
35743574
// Handle cancellation exceptions
3575-
perfLogger.logStopCommand("" + (request && request.command), "Canceled: " + err);
3575+
perfLogger?.logStopCommand("" + (request && request.command), "Canceled: " + err);
35763576
tracing?.instant(tracing.Phase.Session, "commandCanceled", { seq: request?.seq, command: request?.command });
35773577
this.doOutput({ canceled: true }, request!.command, request!.seq, /*success*/ true);
35783578
return;
35793579
}
35803580

35813581
this.logErrorWorker(err, this.toStringMessage(message), relevantFile);
3582-
perfLogger.logStopCommand("" + (request && request.command), "Error: " + err);
3582+
perfLogger?.logStopCommand("" + (request && request.command), "Error: " + err);
35833583
tracing?.instant(tracing.Phase.Session, "commandError", { seq: request?.seq, command: request?.command, message: (err as Error).message });
35843584

35853585
this.doOutput(

src/server/utilities.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ export class ThrottledOperations {
4848
}
4949

5050
private static run(self: ThrottledOperations, operationId: string, cb: () => void) {
51-
perfLogger.logStartScheduledOperation(operationId);
51+
perfLogger?.logStartScheduledOperation(operationId);
5252
self.pendingTimeouts.delete(operationId);
5353
if (self.logger) {
5454
self.logger.info(`Running: ${operationId}`);
5555
}
5656
cb();
57-
perfLogger.logStopScheduledOperation();
57+
perfLogger?.logStopScheduledOperation();
5858
}
5959
}
6060

@@ -75,7 +75,7 @@ export class GcTimer {
7575
private static run(self: GcTimer) {
7676
self.timerId = undefined;
7777

78-
perfLogger.logStartScheduledOperation("GC collect");
78+
perfLogger?.logStartScheduledOperation("GC collect");
7979
const log = self.logger.hasLevel(LogLevel.requestTime);
8080
const before = log && self.host.getMemoryUsage!(); // TODO: GH#18217
8181

@@ -84,7 +84,7 @@ export class GcTimer {
8484
const after = self.host.getMemoryUsage!(); // TODO: GH#18217
8585
self.logger.perftrc(`GC::before ${before}, after ${after}`);
8686
}
87-
perfLogger.logStopScheduledOperation();
87+
perfLogger?.logStopScheduledOperation();
8888
}
8989
}
9090

src/tsserver/nodeServer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,13 +259,13 @@ export function initializeNodeSystem(): StartInput {
259259
msg(s: string, type: Msg = Msg.Err) {
260260
switch (type) {
261261
case Msg.Info:
262-
perfLogger.logInfoEvent(s);
262+
perfLogger?.logInfoEvent(s);
263263
break;
264264
case Msg.Perf:
265-
perfLogger.logPerfEvent(s);
265+
perfLogger?.logPerfEvent(s);
266266
break;
267267
default: // Msg.Err
268-
perfLogger.logErrEvent(s);
268+
perfLogger?.logErrEvent(s);
269269
break;
270270
}
271271

0 commit comments

Comments
 (0)