|
2 | 2 | Fiber, |
3 | 3 | getDisplayName, |
4 | 4 | getTimings, |
| 5 | + hasMemoCache, |
5 | 6 | isHostFiber, |
6 | 7 | traverseFiber, |
7 | 8 | } from 'bippy'; |
@@ -69,6 +70,8 @@ export type FiberRenders = Record< |
69 | 70 | parents: Set<string>; |
70 | 71 | selfTime: number; |
71 | 72 | totalTime: number; |
| 73 | + hasMemoCache: boolean; |
| 74 | + wasFiberRenderMount: boolean; |
72 | 75 | nodeInfo: Array<{ |
73 | 76 | selfTime: number; |
74 | 77 | element: Element; |
@@ -471,20 +474,11 @@ const getTargetInteractionDetails = (target: Element) => { |
471 | 474 |
|
472 | 475 | const componentPath = getInteractionPath(associatedFiber); |
473 | 476 |
|
474 | | - // const childrenTree = collectFiberSubtree(associatedFiber, 20); // this can be expensive if not limited |
475 | | - |
476 | | - // const firstChildSvg = Object.entries(childrenTree).find(([name, {isSvg }]) => isSvg) |
477 | | - |
478 | | - // const firstSvg = |
479 | | - // associatedFiber.type === "svg" |
480 | | - // ? getFirstNameFromAncestor(associatedFiber) |
481 | | - // : Object.entries(childrenTree).find(([name, {isSvg }]) => isSvg) |
482 | | - |
483 | | - // lowkey i have an idea |
484 | 477 | return { |
485 | 478 | componentPath, |
486 | 479 | childrenTree: {}, |
487 | 480 | componentName, |
| 481 | + elementFiber: associatedFiber, |
488 | 482 | }; |
489 | 483 | }; |
490 | 484 |
|
@@ -898,6 +892,8 @@ export const listenForRenders = ( |
898 | 892 | }; |
899 | 893 | fiberRenders[displayName] = { |
900 | 894 | renderCount: 1, |
| 895 | + hasMemoCache: hasMemoCache(fiber), |
| 896 | + wasFiberRenderMount: wasFiberRenderMount(fiber), |
901 | 897 | parents: parents, |
902 | 898 | selfTime, |
903 | 899 | totalTime, |
@@ -933,6 +929,9 @@ export const listenForRenders = ( |
933 | 929 | changesCounts: new Map<string | number, number>(), |
934 | 930 | }; |
935 | 931 |
|
| 932 | + existing.wasFiberRenderMount = |
| 933 | + existing.wasFiberRenderMount || wasFiberRenderMount(fiber); |
| 934 | + existing.hasMemoCache = existing.hasMemoCache || hasMemoCache(fiber); |
936 | 935 | existing.changes = { |
937 | 936 | fiberProps: mergeSectionData( |
938 | 937 | existing.changes?.fiberProps || emptySection, |
@@ -993,3 +992,24 @@ const mergeSectionData = ( |
993 | 992 |
|
994 | 993 | return mergedSection; |
995 | 994 | }; |
| 995 | + |
| 996 | +const wasFiberRenderMount = (fiber: Fiber) => { |
| 997 | + if (!fiber.alternate) { |
| 998 | + return true; |
| 999 | + } |
| 1000 | + |
| 1001 | + const prevFiber = fiber.alternate; |
| 1002 | + |
| 1003 | + const wasMounted = |
| 1004 | + prevFiber && |
| 1005 | + prevFiber.memoizedState != null && |
| 1006 | + prevFiber.memoizedState.element != null && |
| 1007 | + prevFiber.memoizedState.isDehydrated !== true; |
| 1008 | + |
| 1009 | + const isMounted = |
| 1010 | + fiber.memoizedState != null && |
| 1011 | + fiber.memoizedState.element != null && |
| 1012 | + fiber.memoizedState.isDehydrated !== true; |
| 1013 | + |
| 1014 | + return !wasMounted && isMounted; |
| 1015 | +}; |
0 commit comments