Skip to content

Commit 736f09d

Browse files
committed
Added profiler event for triggering heap snapshots when using ts-perf
1 parent 49f3bbf commit 736f09d

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

src/compiler/core.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1151,9 +1151,23 @@ namespace ts {
11511151
/** Performance measurements for the compiler. */
11521152
/*@internal*/
11531153
export namespace performance {
1154+
declare const onProfilerEvent: { (markName: string): void; profiler: boolean; };
1155+
let profilerEvent: (markName: string) => void;
11541156
let counters: Map<number>;
11551157
let measures: Map<number>;
11561158

1159+
/**
1160+
* Emit a performance event if ts-profiler is connected. This is primarily used
1161+
* to generate heap snapshots.
1162+
*
1163+
* @param eventName A name for the event.
1164+
*/
1165+
export function emit(eventName: string) {
1166+
if (profilerEvent) {
1167+
onProfilerEvent(eventName);
1168+
}
1169+
}
1170+
11571171
/**
11581172
* Increments a counter with the specified name.
11591173
*
@@ -1189,7 +1203,7 @@ namespace ts {
11891203
*/
11901204
export function measure(measureName: string, marker: number) {
11911205
if (measures) {
1192-
measures[measureName] = (getProperty(measures, measureName) || 0) + (mark() - marker);
1206+
measures[measureName] = (getProperty(measures, measureName) || 0) + (Date.now() - marker);
11931207
}
11941208
}
11951209

@@ -1216,12 +1230,17 @@ namespace ts {
12161230
commentTime: 0,
12171231
sourceMapTime: 0
12181232
};
1233+
1234+
profilerEvent = typeof onProfilerEvent === "function" && onProfilerEvent.profiler === true
1235+
? onProfilerEvent
1236+
: undefined;
12191237
}
12201238

12211239
/** Disables (and clears) performance measurements for the compiler. */
12221240
export function disable() {
12231241
counters = undefined;
12241242
measures = undefined;
1243+
profilerEvent = undefined;
12251244
}
12261245
}
12271246
}

0 commit comments

Comments
 (0)