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

[Fiber] Move updatePriority tracking to renderers #28751

Merged
merged 4 commits into from
Apr 8, 2024

Conversation

gnoff
Copy link
Collaborator

@gnoff gnoff commented Apr 4, 2024

Currently updatePriority is tracked in the reconciler. flushSync is going to be implemented reconciler agnostic soon and we need to move the tracking of this state to the renderer and out of reconciler. This change implements new renderer bin dings for getCurrentUpdatePriority and setCurrentUpdatePriority.

I was originally going to have the getter also do the event priority defaulting using window.event so we eliminate getCur rentEventPriority but this makes all the callsites where we store the true current updatePriority on the stack harder to work with so for now they remain separate.

I also moved runWithPriority to the renderer since it really belongs whereever the state is being managed and it is only currently exposed in the DOM renderer.

Additionally the current update priority is not stored on ReactDOMSharedInternals. While not particularly meaningful in this change it opens the door to implementing flushSync outside of the reconciler

@facebook-github-bot facebook-github-bot added CLA Signed React Core Team Opened by a member of the React Core Team labels Apr 4, 2024
Current updatePriority is tracked in the reconciler. `flushSync` is going to be implemented reconciler agnostic soon and we need to move the tracking of this state to the renderer and out of reconciler. This change implements new renderer bin
dings for getCurrentUpdatePriority and setCurrentUpdatePriority.

I was originally going to have the getter also do the event priority defaulting using window.event so we eliminate getCur
rentEventPriority but this makes all the callsites where we store the true current updatePriority on the stack harder to
work with so for now they remain separate.

I also moved runWithPriority to the renderer since it really belongs whereever the state is being managed and it is only
currently exposed in the DOM renderer.
@react-sizebot
Copy link

react-sizebot commented Apr 4, 2024

Comparing: 6090cab...5d28591

Critical size changes

Includes critical production bundles, as well as any change greater than 2%:

Name +/- Base Current +/- gzip Base gzip Current gzip
oss-stable/react-dom/cjs/react-dom.production.min.js +0.04% 169.41 kB 169.47 kB = 52.83 kB 52.83 kB
oss-experimental/react-dom/cjs/react-dom.production.min.js +0.04% 171.22 kB 171.28 kB = 53.36 kB 53.36 kB
facebook-www/ReactDOM-prod.classic.js = 590.17 kB 589.82 kB = 103.70 kB 103.69 kB
facebook-www/ReactDOM-prod.modern.js = 566.53 kB 566.22 kB = 99.64 kB 99.55 kB
oss-experimental/react-reconciler/cjs/react-reconciler-constants.production.js +13.15% 1.19 kB 1.34 kB +3.17% 0.44 kB 0.46 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler-constants.production.js +13.15% 1.19 kB 1.34 kB +3.17% 0.44 kB 0.46 kB
oss-stable/react-reconciler/cjs/react-reconciler-constants.production.js +13.15% 1.19 kB 1.34 kB +3.17% 0.44 kB 0.46 kB
oss-experimental/react-reconciler/cjs/react-reconciler-constants.development.js +11.39% 1.05 kB 1.17 kB +3.87% 0.44 kB 0.46 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler-constants.development.js +11.39% 1.05 kB 1.17 kB +3.87% 0.44 kB 0.46 kB
oss-stable/react-reconciler/cjs/react-reconciler-constants.development.js +11.39% 1.05 kB 1.17 kB +3.87% 0.44 kB 0.46 kB
oss-experimental/react-reconciler/cjs/react-reconciler-constants.production.min.js +5.20% 0.50 kB 0.53 kB +1.97% 0.30 kB 0.31 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler-constants.production.min.js +5.20% 0.50 kB 0.53 kB +1.97% 0.30 kB 0.31 kB
oss-stable/react-reconciler/cjs/react-reconciler-constants.production.min.js +5.20% 0.50 kB 0.53 kB +1.97% 0.30 kB 0.31 kB
oss-experimental/react-dom/cjs/react-dom.react-server.production.js +3.82% 6.49 kB 6.74 kB +8.18% 1.31 kB 1.42 kB
oss-stable-semver/react-dom/cjs/react-dom.react-server.production.js +3.82% 6.49 kB 6.74 kB +8.18% 1.31 kB 1.42 kB
oss-stable/react-dom/cjs/react-dom.react-server.production.js +3.82% 6.49 kB 6.74 kB +8.18% 1.31 kB 1.42 kB
oss-stable-semver/react-dom/cjs/react-dom-server-rendering-stub.production.js +2.68% 9.27 kB 9.51 kB +4.79% 2.32 kB 2.43 kB
oss-stable/react-dom/cjs/react-dom-server-rendering-stub.production.js +2.67% 9.29 kB 9.54 kB +4.82% 2.34 kB 2.46 kB
oss-experimental/react-dom/cjs/react-dom-server-rendering-stub.production.js +2.67% 9.30 kB 9.55 kB +4.86% 2.34 kB 2.46 kB
test_utils/ReactAllWarnings.js Deleted 64.21 kB 0.00 kB Deleted 16.02 kB 0.00 kB

