11import type { Fiber , FiberRoot } from 'react-reconciler' ;
22import * as React from 'react' ;
33import { ReactScanInternals } from '../index' ;
4- import { getDisplayName , fastSerialize , getType } from './utils' ;
4+ import {
5+ getDisplayName ,
6+ fastSerialize ,
7+ getType ,
8+ getDisplayNameFromFiber ,
9+ } from './utils' ;
510import {
611 didFiberRender ,
712 getSelfTime ,
@@ -12,6 +17,7 @@ import {
1217 traverseState ,
1318} from './fiber' ;
1419import { registerDevtoolsHook } from './init' ;
20+ import { isCompositeComponent } from '../web/inspect-element/utils' ;
1521
1622export interface Change {
1723 name : string ;
@@ -183,7 +189,7 @@ export const reportRenderFiber = (fiber: Fiber, renders: (Render | null)[]) => {
183189 count : ( report ?. count ?? 0 ) + 1 ,
184190 time : ( report ?. time ?? 0 ) + ( time !== 0 ? time : 0.1 ) , // .1ms lowest precision
185191 badRenders : report ?. badRenders ?? [ ] ,
186- displayName : getDisplayName ( fiber . type ) ,
192+ displayName : getDisplayNameFromFiber ( fiber ) ,
187193 } ) ;
188194 ReactScanInternals . emit (
189195 'reportDataByFiber' ,
@@ -229,8 +235,13 @@ export const instrument = ({
229235 const name = getDisplayName ( type ) ;
230236 if ( name === 'Million(Profiler)' ) return ;
231237 if ( name ) {
232- reportRenderFiber ( fiber , [ propsRender , contextRender ] ) ; // back compat
233- reportRender ( name , fiber , [ propsRender , contextRender ] ) ;
238+ reportRender ( name , fiber , [ propsRender , contextRender ] ) ; // back compat
239+ }
240+
241+ if (
242+ isCompositeComponent ( fiber ) // since we key on the fiber we don't need a display name (ex. memo compoenents are anonymous and dont have names)
243+ ) {
244+ reportRenderFiber ( fiber , [ propsRender , contextRender ] ) ;
234245 }
235246
236247 if ( ! propsRender && ! contextRender ) return null ;
0 commit comments