diff options
author | dan <dan.abramov@gmail.com> | 2024-11-19 02:20:58 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-19 02:20:58 +0000 |
commit | 9a57d2a538e4acf112069aa3b6ba37d615ede758 (patch) | |
tree | af2881c9325cccb97770d4c54a6a0861949d8ff2 /src/AppProfiler.tsx | |
parent | 7b6c18272385494145676e42cbe922bde7ceae6b (diff) | |
download | voidsky-9a57d2a538e4acf112069aa3b6ba37d615ede758.tar.zst |
Add Profiler build for Android (#6510)
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> + ) +} |