diff options
Diffstat (limited to 'src/AppProfiler.tsx')
-rw-r--r-- | src/AppProfiler.tsx | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/AppProfiler.tsx b/src/AppProfiler.tsx new file mode 100644 index 000000000..31a4cc54e --- /dev/null +++ b/src/AppProfiler.tsx @@ -0,0 +1,29 @@ +import React, {Profiler} from 'react' + +// Don't let it get stripped out in profiling builds (which apply production Babel preset). +const log = (global as any)['con' + 'sole'].log + +function onRender(id: string, phase: string, actualDuration: number) { + if (!__DEV__) { + // This block of code will exist in the production build of the app. + // However, only profiling builds of React call `onRender` so it's dead code in actual production. + const message = `<Profiler> ${id}:${phase} ${ + actualDuration > 500 + ? '(╯°□°)╯ ' + : actualDuration > 100 + ? '[!!] ' + : actualDuration > 16 + ? '[!] ' + : '' + }${Math.round(actualDuration)}ms` + log(message) + } +} + +export function AppProfiler({children}: {children: React.ReactNode}) { + return ( + <Profiler id="app" onRender={onRender}> + {children} + </Profiler> + ) +} |