-
Notifications
You must be signed in to change notification settings - Fork 50.4k
[DevTools] Prevent crash when starting consecutive profiling sessions #32066
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
hoxyq
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for upstreaming the fix!
Having this as a fix makes sense to me, since when user starts recording new profile, previous state is no longer needed.
I might end up refactoring this logic, though, because this part of the code is a bit clowny, and ideally there shouldn't be a reason for explicitly resetting the state before starting a profile.
List of changes in this release: * fix[DevTools]: fix HostComponent naming in filters for Native ([hoxyq](https://github.com/hoxyq) in [#32086](#32086)) * Fix copy functionality in Firefox ([V3RON](https://github.com/V3RON) in [#32077](#32077)) * chore[DevTools]: don't use batchedUpdate ([hoxyq](https://github.com/hoxyq) in [#32074](#32074)) * Prevent crash when starting consecutive profiling sessions ([V3RON](https://github.com/V3RON) in [#32066](#32066)) * fix[DevTools/Tree]: only scroll to item when panel is visible ([hoxyq](https://github.com/hoxyq) in [#32018](#32018)) * feat[Tree]: set initial scroll offset when inspected element index is set ([hoxyq](https://github.com/hoxyq) in [#31968](#31968)) * DevTools: merge element fields in TreeStateContext ([hoxyq](https://github.com/hoxyq) in [#31956](#31956)) * DevTools: fix initial host instance selection ([hoxyq](https://github.com/hoxyq) in [#31892](#31892)) * chore[DevTools/Tree]: don't pre-select root element and remove unused code ([hoxyq](https://github.com/hoxyq) in [#32015](#32015)) * chore[DevTools/TraceUpdates]: display names by default ([hoxyq](https://github.com/hoxyq) in [#32019](#32019)) * Add ViewTransitionComponent to Stacks and DevTools ([sebmarkbage](https://github.com/sebmarkbage) in [#32034](#32034)) * Add <ViewTransition> Component ([sebmarkbage](https://github.com/sebmarkbage) in [#31975](#31975)) * chore[react-devtools-shell]: disable warnings in dev server overlay ([hoxyq](https://github.com/hoxyq) in [#32005](#32005)) * DevTools: fork FastRefresh test for <18 versions of React ([hoxyq](https://github.com/hoxyq) in [#31893](#31893)) * Show component names while highlighting renders ([piotrski](https://github.com/piotrski) in [#31577](#31577)) * allow non-coercible objects in formatConsoleArgumentsToSingleString ([henryqdineen](https://github.com/henryqdineen) in [#31444](#31444)) * Remove enableRefAsProp feature flag ([kassens](https://github.com/kassens) in [#30346](#30346)) * [flow] Eliminate usage of more than 1-arg `React.AbstractComponent` in React codebase ([SamChou19815](https://github.com/SamChou19815) in [#31314](#31314)) * Audit try/finally around console patching ([sebmarkbage](https://github.com/sebmarkbage) in [#31286](#31286)) * tests[react-devtools]: added tests for Compiler integration ([hoxyq](https://github.com/hoxyq) in [#31241](#31241)) * Add Bridge types for Fusebox ([EdmondChuiHW](https://github.com/EdmondChuiHW) in [#31274](#31274))
Summary
This pull request resolves an issue where consecutive profiling sessions would cause Dev Tools to freeze due to an infinite loop of state updates. The problem occurs when the startProfiling function triggers a call to
selectCommitIndex(0)in SnapshotSelector as previous profiling data is available, which causes a re-render. Then, ProfilerContextProvider callsselectCommitIndex(null)to clear the view while profiling is in progress, leading to another re-render and creating an infinite loop. This behavior was prevented by clearing the existing profiling data before starting a new session.Closes #31977
Closes #31679
How did you test this change?
I ran the Dev Tools locally following the contributing guideline. I observed the freeze at the start of the second profiling session. Then, I modified the code to clear the store when starting a new session and ran the Dev Tools again. This time, no freeze was observed.
Before:
https://github.com/user-attachments/assets/9d790f84-f6d0-4951-8202-e599cf8d225b
After:
https://github.com/user-attachments/assets/af097019-0b8f-49dd-8afc-0f6cd72af787