Significant size changes

Includes any change greater than 0.2%:

Expand to show
Name +/- Base Current +/- gzip Base gzip Current gzip
oss-experimental/react-reconciler/cjs/react-reconciler-constants.production.js +13.15% 1.19 kB 1.34 kB +3.17% 0.44 kB 0.46 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler-constants.production.js +13.15% 1.19 kB 1.34 kB +3.17% 0.44 kB 0.46 kB
oss-stable/react-reconciler/cjs/react-reconciler-constants.production.js +13.15% 1.19 kB 1.34 kB +3.17% 0.44 kB 0.46 kB
oss-experimental/react-reconciler/cjs/react-reconciler-constants.development.js +11.39% 1.05 kB 1.17 kB +3.87% 0.44 kB 0.46 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler-constants.development.js +11.39% 1.05 kB 1.17 kB +3.87% 0.44 kB 0.46 kB
oss-stable/react-reconciler/cjs/react-reconciler-constants.development.js +11.39% 1.05 kB 1.17 kB +3.87% 0.44 kB 0.46 kB
oss-experimental/react-reconciler/cjs/react-reconciler-constants.production.min.js +5.20% 0.50 kB 0.53 kB +1.97% 0.30 kB 0.31 kB
oss-stable-semver/react-reconciler/cjs/react-reconciler-constants.production.min.js +5.20% 0.50 kB 0.53 kB +1.97% 0.30 kB 0.31 kB
oss-stable/react-reconciler/cjs/react-reconciler-constants.production.min.js +5.20% 0.50 kB 0.53 kB +1.97% 0.30 kB 0.31 kB
oss-experimental/react-dom/cjs/react-dom.react-server.production.js +3.82% 6.49 kB 6.74 kB +8.18% 1.31 kB 1.42 kB
oss-stable-semver/react-dom/cjs/react-dom.react-server.production.js +3.82% 6.49 kB 6.74 kB +8.18% 1.31 kB 1.42 kB
oss-stable/react-dom/cjs/react-dom.react-server.production.js +3.82% 6.49 kB 6.74 kB +8.18% 1.31 kB 1.42 kB
oss-stable-semver/react-dom/cjs/react-dom-server-rendering-stub.production.js +2.68% 9.27 kB 9.51 kB +4.79% 2.32 kB 2.43 kB
oss-stable/react-dom/cjs/react-dom-server-rendering-stub.production.js +2.67% 9.29 kB 9.54 kB +4.82% 2.34 kB 2.46 kB
oss-experimental/react-dom/cjs/react-dom-server-rendering-stub.production.js +2.67% 9.30 kB 9.55 kB +4.86% 2.34 kB 2.46 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer.production.js +1.80% 35.44 kB 36.08 kB +1.28% 7.64 kB 7.74 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer.production.js +1.80% 35.44 kB 36.08 kB +1.28% 7.64 kB 7.74 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer.production.js +1.80% 35.44 kB 36.08 kB +1.28% 7.64 kB 7.74 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-persistent.production.js +1.79% 35.57 kB 36.21 kB +1.28% 7.66 kB 7.76 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-persistent.production.js +1.79% 35.57 kB 36.21 kB +1.28% 7.66 kB 7.76 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-persistent.production.js +1.79% 35.57 kB 36.21 kB +1.28% 7.66 kB 7.76 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer.development.js +1.65% 41.58 kB 42.27 kB +1.11% 9.61 kB 9.72 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer.development.js +1.65% 41.58 kB 42.27 kB +1.11% 9.61 kB 9.72 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer.development.js +1.65% 41.58 kB 42.27 kB +1.11% 9.61 kB 9.72 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-persistent.development.js +1.65% 41.71 kB 42.40 kB +1.11% 9.63 kB 9.74 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-persistent.development.js +1.65% 41.71 kB 42.40 kB +1.11% 9.63 kB 9.74 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-persistent.development.js +1.65% 41.71 kB 42.40 kB +1.11% 9.63 kB 9.74 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer.production.min.js +1.11% 15.26 kB 15.43 kB +0.73% 4.68 kB 4.71 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer.production.min.js +1.11% 15.26 kB 15.43 kB +0.73% 4.68 kB 4.71 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer.production.min.js +1.11% 15.26 kB 15.43 kB +0.73% 4.68 kB 4.71 kB
oss-experimental/react-noop-renderer/cjs/react-noop-renderer-persistent.production.min.js +1.11% 15.34 kB 15.51 kB +0.75% 4.69 kB 4.73 kB
oss-stable-semver/react-noop-renderer/cjs/react-noop-renderer-persistent.production.min.js +1.11% 15.34 kB 15.51 kB +0.75% 4.69 kB 4.73 kB
oss-stable/react-noop-renderer/cjs/react-noop-renderer-persistent.production.min.js +1.11% 15.34 kB 15.51 kB +0.75% 4.69 kB 4.73 kB
oss-experimental/react-dom/cjs/react-dom.react-server.development.js +0.91% 14.84 kB 14.97 kB +1.82% 3.14 kB 3.19 kB
oss-stable-semver/react-dom/cjs/react-dom.react-server.development.js +0.91% 14.84 kB 14.97 kB +1.82% 3.14 kB 3.19 kB
oss-stable/react-dom/cjs/react-dom.react-server.development.js +0.91% 14.84 kB 14.97 kB +1.82% 3.14 kB 3.19 kB
oss-stable-semver/react-dom/umd/react-dom-server-rendering-stub.development.js +0.79% 18.96 kB 19.11 kB +1.27% 4.32 kB 4.37 kB
oss-stable/react-dom/umd/react-dom-server-rendering-stub.development.js +0.78% 18.99 kB 19.14 kB +1.36% 4.34 kB 4.40 kB
oss-experimental/react-dom/umd/react-dom-server-rendering-stub.development.js +0.78% 19.00 kB 19.14 kB +1.36% 4.34 kB 4.40 kB
oss-stable-semver/react-dom/cjs/react-dom-server-rendering-stub.development.js +0.75% 18.05 kB 18.18 kB +1.22% 4.20 kB 4.25 kB
oss-stable/react-dom/cjs/react-dom-server-rendering-stub.development.js +0.75% 18.07 kB 18.21 kB +1.26% 4.22 kB 4.28 kB
oss-experimental/react-dom/cjs/react-dom-server-rendering-stub.development.js +0.75% 18.08 kB 18.21 kB +1.28% 4.22 kB 4.28 kB
test_utils/ReactAllWarnings.js Deleted 64.21 kB 0.00 kB Deleted 16.02 kB 0.00 kB

