Skip to content
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

[DevTools] Prevent crash when starting consecutive profiling sessions #32066

Merged
merged 1 commit into from
Jan 14, 2025

Conversation

V3RON
Copy link
Contributor

@V3RON V3RON commented Jan 14, 2025

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 calls selectCommitIndex(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

@V3RON V3RON changed the title Prevent crash when starting consecutive profiling sessions [DevTools] Prevent crash when starting consecutive profiling sessions Jan 14, 2025
@eps1lon eps1lon requested a review from hoxyq January 14, 2025 19:31
Copy link
Contributor

@hoxyq hoxyq left a 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.

@hoxyq hoxyq merged commit 453f505 into facebook:main Jan 14, 2025
187 checks passed
hoxyq added a commit that referenced this pull request Jan 16, 2025
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))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants