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

[suspense][error handling] Inline renderRoot and fix error handling bug #16801

Merged
merged 9 commits into from Sep 23, 2019

Commits on Sep 23, 2019

  1. [scheduler][profiler] Start time of delayed tasks

    Fixes a bug in the Scheduler profiler where the start time of a delayed
    tasks is always 0.
    acdlite committed Sep 23, 2019
    Copy the full SHA
    65edc8d View commit details
    Browse the repository at this point in the history
  2. [suspense][error handling] Add failing unit test

    Covers an edge case where an error is thrown inside the complete phase
    of a component that is in the return path of a component that suspends.
    The second error should also be handled (i.e. able to be captured by
    an error boundary.
    
    The test is currently failing because there's a call to
    `completeUnitOfWork` inside the main render phase `catch` block. That
    call is not itself wrapped in try-catch, so anything that throws is
    treated as a fatal/unhandled error.
    
    I believe this bug is only observable if something in the host config
    throws; and, only in legacy mode, because in concurrent/batched mode,
    `completeUnitOfWork` on fiber that throws follows the "unwind" path
    only, not the "complete" path, and the "unwind" path does not call
    any host config methods.
    acdlite committed Sep 23, 2019
    Copy the full SHA
    6d5a2c2 View commit details
    Browse the repository at this point in the history
  3. Outline push/pop logic in renderRoot

    I want to get rid of the the `isSync` argument to `renderRoot`, and
    instead use separate functions for concurrent and synchronous render.
    
    As a first step, this extracts the push/pop logic that happens before
    and after the render phase into helper functions.
    acdlite committed Sep 23, 2019
    Copy the full SHA
    975636b View commit details
    Browse the repository at this point in the history
  4. Extract catch block into helper function

    Similar to previous commit. Extract error handling logic into
    a separate function so it can be reused.
    acdlite committed Sep 23, 2019
    Copy the full SHA
    3017781 View commit details
    Browse the repository at this point in the history
  5. Fork renderRoot for sync and concurrent

    Removes `isSync` argument in favor of separate functions.
    acdlite committed Sep 23, 2019
    Copy the full SHA
    0f64c2d View commit details
    Browse the repository at this point in the history
  6. Extra "root completion" logic to separate function

    Moving this out to avoid an accidental early return, which would
    bypass the call to `ensureRootIsScheduled` and freeze the UI.
    acdlite committed Sep 23, 2019
    Copy the full SHA
    acfb818 View commit details
    Browse the repository at this point in the history
  7. Inline renderRoot

    Inlines `renderRoot` into `performConcurrentWorkOnRoot` and
    `performSyncWorkOnRoot`. This lets me remove the `isSync` argument
    and also get rid of a redundant try-catch wrapper.
    acdlite committed Sep 23, 2019
    Copy the full SHA
    35ab8c0 View commit details
    Browse the repository at this point in the history
  8. Remove ad hoc throw

    Fatal errors (errors that are not captured by an error boundary) are
    currently rethrown from directly inside the render phase's `catch`
    block. This is a refactor hazard because the code in this branch has
    to mirror the code that happens at the end of the function, when exiting
    the render phase in the normal case.
    
    This commit moves the throw to the end, using a new root exit status.
    acdlite committed Sep 23, 2019
    Copy the full SHA
    17d59fc View commit details
    Browse the repository at this point in the history
  9. Copy the full SHA
    d69643c View commit details
    Browse the repository at this point in the history