Generated by 🚫 dangerJS against 5d28591

return currentUpdatePriority;
}

export function runWithPriority<T>(priority: EventPriority, fn: () => T): T {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems like maybe this was kind of broken to begin with since it doesn't opt out of transitions.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well it's sorta legacy anyway. Aren't we going to remove from OSS entrypoints?

Copy link
Collaborator

@sebmarkbage sebmarkbage left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This probably makes more sense to understand the context if you add the shared state. That's the new thing.

@sebmarkbage
Copy link
Collaborator

I was originally going to have the getter also do the event priority defaulting using window.event so we eliminate getCur rentEventPriority but this makes all the callsites where we store the true current updatePriority on the stack harder to work with so for now they remain separate.

Can you explain this part. That's that part that made this feel really clean so not doing that might highlight something.

@gnoff
Copy link
Collaborator Author

gnoff commented Apr 4, 2024

Can you explain this part. That's that part that made this feel really clean so not doing that might highlight something.

The pattern

const prev = getCurrent()
try {
  setCurrent(new)
} finally {
  setCurrent(prev)
}

Is tricky if getCurrent returns a non-stack value like the window.event priority. It means the restore might accidentally restore to something other than NoUpdatePriority as the base state.

So you instead would need to do

const prev = setCurrent(new)
try {
   ...
} finally {
  setCurrent(prev)
}

That way setCurrent can return the "real" current value and getCurrent can return the event derived value but this feels worse to me for some reason

…ticularly meaningful in this change this demonstrates how we can use this to implement flushSync in a way that does not require the reconciler being loaded so it can be used in the top-level entrypoint without pulling in the reconciler
@gnoff gnoff force-pushed the move-update-priority branch 2 times, most recently from 1e66ae1 to d1c8ce5 Compare April 5, 2024 05:12
@@ -525,8 +521,6 @@ export function attemptHydrationAtCurrentPriority(fiber: Fiber): void {
markRetryLaneIfNotHydrated(fiber, lane);
}

export {getCurrentUpdatePriority, runWithPriority};
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

couldn't figure out why this was being exported. nothing breaks in tests but maybe it's important to keep?

// TODO: Move this type conversion to the event priority module.
const eventLane: Lane = (getCurrentEventPriority(): any);
return eventLane;
return eventPriorityToLane(resolveUpdatePriority());
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should get inlined and it's type safe over a cast

@gnoff
Copy link
Collaborator Author

gnoff commented Apr 5, 2024

The current approach now uses

const prev = swap(new)
try {
  ...
} finally {
  swap(prev)
}

My gripe before primarily was with naming that implied symmetry between get/set but swap is generic enough and can be used in both the push and pop contexts without confusion.

I combined the event priority with update priority in resolveUpdatePriority which also clarifies it's not a simple getter

…when you are reading a raw value and when you are getting a resolved value. This allows requestUpdateLane to do a single call into the renderer to get the update priority while still making a reasonable stack based updating of update priorities ergonomic. I had to expose a `peekCurrentUpdatePriority` to satisfy startTransition which needs to set a new priority only if the current one is too low. I tried to stay away from get/set naming to avoid potential issues with whether you are reading the raw value or the derived one that considers window.event
@gnoff gnoff force-pushed the move-update-priority branch 4 times, most recently from 31552fb to a475c94 Compare April 5, 2024 20:36
@gnoff gnoff merged commit 8e1462e into facebook:main Apr 8, 2024
38 checks passed
@gnoff gnoff deleted the move-update-priority branch April 8, 2024 15:53
github-actions bot pushed a commit that referenced this pull request Apr 8, 2024
Currently updatePriority is tracked in the reconciler. `flushSync` is
going to be implemented reconciler agnostic soon and we need to move the
tracking of this state to the renderer and out of reconciler. This
change implements new renderer bin dings for getCurrentUpdatePriority
and setCurrentUpdatePriority.

I was originally going to have the getter also do the event priority
defaulting using window.event so we eliminate getCur rentEventPriority
but this makes all the callsites where we store the true current
updatePriority on the stack harder to work with so for now they remain
separate.

I also moved runWithPriority to the renderer since it really belongs
whereever the state is being managed and it is only currently exposed in
the DOM renderer.

Additionally the current update priority is not stored on
ReactDOMSharedInternals. While not particularly meaningful in this
change it opens the door to implementing `flushSync` outside of the
reconciler

DiffTrain build for [8e1462e](8e1462e)
gnoff added a commit that referenced this pull request Apr 8, 2024
Stacked on #28751 

ReactDOMSharedInternals uses properties of considerable length to model
mutuable state. These properties are not mangled during minification and
contribute a not insigificant amount to the uncompressed bundle size and
to a lesser degree compressed bundle size.

This change rewrites the DOMInternals in a way that shortens property
names so we can have smaller builds.
It also treats the entire object as a mutable container rather than
having different mutable sub objects.

The same treatment should be given to ReactSharedInternals
github-actions bot pushed a commit that referenced this pull request Apr 8, 2024
Stacked on #28751

ReactDOMSharedInternals uses properties of considerable length to model
mutuable state. These properties are not mangled during minification and
contribute a not insigificant amount to the uncompressed bundle size and
to a lesser degree compressed bundle size.

This change rewrites the DOMInternals in a way that shortens property
names so we can have smaller builds.
It also treats the entire object as a mutable container rather than
having different mutable sub objects.

The same treatment should be given to ReactSharedInternals

DiffTrain build for [9007fdc](9007fdc)
gnoff added a commit that referenced this pull request Apr 8, 2024
Stacked on #28751 

Historically explicit hydration scheduling used the reconciler's update
priority to schedule the hydration. There was a lingering todo to switch
to using event priority in the absence of an explicit update priority.
This change updates the hydration priority by referring to the event
priority if no update priority is set
github-actions bot pushed a commit that referenced this pull request Apr 8, 2024
Stacked on #28751

Historically explicit hydration scheduling used the reconciler's update
priority to schedule the hydration. There was a lingering todo to switch
to using event priority in the absence of an explicit update priority.
This change updates the hydration priority by referring to the event
priority if no update priority is set

DiffTrain build for [1f8327f](1f8327f)
rickhanlonii pushed a commit that referenced this pull request Apr 11, 2024
Currently updatePriority is tracked in the reconciler. `flushSync` is
going to be implemented reconciler agnostic soon and we need to move the
tracking of this state to the renderer and out of reconciler. This
change implements new renderer bin dings for getCurrentUpdatePriority
and setCurrentUpdatePriority.

I was originally going to have the getter also do the event priority
defaulting using window.event so we eliminate getCur rentEventPriority
but this makes all the callsites where we store the true current
updatePriority on the stack harder to work with so for now they remain
separate.

I also moved runWithPriority to the renderer since it really belongs
whereever the state is being managed and it is only currently exposed in
the DOM renderer.

Additionally the current update priority is not stored on
ReactDOMSharedInternals. While not particularly meaningful in this
change it opens the door to implementing `flushSync` outside of the
reconciler
rickhanlonii pushed a commit that referenced this pull request Apr 11, 2024
Stacked on #28751 

ReactDOMSharedInternals uses properties of considerable length to model
mutuable state. These properties are not mangled during minification and
contribute a not insigificant amount to the uncompressed bundle size and
to a lesser degree compressed bundle size.

This change rewrites the DOMInternals in a way that shortens property
names so we can have smaller builds.
It also treats the entire object as a mutable container rather than
having different mutable sub objects.

The same treatment should be given to ReactSharedInternals
rickhanlonii pushed a commit that referenced this pull request Apr 11, 2024
Stacked on #28751 

Historically explicit hydration scheduling used the reconciler's update
priority to schedule the hydration. There was a lingering todo to switch
to using event priority in the absence of an explicit update priority.
This change updates the hydration priority by referring to the event
priority if no update priority is set
rickhanlonii pushed a commit that referenced this pull request Apr 11, 2024
Currently updatePriority is tracked in the reconciler. `flushSync` is
going to be implemented reconciler agnostic soon and we need to move the
tracking of this state to the renderer and out of reconciler. This
change implements new renderer bin dings for getCurrentUpdatePriority
and setCurrentUpdatePriority.

I was originally going to have the getter also do the event priority
defaulting using window.event so we eliminate getCur rentEventPriority
but this makes all the callsites where we store the true current
updatePriority on the stack harder to work with so for now they remain
separate.

I also moved runWithPriority to the renderer since it really belongs
whereever the state is being managed and it is only currently exposed in
the DOM renderer.

Additionally the current update priority is not stored on
ReactDOMSharedInternals. While not particularly meaningful in this
change it opens the door to implementing `flushSync` outside of the
reconciler
rickhanlonii pushed a commit that referenced this pull request Apr 11, 2024
Stacked on #28751 

ReactDOMSharedInternals uses properties of considerable length to model
mutuable state. These properties are not mangled during minification and
contribute a not insigificant amount to the uncompressed bundle size and
to a lesser degree compressed bundle size.

This change rewrites the DOMInternals in a way that shortens property
names so we can have smaller builds.
It also treats the entire object as a mutable container rather than
having different mutable sub objects.

The same treatment should be given to ReactSharedInternals
rickhanlonii pushed a commit that referenced this pull request Apr 11, 2024
Stacked on #28751 

Historically explicit hydration scheduling used the reconciler's update
priority to schedule the hydration. There was a lingering todo to switch
to using event priority in the absence of an explicit update priority.
This change updates the hydration priority by referring to the event
priority if no update priority is set
EdisonVan pushed a commit to EdisonVan/react that referenced this pull request Apr 15, 2024
Currently updatePriority is tracked in the reconciler. `flushSync` is
going to be implemented reconciler agnostic soon and we need to move the
tracking of this state to the renderer and out of reconciler. This
change implements new renderer bin dings for getCurrentUpdatePriority
and setCurrentUpdatePriority.

I was originally going to have the getter also do the event priority
defaulting using window.event so we eliminate getCur rentEventPriority
but this makes all the callsites where we store the true current
updatePriority on the stack harder to work with so for now they remain
separate.

I also moved runWithPriority to the renderer since it really belongs
whereever the state is being managed and it is only currently exposed in
the DOM renderer.

Additionally the current update priority is not stored on
ReactDOMSharedInternals. While not particularly meaningful in this
change it opens the door to implementing `flushSync` outside of the
reconciler
EdisonVan pushed a commit to EdisonVan/react that referenced this pull request Apr 15, 2024
…28771)

