Scheduling Profiler: Show Suspense resource .displayName (#22451)
Brian Vaughn committed
Sep 28, 2021 at 11:29 UTC
9175f4d15edfa091aa34b79dea21c3686f4fd8ed
12 files changed
+406
-329
packages/react-devtools-scheduling-profiler/src/EventTooltip.css
+1
-1
@@ -46,7 +46,7 @@
46
white-space: nowrap;
47
}
48
49
-.DetailsGridURL {
49
+.DetailsGridLongValue {
50
word-break: break-all;
51
max-height: 50vh;
52
overflow: hidden;
packages/react-devtools-scheduling-profiler/src/EventTooltip.js
+7
@@ -335,6 +335,7 @@ const TooltipSuspenseEvent = ({
335
componentName,
336
duration,
337
phase,
338
+ promiseName,
339
resolution,
340
timestamp,
341
warning,
@@ -356,6 +357,12 @@ const TooltipSuspenseEvent = ({
357
{label}
358
<div className={styles.Divider} />
359
<div className={styles.DetailsGrid}>
360
+ {promiseName !== null && (
361
+ <>
362
+ <div className={styles.DetailsGridLabel}>Resource:</div>
363
+ <div className={styles.DetailsGridLongValue}>{promiseName}</div>
364
+ </>
365
+ )}
366
<div className={styles.DetailsGridLabel}>Status:</div>
367
<div>{resolution}</div>
368
<div className={styles.DetailsGridLabel}>Timestamp:</div>
packages/react-devtools-scheduling-profiler/src/content-views/SuspenseEventsView.js
+5
-1
@@ -80,6 +80,7 @@ export class SuspenseEventsView extends View {
80
this._intrinsicSize = {
81
width: duration,
82
height: (this._maxDepth + 1) * ROW_WITH_BORDER_HEIGHT,
83
+ hideScrollBarIfLessThanHeight: ROW_WITH_BORDER_HEIGHT,
84
maxInitialHeight: ROW_WITH_BORDER_HEIGHT * MAX_ROWS_TO_SHOW_INITIALLY,
85
};
86
}
@@ -113,6 +114,7 @@ export class SuspenseEventsView extends View {
114
depth,
115
duration,
116
phase,
117
+ promiseName,
118
resolution,
119
timestamp,
120
warning,
@@ -208,7 +210,9 @@ export class SuspenseEventsView extends View {
210
);
211
212
let label = 'suspended';
211
- if (componentName != null) {
213
+ if (promiseName != null) {
214
+ label = promiseName;
215
+ } else if (componentName != null) {
216
label = `${componentName} ${label}`;
217
}
218
if (phase !== null) {
packages/react-devtools-scheduling-profiler/src/import-worker/__tests__/preprocessData-test.internal.js
+40
@@ -1195,6 +1195,46 @@ describe('preprocessData', () => {
1195
`);
1196
});
1197
1198
+ it('should include a suspended resource "displayName" if one is set', async () => {
1199
+ let promise = null;
1200
+ let resolvedValue = null;
1201
+ function readValue(value) {
1202
+ if (resolvedValue !== null) {
1203
+ return resolvedValue;
1204
+ } else if (promise === null) {
1205
+ promise = Promise.resolve(true).then(() => {
1206
+ resolvedValue = value;
1207
+ });
1208
+ promise.displayName = 'Testing displayName';
1209
+ }
1210
+ throw promise;
1211
+ }
1212
+
1213
+ function Component() {
1214
+ const value = readValue(123);
1215
+ return value;
1216
+ }
1217
+
1218
+ if (gate(flags => flags.enableSchedulingProfiler)) {
1219
+ const testMarks = [creactCpuProfilerSample()];
1220
+
1221
+ const root = ReactDOM.createRoot(document.createElement('div'));
1222
+ act(() =>
1223
+ root.render(
1224
+ <React.Suspense fallback="Loading...">
1225
+ <Component />
1226
+ </React.Suspense>,
1227
+ ),
1228
+ );
1229
+
1230
+ testMarks.push(...createUserTimingData(clearedMarks));
1231
+
1232
+ const data = await preprocessData(testMarks);
1233
+ expect(data.suspenseEvents).toHaveLength(1);
1234
+ expect(data.suspenseEvents[0].promiseName).toBe('Testing displayName');
1235
+ }
1236
+ });
1237
+
1238
describe('warnings', () => {
1239
describe('long event handlers', () => {
1240
it('should not warn when React scedules a (sync) update inside of a short event handler', async () => {
packages/react-devtools-scheduling-profiler/src/import-worker/preprocessData.js
+8
-3
@@ -564,9 +564,13 @@ function processTimelineEvent(
564
565
// React Events - suspense
566
else if (name.startsWith('--suspense-suspend-')) {
567
- const [id, componentName, phase, laneBitmaskString] = name
568
- .substr(19)
569
- .split('-');
567
+ const [
568
+ id,
569
+ componentName,
570
+ phase,
571
+ laneBitmaskString,
572
+ promiseName,
573
+ ] = name.substr(19).split('-');
574
const lanes = getLanesFromTransportDecimalBitmask(laneBitmaskString);
575
576
const availableDepths = new Array(
@@ -595,6 +599,7 @@ function processTimelineEvent(
599
duration: null,
600
id,
601
phase: ((phase: any): Phase),
602
+ promiseName: promiseName || null,
603
resolution: 'unresolved',
604
resuspendTimestamps: null,
605
timestamp: startTime,
packages/react-devtools-scheduling-profiler/src/types.js
+1
@@ -60,6 +60,7 @@ export type SuspenseEvent = {|
60
duration: number | null,
61
+id: string,
62
+phase: Phase | null,
63
+ promiseName: string | null,
64
resolution: 'rejected' | 'resolved' | 'unresolved',
65
resuspendTimestamps: Array<number> | null,
66
+type: 'suspense',
packages/react-devtools-shared/src/devtools/views/ErrorBoundary/cache.js
+3
@@ -70,6 +70,9 @@ export function findGitHubIssue(errorMessage: string): GitHubIssue | null {
70
then(callback) {
71
callbacks.add(callback);
72
},
73
+
74
+ // Optional property used by Scheduling Profiler:
75
+ displayName: `Searching GitHub issues for error "${errorMessage}"`,
76
};
77
const wake = () => {
78
// This assumes they won't throw.
packages/react-devtools-shared/src/dynamicImportCache.js
+3
@@ -73,6 +73,9 @@ export function loadModule(moduleLoaderFunction: ModuleLoaderFunction): Module {
73
then(callback) {
74
callbacks.add(callback);
75
},
76
+
77
+ // Optional property used by Scheduling Profiler:
78
+ displayName: `Loading module "${moduleLoaderFunction.name}"`,
79
};
80
81
const wake = () => {
packages/react-devtools-shared/src/hookNamesCache.js
+3
@@ -92,6 +92,9 @@ export function loadHookNames(
92
then(callback) {
93
callbacks.add(callback);
94
},
95
+
96
+ // Optional property used by Scheduling Profiler:
97
+ displayName: `Loading hook names for ${element.displayName || 'Unknown'}`,
98
};
99
100
let timeoutID;
packages/react-devtools-shared/src/inspectedElementCache.js
+4
@@ -94,7 +94,11 @@ export function inspectElement(
94
then(callback) {
95
callbacks.add(callback);
96
},
97
+
98
+ // Optional property used by Scheduling Profiler:
99
+ displayName: `Inspecting ${element.displayName || 'Unknown'}`,
100
};
101
+
102
const wake = () => {
103
// This assumes they won't throw.
104
callbacks.forEach(callback => callback());
packages/react-reconciler/src/SchedulingProfiler.js
+8
-1
@@ -194,9 +194,16 @@ export function markComponentSuspended(
194
const id = getWakeableID(wakeable);
195
const componentName = getComponentNameFromFiber(fiber) || 'Unknown';
196
const phase = fiber.alternate === null ? 'mount' : 'update';
197
+
198
+ // Following the non-standard fn.displayName convention,
199
+ // frameworks like Relay may also annotate Promises with a displayName,
200
+ // describing what operation/data the thrown Promise is related to.
201
+ // When this is available we should pass it along to the Scheduling Profiler.
202
+ const displayName = (wakeable: any).displayName || '';
203
+
204
// TODO (scheduling profiler) Add component stack id
205
markAndClear(
199
- `--suspense-${eventType}-${id}-${componentName}-${phase}-${lanes}`,
206
+ `--suspense-${eventType}-${id}-${componentName}-${phase}-${lanes}-${displayName}`,
207
);
208
wakeable.then(
209
() => markAndClear(`--suspense-resolved-${id}-${componentName}`),
packages/react-reconciler/src/__tests__/SchedulingProfiler-test.internal.js
+323
-323
@@ -90,19 +90,19 @@ describe('SchedulingProfiler', () => {
90
91
if (gate(flags => flags.enableSchedulingProfiler)) {
92
expect(getMarks()).toMatchInlineSnapshot(`
93
- Array [
94
- "--schedule-render-1",
95
- "--render-start-1",
96
- "--render-stop",
97
- "--commit-start-1",
98
- "--react-version-17.0.3",
99
- "--profiler-version-1",
100
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
101
- "--layout-effects-start-1",
102
- "--layout-effects-stop",
103
- "--commit-stop",
104
- ]
105
- `);
93
+ Array [
94
+ "--schedule-render-1",
95
+ "--render-start-1",
96
+ "--render-stop",
97
+ "--commit-start-1",
98
+ "--react-version-17.0.3",
99
+ "--profiler-version-1",
100
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
101
+ "--layout-effects-start-1",
102
+ "--layout-effects-stop",
103
+ "--commit-stop",
104
+ ]
105
+ `);
106
}
107
});
108
@@ -111,10 +111,10 @@ describe('SchedulingProfiler', () => {
111
112
if (gate(flags => flags.enableSchedulingProfiler)) {
113
expect(getMarks()).toMatchInlineSnapshot(`
114
- Array [
115
- "--schedule-render-16",
116
- ]
117
- `);
114
+ Array [
115
+ "--schedule-render-16",
116
+ ]
117
+ `);
118
}
119
120
clearPendingMarks();
@@ -123,18 +123,18 @@ describe('SchedulingProfiler', () => {
123
124
if (gate(flags => flags.enableSchedulingProfiler)) {
125
expect(getMarks()).toMatchInlineSnapshot(`
126
- Array [
127
- "--render-start-16",
128
- "--render-stop",
129
- "--commit-start-16",
130
- "--react-version-17.0.3",
131
- "--profiler-version-1",
132
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
133
- "--layout-effects-start-16",
134
- "--layout-effects-stop",
135
- "--commit-stop",
136
- ]
137
- `);
126
+ Array [
127
+ "--render-start-16",
128
+ "--render-stop",
129
+ "--commit-start-16",
130
+ "--react-version-17.0.3",
131
+ "--profiler-version-1",
132
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
133
+ "--layout-effects-start-16",
134
+ "--layout-effects-stop",
135
+ "--commit-stop",
136
+ ]
137
+ `);
138
}
139
});
140
@@ -159,14 +159,14 @@ describe('SchedulingProfiler', () => {
159
160
if (gate(flags => flags.enableSchedulingProfiler)) {
161
expect(getMarks()).toMatchInlineSnapshot(`
162
- Array [
163
- "--schedule-render-64",
164
- "--render-start-64",
165
- "--component-render-start-Foo",
166
- "--component-render-stop",
167
- "--render-yield",
168
- ]
169
- `);
162
+ Array [
163
+ "--schedule-render-64",
164
+ "--render-start-64",
165
+ "--component-render-start-Foo",
166
+ "--component-render-stop",
167
+ "--render-yield",
168
+ ]
169
+ `);
170
}
171
} else {
172
ReactNoop.render(<Foo />);
@@ -176,8 +176,8 @@ describe('SchedulingProfiler', () => {
176
177
if (gate(flags => flags.enableSchedulingProfiler)) {
178
expect(getMarks()).toMatchInlineSnapshot(`
179
- Array []
180
- `);
179
+ Array []
180
+ `);
181
}
182
}
183
});
@@ -196,22 +196,22 @@ describe('SchedulingProfiler', () => {
196
197
if (gate(flags => flags.enableSchedulingProfiler)) {
198
expect(getMarks()).toMatchInlineSnapshot(`
199
- Array [
200
- "--schedule-render-1",
201
- "--render-start-1",
202
- "--component-render-start-Example",
203
- "--component-render-stop",
204
- "--suspense-suspend-0-Example-mount-1",
205
- "--render-stop",
206
- "--commit-start-1",
207
- "--react-version-17.0.3",
208
- "--profiler-version-1",
209
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
210
- "--layout-effects-start-1",
211
- "--layout-effects-stop",
212
- "--commit-stop",
213
- ]
214
- `);
199
+ Array [
200
+ "--schedule-render-1",
201
+ "--render-start-1",
202
+ "--component-render-start-Example",
203
+ "--component-render-stop",
204
+ "--suspense-suspend-0-Example-mount-1-",
205
+ "--render-stop",
206
+ "--commit-start-1",
207
+ "--react-version-17.0.3",
208
+ "--profiler-version-1",
209
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
210
+ "--layout-effects-start-1",
211
+ "--layout-effects-stop",
212
+ "--commit-stop",
213
+ ]
214
+ `);
215
}
216
217
clearPendingMarks();
@@ -219,10 +219,10 @@ describe('SchedulingProfiler', () => {
219
await fakeSuspensePromise;
220
if (gate(flags => flags.enableSchedulingProfiler)) {
221
expect(getMarks()).toMatchInlineSnapshot(`
222
- Array [
223
- "--suspense-resolved-0-Example",
224
- ]
225
- `);
222
+ Array [
223
+ "--suspense-resolved-0-Example",
224
+ ]
225
+ `);
226
}
227
});
228
@@ -240,22 +240,22 @@ describe('SchedulingProfiler', () => {
240
241
if (gate(flags => flags.enableSchedulingProfiler)) {
242
expect(getMarks()).toMatchInlineSnapshot(`
243
- Array [
244
- "--schedule-render-1",
245
- "--render-start-1",
246
- "--component-render-start-Example",
247
- "--component-render-stop",
248
- "--suspense-suspend-0-Example-mount-1",
249
- "--render-stop",
250
- "--commit-start-1",
251
- "--react-version-17.0.3",
252
- "--profiler-version-1",
253
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
254
- "--layout-effects-start-1",
255
- "--layout-effects-stop",
256
- "--commit-stop",
257
- ]
258
- `);
243
+ Array [
244
+ "--schedule-render-1",
245
+ "--render-start-1",
246
+ "--component-render-start-Example",
247
+ "--component-render-stop",
248
+ "--suspense-suspend-0-Example-mount-1-",
249
+ "--render-stop",
250
+ "--commit-start-1",
251
+ "--react-version-17.0.3",
252
+ "--profiler-version-1",
253
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
254
+ "--layout-effects-start-1",
255
+ "--layout-effects-stop",
256
+ "--commit-stop",
257
+ ]
258
+ `);
259
}
260
261
clearPendingMarks();
@@ -263,10 +263,10 @@ describe('SchedulingProfiler', () => {
263
await expect(fakeSuspensePromise).rejects.toThrow();
264
if (gate(flags => flags.enableSchedulingProfiler)) {
265
expect(getMarks()).toMatchInlineSnapshot(`
266
- Array [
267
- "--suspense-rejected-0-Example",
268
- ]
269
- `);
266
+ Array [
267
+ "--suspense-rejected-0-Example",
268
+ ]
269
+ `);
270
}
271
});
272
@@ -285,10 +285,10 @@ describe('SchedulingProfiler', () => {
285
286
if (gate(flags => flags.enableSchedulingProfiler)) {
287
expect(getMarks()).toMatchInlineSnapshot(`
288
- Array [
289
- "--schedule-render-16",
290
- ]
291
- `);
288
+ Array [
289
+ "--schedule-render-16",
290
+ ]
291
+ `);
292
}
293
294
clearPendingMarks();
@@ -297,21 +297,21 @@ describe('SchedulingProfiler', () => {
297
298
if (gate(flags => flags.enableSchedulingProfiler)) {
299
expect(getMarks()).toMatchInlineSnapshot(`
300
- Array [
301
- "--render-start-16",
302
- "--component-render-start-Example",
303
- "--component-render-stop",
304
- "--suspense-suspend-0-Example-mount-16",
305
- "--render-stop",
306
- "--commit-start-16",
307
- "--react-version-17.0.3",
308
- "--profiler-version-1",
309
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
310
- "--layout-effects-start-16",
311
- "--layout-effects-stop",
312
- "--commit-stop",
313
- ]
314
- `);
300
+ Array [
301
+ "--render-start-16",
302
+ "--component-render-start-Example",
303
+ "--component-render-stop",
304
+ "--suspense-suspend-0-Example-mount-16-",
305
+ "--render-stop",
306
+ "--commit-start-16",
307
+ "--react-version-17.0.3",
308
+ "--profiler-version-1",
309
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
310
+ "--layout-effects-start-16",
311
+ "--layout-effects-stop",
312
+ "--commit-stop",
313
+ ]
314
+ `);
315
}
316
317
clearPendingMarks();
@@ -319,10 +319,10 @@ describe('SchedulingProfiler', () => {
319
await fakeSuspensePromise;
320
if (gate(flags => flags.enableSchedulingProfiler)) {
321
expect(getMarks()).toMatchInlineSnapshot(`
322
- Array [
323
- "--suspense-resolved-0-Example",
324
- ]
325
- `);
322
+ Array [
323
+ "--suspense-resolved-0-Example",
324
+ ]
325
+ `);
326
}
327
});
328
@@ -341,10 +341,10 @@ describe('SchedulingProfiler', () => {
341
342
if (gate(flags => flags.enableSchedulingProfiler)) {
343
expect(getMarks()).toMatchInlineSnapshot(`
344
- Array [
345
- "--schedule-render-16",
346
- ]
347
- `);
344
+ Array [
345
+ "--schedule-render-16",
346
+ ]
347
+ `);
348
}
349
350
clearPendingMarks();
@@ -353,21 +353,21 @@ describe('SchedulingProfiler', () => {
353
354
if (gate(flags => flags.enableSchedulingProfiler)) {
355
expect(getMarks()).toMatchInlineSnapshot(`
356
- Array [
357
- "--render-start-16",
358
- "--component-render-start-Example",
359
- "--component-render-stop",
360
- "--suspense-suspend-0-Example-mount-16",
361
- "--render-stop",
362
- "--commit-start-16",
363
- "--react-version-17.0.3",
364
- "--profiler-version-1",
365
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
366
- "--layout-effects-start-16",
367
- "--layout-effects-stop",
368
- "--commit-stop",
369
- ]
370
- `);
356
+ Array [
357
+ "--render-start-16",
358
+ "--component-render-start-Example",
359
+ "--component-render-stop",
360
+ "--suspense-suspend-0-Example-mount-16-",
361
+ "--render-stop",
362
+ "--commit-start-16",
363
+ "--react-version-17.0.3",
364
+ "--profiler-version-1",
365
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
366
+ "--layout-effects-start-16",
367
+ "--layout-effects-stop",
368
+ "--commit-stop",
369
+ ]
370
+ `);
371
}
372
373
clearPendingMarks();
@@ -375,10 +375,10 @@ describe('SchedulingProfiler', () => {
375
await expect(fakeSuspensePromise).rejects.toThrow();
376
if (gate(flags => flags.enableSchedulingProfiler)) {
377
expect(getMarks()).toMatchInlineSnapshot(`
378
- Array [
379
- "--suspense-rejected-0-Example",
380
- ]
381
- `);
378
+ Array [
379
+ "--suspense-rejected-0-Example",
380
+ ]
381
+ `);
382
}
383
});
384
@@ -397,10 +397,10 @@ describe('SchedulingProfiler', () => {
397
398
if (gate(flags => flags.enableSchedulingProfiler)) {
399
expect(getMarks()).toMatchInlineSnapshot(`
400
- Array [
401
- "--schedule-render-16",
402
- ]
403
- `);
400
+ Array [
401
+ "--schedule-render-16",
402
+ ]
403
+ `);
404
}
405
406
clearPendingMarks();
@@ -409,30 +409,30 @@ describe('SchedulingProfiler', () => {
409
410
if (gate(flags => flags.enableSchedulingProfiler)) {
411
expect(getMarks()).toMatchInlineSnapshot(`
412
- Array [
413
- "--render-start-16",
414
- "--component-render-start-Example",
415
- "--component-render-stop",
416
- "--render-stop",
417
- "--commit-start-16",
418
- "--react-version-17.0.3",
419
- "--profiler-version-1",
420
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
421
- "--layout-effects-start-16",
422
- "--schedule-state-update-1-Example",
423
- "--layout-effects-stop",
424
- "--render-start-1",
425
- "--component-render-start-Example",
426
- "--component-render-stop",
427
- "--render-stop",
428
- "--commit-start-1",
429
- "--react-version-17.0.3",
430
- "--profiler-version-1",
431
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
432
- "--commit-stop",
433
- "--commit-stop",
434
- ]
435
- `);
412
+ Array [
413
+ "--render-start-16",
414
+ "--component-render-start-Example",
415
+ "--component-render-stop",
416
+ "--render-stop",
417
+ "--commit-start-16",
418
+ "--react-version-17.0.3",
419
+ "--profiler-version-1",
420
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
421
+ "--layout-effects-start-16",
422
+ "--schedule-state-update-1-Example",
423
+ "--layout-effects-stop",
424
+ "--render-start-1",
425
+ "--component-render-start-Example",
426
+ "--component-render-stop",
427
+ "--render-stop",
428
+ "--commit-start-1",
429
+ "--react-version-17.0.3",
430
+ "--profiler-version-1",
431
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
432
+ "--commit-stop",
433
+ "--commit-stop",
434
+ ]
435
+ `);
436
}
437
});
438
@@ -450,10 +450,10 @@ describe('SchedulingProfiler', () => {
450
451
if (gate(flags => flags.enableSchedulingProfiler)) {
452
expect(getMarks()).toMatchInlineSnapshot(`
453
- Array [
454
- "--schedule-render-16",
455
- ]
456
- `);
453
+ Array [
454
+ "--schedule-render-16",
455
+ ]
456
+ `);
457
}
458
459
clearPendingMarks();
@@ -462,30 +462,30 @@ describe('SchedulingProfiler', () => {
462
463
if (gate(flags => flags.enableSchedulingProfiler)) {
464
expect(getMarks()).toMatchInlineSnapshot(`
465
- Array [
466
- "--render-start-16",
467
- "--component-render-start-Example",
468
- "--component-render-stop",
469
- "--render-stop",
470
- "--commit-start-16",
471
- "--react-version-17.0.3",
472
- "--profiler-version-1",
473
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
474
- "--layout-effects-start-16",
475
- "--schedule-forced-update-1-Example",
476
- "--layout-effects-stop",
477
- "--render-start-1",
478
- "--component-render-start-Example",
479
- "--component-render-stop",
480
- "--render-stop",
481
- "--commit-start-1",
482
- "--react-version-17.0.3",
483
- "--profiler-version-1",
484
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
485
- "--commit-stop",
486
- "--commit-stop",
487
- ]
488
- `);
465
+ Array [
466
+ "--render-start-16",
467
+ "--component-render-start-Example",
468
+ "--component-render-stop",
469
+ "--render-stop",
470
+ "--commit-start-16",
471
+ "--react-version-17.0.3",
472
+ "--profiler-version-1",
473
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
474
+ "--layout-effects-start-16",
475
+ "--schedule-forced-update-1-Example",
476
+ "--layout-effects-stop",
477
+ "--render-start-1",
478
+ "--component-render-start-Example",
479
+ "--component-render-stop",
480
+ "--render-stop",
481
+ "--commit-start-1",
482
+ "--react-version-17.0.3",
483
+ "--profiler-version-1",
484
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
485
+ "--commit-stop",
486
+ "--commit-stop",
487
+ ]
488
+ `);
489
}
490
});
491
@@ -504,10 +504,10 @@ describe('SchedulingProfiler', () => {
504
505
if (gate(flags => flags.enableSchedulingProfiler)) {
506
expect(getMarks()).toMatchInlineSnapshot(`
507
- Array [
508
- "--schedule-render-16",
509
- ]
510
- `);
507
+ Array [
508
+ "--schedule-render-16",
509
+ ]
510
+ `);
511
}
512
513
clearPendingMarks();
@@ -518,21 +518,21 @@ describe('SchedulingProfiler', () => {
518
519
if (gate(flags => flags.enableSchedulingProfiler)) {
520
expect(getMarks()).toMatchInlineSnapshot(`
521
- Array [
522
- "--render-start-16",
523
- "--component-render-start-Example",
524
- "--schedule-state-update-16-Example",
525
- "--component-render-stop",
526
- "--render-stop",
527
- "--commit-start-16",
528
- "--react-version-17.0.3",
529
- "--profiler-version-1",
530
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
531
- "--layout-effects-start-16",
532
- "--layout-effects-stop",
533
- "--commit-stop",
534
- ]
535
- `);
521
+ Array [
522
+ "--render-start-16",
523
+ "--component-render-start-Example",
524
+ "--schedule-state-update-16-Example",
525
+ "--component-render-stop",
526
+ "--render-stop",
527
+ "--commit-start-16",
528
+ "--react-version-17.0.3",
529
+ "--profiler-version-1",
530
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
531
+ "--layout-effects-start-16",
532
+ "--layout-effects-stop",
533
+ "--commit-stop",
534
+ ]
535
+ `);
536
}
537
});
538
@@ -551,10 +551,10 @@ describe('SchedulingProfiler', () => {
551
552
if (gate(flags => flags.enableSchedulingProfiler)) {
553
expect(getMarks()).toMatchInlineSnapshot(`
554
- Array [
555
- "--schedule-render-16",
556
- ]
557
- `);
554
+ Array [
555
+ "--schedule-render-16",
556
+ ]
557
+ `);
558
}
559
560
clearPendingMarks();
@@ -565,21 +565,21 @@ describe('SchedulingProfiler', () => {
565
566
if (gate(flags => flags.enableSchedulingProfiler)) {
567
expect(getMarks()).toMatchInlineSnapshot(`
568
- Array [
569
- "--render-start-16",
570
- "--component-render-start-Example",
571
- "--schedule-forced-update-16-Example",
572
- "--component-render-stop",
573
- "--render-stop",
574
- "--commit-start-16",
575
- "--react-version-17.0.3",
576
- "--profiler-version-1",
577
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
578
- "--layout-effects-start-16",
579
- "--layout-effects-stop",
580
- "--commit-stop",
581
- ]
582
- `);
568
+ Array [
569
+ "--render-start-16",
570
+ "--component-render-start-Example",
571
+ "--schedule-forced-update-16-Example",
572
+ "--component-render-stop",
573
+ "--render-stop",
574
+ "--commit-start-16",
575
+ "--react-version-17.0.3",
576
+ "--profiler-version-1",
577
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
578
+ "--layout-effects-start-16",
579
+ "--layout-effects-stop",
580
+ "--commit-stop",
581
+ ]
582
+ `);
583
}
584
});
585
@@ -596,10 +596,10 @@ describe('SchedulingProfiler', () => {
596
597
if (gate(flags => flags.enableSchedulingProfiler)) {
598
expect(getMarks()).toMatchInlineSnapshot(`
599
- Array [
600
- "--schedule-render-16",
601
- ]
602
- `);
599
+ Array [
600
+ "--schedule-render-16",
601
+ ]
602
+ `);
603
}
604
605
clearPendingMarks();
@@ -608,30 +608,30 @@ describe('SchedulingProfiler', () => {
608
609
if (gate(flags => flags.enableSchedulingProfiler)) {
610
expect(getMarks()).toMatchInlineSnapshot(`
611
- Array [
612
- "--render-start-16",
613
- "--component-render-start-Example",
614
- "--component-render-stop",
615
- "--render-stop",
616
- "--commit-start-16",
617
- "--react-version-17.0.3",
618
- "--profiler-version-1",
619
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
620
- "--layout-effects-start-16",
621
- "--schedule-state-update-1-Example",
622
- "--layout-effects-stop",
623
- "--render-start-1",
624
- "--component-render-start-Example",
625
- "--component-render-stop",
626
- "--render-stop",
627
- "--commit-start-1",
628
- "--react-version-17.0.3",
629
- "--profiler-version-1",
630
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
631
- "--commit-stop",
632
- "--commit-stop",
633
- ]
634
- `);
611
+ Array [
612
+ "--render-start-16",
613
+ "--component-render-start-Example",
614
+ "--component-render-stop",
615
+ "--render-stop",
616
+ "--commit-start-16",
617
+ "--react-version-17.0.3",
618
+ "--profiler-version-1",
619
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
620
+ "--layout-effects-start-16",
621
+ "--schedule-state-update-1-Example",
622
+ "--layout-effects-stop",
623
+ "--render-start-1",
624
+ "--component-render-start-Example",
625
+ "--component-render-stop",
626
+ "--render-stop",
627
+ "--commit-start-1",
628
+ "--react-version-17.0.3",
629
+ "--profiler-version-1",
630
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
631
+ "--commit-stop",
632
+ "--commit-stop",
633
+ ]
634
+ `);
635
}
636
});
637
@@ -652,33 +652,33 @@ describe('SchedulingProfiler', () => {
652
653
if (gate(flags => flags.enableSchedulingProfiler)) {
654
expect(getMarks()).toMatchInlineSnapshot(`
655
- Array [
656
- "--schedule-render-16",
657
- "--render-start-16",
658
- "--component-render-start-Example",
659
- "--component-render-stop",
660
- "--render-stop",
661
- "--commit-start-16",
662
- "--react-version-17.0.3",
663
- "--profiler-version-1",
664
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
665
- "--layout-effects-start-16",
666
- "--layout-effects-stop",
667
- "--commit-stop",
668
- "--passive-effects-start-16",
669
- "--schedule-state-update-16-Example",
670
- "--passive-effects-stop",
671
- "--render-start-16",
672
- "--component-render-start-Example",
673
- "--component-render-stop",
674
- "--render-stop",
675
- "--commit-start-16",
676
- "--react-version-17.0.3",
677
- "--profiler-version-1",
678
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
679
- "--commit-stop",
680
- ]
681
- `);
655
+ Array [
656
+ "--schedule-render-16",
657
+ "--render-start-16",
658
+ "--component-render-start-Example",
659
+ "--component-render-stop",
660
+ "--render-stop",
661
+ "--commit-start-16",
662
+ "--react-version-17.0.3",
663
+ "--profiler-version-1",
664
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
665
+ "--layout-effects-start-16",
666
+ "--layout-effects-stop",
667
+ "--commit-stop",
668
+ "--passive-effects-start-16",
669
+ "--schedule-state-update-16-Example",
670
+ "--passive-effects-stop",
671
+ "--render-start-16",
672
+ "--component-render-start-Example",
673
+ "--component-render-stop",
674
+ "--render-stop",
675
+ "--commit-start-16",
676
+ "--react-version-17.0.3",
677
+ "--profiler-version-1",
678
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
679
+ "--commit-stop",
680
+ ]
681
+ `);
682
}
683
});
684
@@ -697,22 +697,22 @@ describe('SchedulingProfiler', () => {
697
698
if (gate(flags => flags.enableSchedulingProfiler)) {
699
expect(getMarks()).toMatchInlineSnapshot(`
700
- Array [
701
- "--schedule-render-16",
702
- "--render-start-16",
703
- "--component-render-start-Example",
704
- "--schedule-state-update-16-Example",
705
- "--component-render-stop",
706
- "--render-stop",
707
- "--commit-start-16",
708
- "--react-version-17.0.3",
709
- "--profiler-version-1",
710
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
711
- "--layout-effects-start-16",
712
- "--layout-effects-stop",
713
- "--commit-stop",
714
- ]
715
- `);
700
+ Array [
701
+ "--schedule-render-16",
702
+ "--render-start-16",
703
+ "--component-render-start-Example",
704
+ "--schedule-state-update-16-Example",
705
+ "--component-render-stop",
706
+ "--render-stop",
707
+ "--commit-start-16",
708
+ "--react-version-17.0.3",
709
+ "--profiler-version-1",
710
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
711
+ "--layout-effects-start-16",
712
+ "--layout-effects-stop",
713
+ "--commit-stop",
714
+ ]
715
+ `);
716
}
717
});
718
@@ -742,35 +742,35 @@ describe('SchedulingProfiler', () => {
742
743
if (gate(flags => flags.enableSchedulingProfiler)) {
744
expect(getMarks()).toMatchInlineSnapshot(`
745
- Array [
746
- "--schedule-render-1",
747
- "--render-start-1",
748
- "--component-render-start-ErrorBoundary",
749
- "--component-render-stop",
750
- "--component-render-start-ExampleThatThrows",
751
- "--component-render-start-ExampleThatThrows",
752
- "--component-render-stop",
753
- "--error-ExampleThatThrows-mount-Expected error",
754
- "--render-stop",
755
- "--commit-start-1",
756
- "--react-version-17.0.3",
757
- "--profiler-version-1",
758
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
759
- "--layout-effects-start-1",
760
- "--schedule-state-update-1-ErrorBoundary",
761
- "--layout-effects-stop",
762
- "--commit-stop",
763
- "--render-start-1",
764
- "--component-render-start-ErrorBoundary",
765
- "--component-render-stop",
766
- "--render-stop",
767
- "--commit-start-1",
768
- "--react-version-17.0.3",
769
- "--profiler-version-1",
770
- "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
771
- "--commit-stop",
772
- ]
773
- `);
745
+ Array [
746
+ "--schedule-render-1",
747
+ "--render-start-1",
748
+ "--component-render-start-ErrorBoundary",
749
+ "--component-render-stop",
750
+ "--component-render-start-ExampleThatThrows",
751
+ "--component-render-start-ExampleThatThrows",
752
+ "--component-render-stop",
753
+ "--error-ExampleThatThrows-mount-Expected error",
754
+ "--render-stop",
755
+ "--commit-start-1",
756
+ "--react-version-17.0.3",
757
+ "--profiler-version-1",
758
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
759
+ "--layout-effects-start-1",
760
+ "--schedule-state-update-1-ErrorBoundary",
761
+ "--layout-effects-stop",
762
+ "--commit-stop",
763
+ "--render-start-1",
764
+ "--component-render-start-ErrorBoundary",
765
+ "--component-render-stop",
766
+ "--render-stop",
767
+ "--commit-start-1",
768
+ "--react-version-17.0.3",
769
+ "--profiler-version-1",
770
+ "--react-lane-labels-Sync,InputContinuousHydration,InputContinuous,DefaultHydration,Default,TransitionHydration,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Transition,Retry,Retry,Retry,Retry,Retry,SelectiveHydration,IdleHydration,Idle,Offscreen",
771
+ "--commit-stop",
772
+ ]
773
+ `);
774
}
775
});
776
@@ -804,10 +804,10 @@ describe('SchedulingProfiler', () => {
804
805
if (gate(flags => flags.enableSchedulingProfiler)) {
806
expect(getMarks()).toMatchInlineSnapshot(`
807
- Array [
808
- "--schedule-render-16",
809
- ]
810
- `);
807
+ Array [
808
+ "--schedule-render-16",
809
+ ]
810
+ `);
811
}
812
813
clearPendingMarks();