-
Notifications
You must be signed in to change notification settings - Fork 49k
Prevent inlining into recursive commit functions #20105
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
Prevent inlining into recursive commit functions #20105
Conversation
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit 7819cd3:
|
Details of bundled changes.Comparing: 25b18d3...7819cd3 react-dom
Size changes (stable) |
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.
I guess this is fine?
Seems like the sort of thing we should be measuring before and after and seeing what the impact is. I don't have an intuition about whether this would help, hurt, or be neutral.
Details of bundled changes.Comparing: 25b18d3...7819cd3 react-dom
Size changes (experimental) |
Adds a bunch of no-inline directives to commit phase functions to prevent them from being inlined into one of our recursive algorithms. The motivation is to minimize the number of variables in the recursive functions, since each one contributes to the size of the stack frame. Theoretically, this could help the performance of both the recursive and non-recursive (iterative) implementations of the commit phase, since even the iterative implementation sometimes uses the JS stack.
f21d9e1
to
7819cd3
Compare
Agree though since this is a build-time optimization, will need to use the reconciler fork infra for that. So we need to land the new reconciler first. In the meantime, we can run a local test. |
I don't have a lot of faith in our local tests (since we haven't even been able to catch anything resembling a perf regression that could explain the top line metrics regression) |
Summary: Base sync before adding Flight files. This sync includes the following changes: - **[454c2211c](facebook/react@454c2211c )**: Refactor SchedulerHostConfigs ([#20025](facebook/react#20025)) //<Ricky>// - **[56e9feead](facebook/react@56e9feead )**: Remove Blocks ([#20138](facebook/react#20138)) //<Sebastian Markbåge>// - **[3fbd47b86](facebook/react@3fbd47b86 )**: Serialize pending server components by reference (lazy component) ([#20137](facebook/react#20137)) //<Sebastian Markbåge>// - **[930ce7c15](facebook/react@930ce7c15 )**: Allow values to be encoded by "reference" to a value rather than the value itself ([#20136](facebook/react#20136)) //<Sebastian Markbåge>// - **[39eb6d176](facebook/react@39eb6d176 )**: Rename ([#20134](facebook/react#20134)) //<Sebastian Markbåge>// - **[ffd842335](facebook/react@ffd842335 )**: [Flight] Add support for Module References in transport protocol ([#20121](facebook/react#20121)) //<Sebastian Markbåge>// - **[343d7a4a7](facebook/react@343d7a4a7 )**: Fast Refresh: Don't block DevTools commit hook ([#20129](facebook/react#20129)) //<Brian Vaughn>// - **[779a472b0](facebook/react@779a472b0 )**: Prevent inlining into recursive commit functions ([#20105](facebook/react#20105)) //<Andrew Clark>// - **[25b18d31c](facebook/react@25b18d31c )**: Traverse commit phase effects iteratively ([#20094](facebook/react#20094)) //<Andrew Clark>// Changelog: [General][Changed] - React Native sync for revisions 4e5d7fa...454c221 Reviewed By: rickhanlonii Differential Revision: D24698701 fbshipit-source-id: dfaf692b1051150355dece1657764a484b7ae603
Adds a bunch of no-inline directives to commit phase functions to prevent them from being inlined into one of our recursive algorithms. The motivation is to minimize the number of variables in the recursive functions, since each one contributes to the size of the stack frame. Theoretically, this could help the performance of both the recursive and non-recursive (iterative) implementations of the commit phase, since even the iterative implementation sometimes uses the JS stack.
Adds a bunch of no-inline directives to commit phase functions to prevent them from being inlined into one of our recursive algorithms.
The motivation is to minimize the number of variables in the recursive functions, since each one contributes to the size of the stack frame.
Theoretically, this could help the performance of both the recursive and non-recursive (iterative) implementations of the commit phase, since even the iterative implementation sometimes uses the JS stack.