Stacked on facebook#28751 

ReactDOMSharedInternals uses properties of considerable length to model
mutuable state. These properties are not mangled during minification and
contribute a not insigificant amount to the uncompressed bundle size and
to a lesser degree compressed bundle size.

This change rewrites the DOMInternals in a way that shortens property
names so we can have smaller builds.
It also treats the entire object as a mutable container rather than
having different mutable sub objects.

The same treatment should be given to ReactSharedInternals
EdisonVan pushed a commit to EdisonVan/react that referenced this pull request Apr 15, 2024
)

Stacked on facebook#28751 

Historically explicit hydration scheduling used the reconciler's update
priority to schedule the hydration. There was a lingering todo to switch
to using event priority in the absence of an explicit update priority.
This change updates the hydration priority by referring to the event
priority if no update priority is set
bigfootjon pushed a commit that referenced this pull request Apr 18, 2024
Currently updatePriority is tracked in the reconciler. `flushSync` is
going to be implemented reconciler agnostic soon and we need to move the
tracking of this state to the renderer and out of reconciler. This
change implements new renderer bin dings for getCurrentUpdatePriority
and setCurrentUpdatePriority.

I was originally going to have the getter also do the event priority
defaulting using window.event so we eliminate getCur rentEventPriority
but this makes all the callsites where we store the true current
updatePriority on the stack harder to work with so for now they remain
separate.

