Skip to content

Commit

Permalink
Prevent inlining into recursive commit functions (#20105)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
acdlite committed Oct 27, 2020
1 parent 25b18d3 commit 779a472
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions packages/react-reconciler/src/ReactFiberCommitWork.new.js
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@ function safelyCallComponentWillUnmount(
}
}

/** @noinline */
function safelyDetachRef(current: Fiber, nearestMountedAncestor: Fiber) {
const ref = current.ref;
if (ref !== null) {
Expand Down Expand Up @@ -279,6 +280,7 @@ export function safelyCallDestroy(
}
}

/** @noinline */
function commitHookEffectListUnmount(
flags: HookFlags,
finishedWork: Fiber,
Expand All @@ -303,6 +305,7 @@ function commitHookEffectListUnmount(
}
}

/** @noinline */
function commitHookEffectListMount(flags: HookFlags, finishedWork: Fiber) {
const updateQueue: FunctionComponentUpdateQueue | null = (finishedWork.updateQueue: any);
const lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
Expand Down Expand Up @@ -512,6 +515,7 @@ function iterativelyCommitBeforeMutationEffects_complete() {
}
}

/** @noinline */
function commitBeforeMutationEffectsOnFiber(finishedWork: Fiber) {
const current = finishedWork.alternate;
const flags = finishedWork.flags;
Expand Down Expand Up @@ -627,6 +631,7 @@ function commitBeforeMutationEffectsOnFiber(finishedWork: Fiber) {
}
}

/** @noinline */
function commitBeforeMutationEffectsDeletions(deletions: Array<Fiber>) {
for (let i = 0; i < deletions.length; i++) {
const fiber = deletions[i];
Expand Down Expand Up @@ -778,6 +783,7 @@ function iterativelyCommitMutationEffects_complete(
}
}

/** @noinline */
function commitMutationEffectsOnFiber(
fiber: Fiber,
root: FiberRoot,
Expand Down Expand Up @@ -848,6 +854,7 @@ function commitMutationEffectsOnFiber(
}
}

/** @noinline */
function commitMutationEffectsDeletions(
deletions: Array<Fiber>,
nearestMountedAncestor: Fiber,
Expand Down Expand Up @@ -1342,6 +1349,7 @@ function commitLayoutEffectsOnFiber(
}
}

/** @noinline */
function commitLayoutEffectsForProfiler(
finishedWork: Fiber,
finishedRoot: FiberRoot,
Expand Down Expand Up @@ -1407,6 +1415,7 @@ function commitLayoutEffectsForProfiler(
}
}

/** @noinline */
function commitLayoutEffectsForClassComponent(finishedWork: Fiber) {
const instance = finishedWork.stateNode;
const current = finishedWork.alternate;
Expand Down Expand Up @@ -1555,6 +1564,7 @@ function commitLayoutEffectsForClassComponent(finishedWork: Fiber) {
}
}

/** @noinline */
function commitLayoutEffectsForHostRoot(finishedWork: Fiber) {
// TODO: I think this is now always non-null by the time it reaches the
// commit phase. Consider removing the type check.
Expand All @@ -1575,6 +1585,7 @@ function commitLayoutEffectsForHostRoot(finishedWork: Fiber) {
}
}

/** @noinline */
function commitLayoutEffectsForHostComponent(finishedWork: Fiber) {
const instance: Instance = finishedWork.stateNode;
const current = finishedWork.alternate;
Expand All @@ -1590,6 +1601,7 @@ function commitLayoutEffectsForHostComponent(finishedWork: Fiber) {
}
}

/** @noinline */
function hideOrUnhideAllChildren(finishedWork, isHidden) {
if (supportsMutation) {
// We only have the top Fiber that was inserted but we need to recurse down its
Expand Down Expand Up @@ -2950,6 +2962,7 @@ function commitSuspenseComponent(finishedWork: Fiber) {
}
}

/** @noinline */
function commitSuspenseHydrationCallbacks(
finishedRoot: FiberRoot,
finishedWork: Fiber,
Expand Down

0 comments on commit 779a472

Please sign in to comment.