9
9
10
10
import type { Fiber } from './ReactInternalTypes' ;
11
11
12
+ import type { Lanes } from './ReactFiberLane' ;
13
+
12
14
import getComponentNameFromFiber from './getComponentNameFromFiber' ;
13
15
14
- import { getGroupNameOfHighestPriorityLane } from './ReactFiberLane' ;
16
+ import {
17
+ getGroupNameOfHighestPriorityLane ,
18
+ includesOnlyHydrationLanes ,
19
+ includesOnlyOffscreenLanes ,
20
+ includesOnlyHydrationOrOffscreenLanes ,
21
+ } from './ReactFiberLane' ;
15
22
16
23
import { enableProfilerTimer } from 'shared/ReactFeatureFlags' ;
17
24
@@ -51,7 +58,7 @@ const reusableLaneOptions = {
51
58
} ,
52
59
} ;
53
60
54
- export function setCurrentTrackFromLanes ( lanes : number ) : void {
61
+ export function setCurrentTrackFromLanes ( lanes : Lanes ) : void {
55
62
reusableLaneDevToolDetails . track = getGroupNameOfHighestPriorityLane ( lanes ) ;
56
63
}
57
64
@@ -223,6 +230,7 @@ export function logBlockingStart(
223
230
eventType : null | string ,
224
231
eventIsRepeat : boolean ,
225
232
renderStartTime : number ,
233
+ lanes : Lanes ,
226
234
) : void {
227
235
if ( supportsUserTiming ) {
228
236
reusableLaneDevToolDetails . track = 'Blocking' ;
@@ -240,7 +248,11 @@ export function logBlockingStart(
240
248
}
241
249
if ( updateTime > 0 ) {
242
250
// Log the time from when we called setState until we started rendering.
243
- reusableLaneDevToolDetails . color = 'primary-light' ;
251
+ reusableLaneDevToolDetails . color = includesOnlyHydrationOrOffscreenLanes (
252
+ lanes ,
253
+ )
254
+ ? 'tertiary-light'
255
+ : 'primary-light' ;
244
256
reusableLaneOptions . start = updateTime ;
245
257
reusableLaneOptions . end = renderStartTime ;
246
258
performance . measure ( 'Blocked' , reusableLaneOptions ) ;
@@ -292,33 +304,65 @@ export function logTransitionStart(
292
304
}
293
305
}
294
306
295
- export function logRenderPhase ( startTime : number , endTime : number ) : void {
307
+ export function logRenderPhase (
308
+ startTime : number ,
309
+ endTime : number ,
310
+ lanes : Lanes ,
311
+ ) : void {
296
312
if ( supportsUserTiming ) {
297
- reusableLaneDevToolDetails . color = 'primary-dark' ;
313
+ reusableLaneDevToolDetails . color = includesOnlyHydrationOrOffscreenLanes (
314
+ lanes ,
315
+ )
316
+ ? 'tertiary-dark'
317
+ : 'primary-dark' ;
298
318
reusableLaneOptions . start = startTime ;
299
319
reusableLaneOptions . end = endTime ;
300
- performance . measure ( 'Render' , reusableLaneOptions ) ;
320
+ performance . measure (
321
+ includesOnlyOffscreenLanes ( lanes )
322
+ ? 'Prepared'
323
+ : includesOnlyHydrationLanes ( lanes )
324
+ ? 'Hydrated'
325
+ : 'Render' ,
326
+ reusableLaneOptions ,
327
+ ) ;
301
328
}
302
329
}
303
330
304
331
export function logInterruptedRenderPhase (
305
332
startTime : number ,
306
333
endTime : number ,
334
+ lanes : Lanes ,
307
335
) : void {
308
336
if ( supportsUserTiming ) {
309
- reusableLaneDevToolDetails . color = 'primary-dark' ;
337
+ reusableLaneDevToolDetails . color = includesOnlyHydrationOrOffscreenLanes (
338
+ lanes ,
339
+ )
340
+ ? 'tertiary-dark'
341
+ : 'primary-dark' ;
310
342
reusableLaneOptions . start = startTime ;
311
343
reusableLaneOptions . end = endTime ;
312
- performance . measure ( 'Interrupted Render' , reusableLaneOptions ) ;
344
+ performance . measure (
345
+ includesOnlyOffscreenLanes ( lanes )
346
+ ? 'Prewarm'
347
+ : includesOnlyHydrationLanes ( lanes )
348
+ ? 'Interrupted Hydration'
349
+ : 'Interrupted Render' ,
350
+ reusableLaneOptions ,
351
+ ) ;
313
352
}
314
353
}
315
354
316
355
export function logSuspendedRenderPhase (
317
356
startTime : number ,
318
357
endTime : number ,
358
+ lanes : Lanes ,
319
359
) : void {
320
360
if ( supportsUserTiming ) {
321
- reusableLaneDevToolDetails . color = 'primary-dark' ;
361
+ reusableLaneDevToolDetails . color = includesOnlyHydrationOrOffscreenLanes (
362
+ lanes ,
363
+ )
364
+ ? 'tertiary-dark'
365
+ : 'primary-dark' ;
322
366
reusableLaneOptions . start = startTime ;
323
367
reusableLaneOptions . end = endTime ;
324
368
performance . measure ( 'Prewarm' , reusableLaneOptions ) ;
@@ -328,10 +372,15 @@ export function logSuspendedRenderPhase(
328
372
export function logSuspendedWithDelayPhase (
329
373
startTime : number ,
330
374
endTime : number ,
375
+ lanes : Lanes ,
331
376
) : void {
332
377
// This means the render was suspended and cannot commit until it gets unblocked.
333
378
if ( supportsUserTiming ) {
334
- reusableLaneDevToolDetails . color = 'primary-dark' ;
379
+ reusableLaneDevToolDetails . color = includesOnlyHydrationOrOffscreenLanes (
380
+ lanes ,
381
+ )
382
+ ? 'tertiary-dark'
383
+ : 'primary-dark' ;
335
384
reusableLaneOptions . start = startTime ;
336
385
reusableLaneOptions . end = endTime ;
337
386
performance . measure ( 'Suspended' , reusableLaneOptions ) ;
@@ -341,6 +390,7 @@ export function logSuspendedWithDelayPhase(
341
390
export function logErroredRenderPhase (
342
391
startTime : number ,
343
392
endTime : number ,
393
+ lanes : Lanes ,
344
394
) : void {
345
395
if ( supportsUserTiming ) {
346
396
reusableLaneDevToolDetails . color = 'error' ;
0 commit comments