Skip to content

Implement Fabric commit branching (begind a flag) - #54835

Closed
j-piasecki wants to merge 3 commits into
react:mainfrom
j-piasecki:export-D88151489
Closed

j-piasecki wants to merge 3 commits into
react:mainfrom
j-piasecki:export-D88151489

Conversation

@j-piasecki

Copy link
Copy Markdown
Contributor

Summary:
Changelog: [General][Changed] - Changed how React changes are commited to the Shadow Tree (behind a feature flag)

Introduces two branches for the Shadow Tree commits - React always commits to the JS revision, while other sources should commit to the main revision. Commits to the JS revision schedule a "merge" commit at the end of the event loop pass to upstream the React changes to the main revision.

"Merge" means taking the JS revision and promoting it to become the new main, losing changes that happened between fork and merge. Preservation of these changes is the responsibility of the party that created them, and they should be reapplied using a commit hook.

Differential Revision: D88151489

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Dec 10, 2025
@facebook-github-bot facebook-github-bot added p: Software Mansion Partner: Software Mansion Partner p: Facebook Partner: Facebook labels Dec 10, 2025
@meta-codesync

meta-codesync Bot commented Dec 10, 2025

Copy link
Copy Markdown

@j-piasecki has exported this pull request. If you are a Meta employee, you can view the originating Diff in D88151489.

Jakub Piasecki and others added 3 commits February 15, 2026 23:29
…tency

Summary:
Changelog: [General][Changed] - Refactor how shadow tree revisions are promoted as latest for JS consistency

Changes `LazyShadowTreeRevisionConsistencyManager::updateCurrentRevision` to pull the latest commited revision for a given surface id instead of accepting the new revision as a parameter.

This way, the new revision is read from the same place for every update, which opens up the way to implement commit branching. This change will allow to always read from the JS tree revision, if it exists.

Differential Revision: D88151490
Summary:
Changelog: [Internal]

Adds a feature flag for the Fabric commit branching mechanism.

Differential Revision: D88151491
Summary:
Pull Request resolved: #54835

Changelog: [General][Changed] - Changed how React changes are commited to the Shadow Tree (behind a feature flag)

Introduces two branches for the Shadow Tree commits - React always commits to the JS revision, while other sources should commit to the main revision. Commits to the JS revision schedule a "merge" commit at the end of the event loop pass to upstream the React changes to the main revision.

"Merge" means taking the JS revision and promoting it to become the new main, losing changes that happened between fork and merge. Preservation of these changes is the responsibility of the party that created them, and they should be reapplied using a commit hook.

The main synchronization points here are:
- react revision promotion/promoted revision merge
  - During merge, the promoted revision is read and reset (UI thread), while promotion itself updated the promoted revision (JS thread)
- react commit/promoted revision merge
  - In case the promoted revision being merged is the same as the current React revision, the latter needs to be reset (UI thread), so that during the next JS commit it forks from the "main" branch (JS thread).
- react commit/react revision promotion
  - Both access the `currentReactRevision`, in case of a main thread render, those might happen to run concurrently on JS/UI thread

Reviewed By: javache, rubennorte

Differential Revision: D88151489
@meta-codesync meta-codesync Bot closed this in 45b4817 Feb 16, 2026
@facebook-github-bot facebook-github-bot added the Merged This PR has been merged. label Feb 16, 2026
@meta-codesync

meta-codesync Bot commented Feb 16, 2026

Copy link
Copy Markdown

This pull request has been merged in 45b4817.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported Merged This PR has been merged. meta-exported p: Facebook Partner: Facebook p: Software Mansion Partner: Software Mansion Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants