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

Initial Lanes implementation #18796

Merged
merged 2 commits into from May 3, 2020
Merged

Initial Lanes implementation #18796

merged 2 commits into from May 3, 2020

Commits on May 2, 2020

  1. Fix tests that only notify most recent listener

    These tests were written in such a way that when a wakeable has multiple
    listeners, only the most recent listener is notified.
    
    I switched them to use a promise instead of mutating a ref.
    acdlite committed May 2, 2020
    Copy the full SHA
    e52b376 View commit details
    Browse the repository at this point in the history
  2. Initial Lanes implementation

    A refactor of our concurrency and scheduling architecture. Replaces
    the ExpirationTime type with a new concept, called Lanes.
    
    See PR facebook#18796 for more information.
    
    All of the changes I've made in this commit are behind the
    `enableNewReconciler` flag. Merging this to master will not affect the
    open source builds or the build that we ship to Facebook.
    
    The only build that is affected is the `ReactDOMForked` build, which is
    deployed to Facebook **behind an experimental flag (currently disabled
    for all users)**. We will use this flag to gradually roll out the new
    reconciler, and quickly roll it back if we find any problems.
    
    Because we have those protections in place, what I'm aiming for with
    this initial PR is the **smallest possible atomic change that lands
    cleanly and doesn't rely on too many hacks**. The goal has not been to
    get every single test or feature passing, and it definitely is not to
    implement all the features that we intend to build on top of the new
    model. When possible, I have chosen to preserve existing semantics and
    defer changes to follow-up steps. (Listed in the section below.)
    
    (I did not end up having to disable any tests, although if I had, that
    should not have necessarily been a merge blocker.)
    
    For example, even though one of the primary goals of this project is to
    improve our model for parallel Suspense transitions, in this initial
    implementation, I have chosen to keep the same core heuristics for
    sequencing and flushing that existed in the ExpirationTimes model: low
    priority updates cannot finish without also finishing high priority
    ones.
    
    Despite all these precautions, **because the scope of this refactor is
    inherently large, I do expect we will find regressions.** The flip side
    is that I also expect the new model to improve the stability of the
    codebase and make it easier to fix bugs when they arise.
    acdlite committed May 2, 2020
    Copy the full SHA
    1114b6e View commit details
    Browse the repository at this point in the history