I also moved runWithPriority to the renderer since it really belongs
whereever the state is being managed and it is only currently exposed in
the DOM renderer.

Additionally the current update priority is not stored on
ReactDOMSharedInternals. While not particularly meaningful in this
change it opens the door to implementing `flushSync` outside of the
reconciler

DiffTrain build for commit 8e1462e.
facebook-github-bot pushed a commit to facebook/react-native that referenced this pull request Apr 19, 2024
Summary:
This sync includes the changes from:
- D56103750
- [TODO] A shim for SECRET_INTERNALS

This sync includes the following changes:
- **[b5e5ce8e0](facebook/react@b5e5ce8e0 )**: Update ReactNativeTypes for root options (part 2) ([#28857](facebook/react#28857)) //<Ricky>//
- **[da6ba53b1](facebook/react@da6ba53b1 )**: [UMD] Remove umd builds ([#28735](facebook/react#28735)) //<Josh Story>//
- **[0c245df1d](facebook/react@0c245df1d )**: Complete the typo fix ([#28856](facebook/react#28856)) //<Sebastian Silbermann>//
- **[f82051d7a](facebook/react@f82051d7a )**: console test utils fix: match entire string, not just first letter ([#28855](facebook/react#28855)) //<Andrew Clark>//
- **[4ca20fd36](facebook/react@4ca20fd36 )**: Test top level fragment inside lazy semantics ([#28852](facebook/react#28852)) //<Sebastian Markbåge>//
- **[c0cf7c696](facebook/react@c0cf7c696 )**: Promote ASYNC_ITERATOR symbol to React Symbols ([#28851](facebook/react#28851)) //<Sebastian Markbåge>//
- **[657428a9e](facebook/react@657428a9e )**: Add ReactNativeTypes for root options ([#28850](facebook/react#28850)) //<Ricky>//
- **[7909d8eab](facebook/react@7909d8eab )**: [Flight] Encode ReadableStream and AsyncIterables ([#28847](facebook/react#28847)) //<Sebastian Markbåge>//
- **[13eb61d05](facebook/react@13eb61d05 )**: Move enableUseDeferredValueInitialArg to canary ([#28818](facebook/react#28818)) //<Andrew Clark>//
- **[8afa144bd](facebook/react@8afa144bd )**: Enable flag disableClientCache ([#28846](facebook/react#28846)) //<Jan Kassens>//
- **[734956ace](facebook/react@734956ace )**: Devtools: Add support for useFormStatus ([#28413](facebook/react#28413)) //<Sebastian Silbermann>//
- **[17e920c00](facebook/react@17e920c00 )**: [Flight Reply] Encode Typed Arrays and Blobs ([#28819](facebook/react#28819)) //<Sebastian Markbåge>//
- **[0347fcd00](facebook/react@0347fcd00 )**: Add on(Caught|Uncaught|Recoverable) opts to RN ([#28836](facebook/react#28836)) //<Ricky>//
- **[c113503ad](facebook/react@c113503ad )**: Flush direct streams in Bun ([#28837](facebook/react#28837)) //<Kenta Iwasaki>//
- **[9defcd56b](facebook/react@9defcd56b )**: Remove redundant props assign ([#28829](facebook/react#28829)) //<Sebastian Silbermann>//
- **[ed4023603](facebook/react@ed4023603 )**: Fix mistaken "react-server" condition ([#28835](facebook/react#28835)) //<Sebastian Markbåge>//
- **[c8a035036](facebook/react@c8a035036 )**: [Fizz] hoistables should never flush before the preamble ([#28802](facebook/react#28802)) //<Josh Story>//
- **[4f5c812a3](facebook/react@4f5c812a3 )**: DevTools: Rely on sourcemaps to compute hook name of built-in hooks in newer versions ([#28593](facebook/react#28593)) //<Sebastian Silbermann>//
- **[435415962](facebook/react@435415962 )**: Backwards compatibility for string refs on WWW ([#28826](facebook/react#28826)) //<Jack Pope>//
- **[608edcc90](facebook/react@608edcc90 )**: [tests] add `assertConsole<method>Dev` helpers ([#28732](facebook/react#28732)) //<Ricky>//
- **[da69b6af9](facebook/react@da69b6af9 )**: ReactDOM.requestFormReset  ([#28809](facebook/react#28809)) //<Andrew Clark>//
- **[374b5d26c](facebook/react@374b5d26c )**: Scaffolding for requestFormReset API ([#28808](facebook/react#28808)) //<Andrew Clark>//
- **[41950d14a](facebook/react@41950d14a )**: Automatically reset forms after action finishes ([#28804](facebook/react#28804)) //<Andrew Clark>//
- **[dc6a7e01e](facebook/react@dc6a7e01e )**: [Float] Don't preload images inside `<noscript>` ([#28815](facebook/react#28815)) //<Josh Story>//
- **[3f947b1b4](facebook/react@3f947b1b4 )**: [tests] Assert scheduler log empty in internalAct ([#28737](facebook/react#28737)) //<Ricky>//
- **[bf09089f6](facebook/react@bf09089f6 )**: Remove Scheduler.log from ReactSuspenseFuzz-test ([#28812](facebook/react#28812)) //<Ricky>//
- **[84cb3b4cb](facebook/react@84cb3b4cb )**: Hardcode disableIEWorkarounds for www ([#28811](facebook/react#28811)) //<Ricky>//
- **[2243b40ab](facebook/react@2243b40ab )**: [tests] assertLog before act in useEffectEvent ([#28763](facebook/react#28763)) //<Ricky>//
- **[dfc64c6e3](facebook/react@dfc64c6e3 )**: [tests] assertLog before act in ReactUse ([#28762](facebook/react#28762)) //<Ricky>//
- **[42eff4bc7](facebook/react@42eff4bc7 )**: [tests] Fix assertions not flushed before act ([#28745](facebook/react#28745)) //<Ricky>//
- **[ed3c65caf](facebook/react@ed3c65caf )**: Warn if outdated JSX transform is detected ([#28781](facebook/react#28781)) //<Andrew Clark>//
- **[3f9e237a2](facebook/react@3f9e237a2 )**: Fix: Suspend while recovering from hydration error ([#28800](facebook/react#28800)) //<Andrew Clark>//
- **[7f5d25e23](facebook/react@7f5d25e23 )**: Fix cloneElement using string ref w no owner ([#28797](facebook/react#28797)) //<Joseph Savona>//
- **[bf40b0244](facebook/react@bf40b0244 )**: [Fizz] Stop publishing external-runtime to stable channel ([#28796](facebook/react#28796)) //<Josh Story>//
- **[7f93cb41c](facebook/react@7f93cb41c )**: [DOM] Infer react-server entries bundles if not explicitly configured ([#28795](facebook/react#28795)) //<Josh Story>//
- **[f61316535](facebook/react@f61316535 )**: Rename SECRET INTERNALS to `__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE` ([#28789](facebook/react#28789)) //<Sebastian Markbåge>//
- **[9644d206e](facebook/react@9644d206e )**: Soften useFormState warning ([#28788](facebook/react#28788)) //<Ricky>//
- **[c771016e1](facebook/react@c771016e1 )**: Rename The Secret Export of Server Internals ([#28786](facebook/react#28786)) //<Sebastian Markbåge>//
- **[d50323eb8](facebook/react@d50323eb8 )**: Flatten ReactSharedInternals ([#28783](facebook/react#28783)) //<Sebastian Markbåge>//
- **[f62cf8c62](facebook/react@f62cf8c62 )**: [Float] treat `props.async` in Float consistent with the rest of react-dom ([#26760](facebook/react#26760)) //<Josh Story>//
- **[dfd3d5af8](facebook/react@dfd3d5af8 )**: Add support for transition{run,start,cancel} events ([#27345](facebook/react#27345)) //<Hugo Sales>//
- **[1f8327f83](facebook/react@1f8327f83 )**: [Fiber] Use real event priority for hydration scheduling ([#28765](facebook/react#28765)) //<Josh Story>//
- **[97c90ed88](facebook/react@97c90ed88 )**: [DOM] Shrink ReactDOMCurrentDispatcher method names ([#28770](facebook/react#28770)) //<Josh Story>//
- **[9007fdc8f](facebook/react@9007fdc8f )**: [DOM] Shrink ReactDOMSharedInternals source representation ([#28771](facebook/react#28771)) //<Josh Story>//
- **[14f50ad15](facebook/react@14f50ad15 )**: [Flight] Allow lazily resolving outlined models ([#28780](facebook/react#28780)) //<Sebastian Markbåge>//
- **[4c12339ce](facebook/react@4c12339ce )**: [DOM] move `flushSync` out of the reconciler ([#28500](facebook/react#28500)) //<Josh Story>//
- **[8e1462e8c](facebook/react@8e1462e8c )**: [Fiber] Move updatePriority tracking to renderers ([#28751](facebook/react#28751)) //<Josh Story>//
- **[0b3b8a6a3](facebook/react@0b3b8a6a3 )**: jsx: Remove unnecessary hasOwnProperty check ([#28775](facebook/react#28775)) //<Andrew Clark>//
- **[2acfb7b60](facebook/react@2acfb7b60 )**: [Flight] Support FormData from Server to Client ([#28754](facebook/react#28754)) //<Sebastian Markbåge>//
- **[d1547defe](facebook/react@d1547defe )**: Fast JSX: Don't clone props object ([#28768](facebook/react#28768)) //<Andrew Clark>//
- **[bfd8da807](facebook/react@bfd8da807 )**: Make class prop resolution faster ([#28766](facebook/react#28766)) //<Andrew Clark>//
- **[cbb6f2b54](facebook/react@cbb6f2b54 )**: [Flight] Support Blobs from Server to Client ([#28755](facebook/react#28755)) //<Sebastian Markbåge>//
- **[f33a6b69c](facebook/react@f33a6b69c )**: Track Owner for Server Components in DEV ([#28753](facebook/react#28753)) //<Sebastian Markbåge>//
- **[e3ebcd54b](facebook/react@e3ebcd54b )**: Move string ref coercion to JSX runtime ([#28473](facebook/react#28473)) //<Andrew Clark>//
- **[fd0da3eef](facebook/react@fd0da3eef )**: Remove _owner field from JSX elements in prod if string refs are disabled ([#28739](facebook/react#28739)) //<Sebastian Markbåge>//

Changelog:
[General][Changed] - React Native sync for revisions 48b4ecc...b5e5ce8

jest_e2e[run_all_tests]
bypass-github-export-checks

Reviewed By: kassens

Differential Revision: D56251607

fbshipit-source-id: e16db2fa101fc7ed1e009158c76388206beabd5f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed React Core Team Opened by a member of the React Core Team
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants