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

async_hooks: use new v8::Context PromiseHook API #36394

Closed
wants to merge 6 commits into from

Commits on May 3, 2021

  1. deps: V8: backport c0fceaa0669b

    Original commit message:
    
      Reland "[api] JSFunction PromiseHook for v8::Context"
    
      This is a reland of d5457f5fb7ea05ca05a697599ffa50d35c1ae3c7
      after a speculative revert.
    
      Additionally it fixes an issue with throwing promise hooks.
    
      Original change's description:
      > [api] JSFunction PromiseHook for v8::Context
      >
      > This will enable Node.js to get much better performance from async_hooks
      > as currently PromiseHook delegates to C++ for the hook function and then
      > Node.js delegates it right back to JavaScript, introducing several
      > unnecessary barrier hops in code that gets called very, very frequently
      > in modern, promise-heavy applications.
      >
      > This API mirrors the form of the original C++ function based PromiseHook
      > API, however it is intentionally separate to allow it to use JSFunctions
      > triggered within generated code to, as much as possible, avoid entering
      > runtime functions entirely.
      >
      > Because PromiseHook has internal use also, beyond just the Node.js use,
      > I have opted to leave the existing API intact and keep this separate to
      > avoid conflicting with any possible behaviour expectations of other API
      > users.
      >
      > The design ideas for this new API stemmed from discussion with some V8
      > team members at a previous Node.js Diagnostics Summit hosted by Google
      > in Munich, and the relevant documentation of the discussion can be found
      > here: https://docs.google.com/document/d/1g8OrG5lMIUhRn1zbkutgY83MiTSMx-0NHDs8Bf-nXxM/edit#heading=h.w1bavzz80l1e
      >
      > A summary of the reasons for why this new design is important can be
      > found here: https://docs.google.com/document/d/1vtgoT4_kjgOr-Bl605HR2T6_SC-C8uWzYaOPDK5pmRo/edit?usp=sharing
      >
      > Bug: v8:11025
      > Change-Id: I0b403b00c37d3020b5af07b654b860659d3a7697
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2759188
      > Reviewed-by: Marja Hölttä <marja@chromium.org>
      > Reviewed-by: Camillo Bruni <cbruni@chromium.org>
      > Reviewed-by: Anton Bikineev <bikineev@chromium.org>
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Commit-Queue: Camillo Bruni <cbruni@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#73858}
    
      Bug: v8:11025
      Bug: chromium:1197475
      Change-Id: I73a71e97d9c3dff89a2b092c3fe4adff81ede8ef
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2823917
      Reviewed-by: Marja Hölttä <marja@chromium.org>
      Reviewed-by: Igor Sheludko <ishell@chromium.org>
      Reviewed-by: Anton Bikineev <bikineev@chromium.org>
      Reviewed-by: Camillo Bruni <cbruni@chromium.org>
      Commit-Queue: Camillo Bruni <cbruni@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#74071}
    
    Refs: v8/v8@c0fceaa
    Qard committed May 3, 2021
    Copy the full SHA
    b13e57f View commit details
    Browse the repository at this point in the history
  2. deps: V8: cherry-pick 272445f10927

    Original commit message:
    
        [runtime] Fix promise hooks
    
        promiseCapability can be undefined.
    
        Bug: v8:11025
        Bug: chromium:1201113
        Change-Id: I9da8764820cee0db1f0c38ed2fff0e3afeb9a80e
        Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2844649
        Reviewed-by: Marja Hölttä <marja@chromium.org>
        Commit-Queue: Camillo Bruni <cbruni@chromium.org>
        Cr-Commit-Position: refs/heads/master@{#74117}
    
    Refs: v8/v8@272445f
    Qard committed May 3, 2021
    Copy the full SHA
    a81249b View commit details
    Browse the repository at this point in the history
  3. deps: V8: cherry-pick 5f4413194480

    Original commit message:
    
        [promises] Change context promise hooks to Callable
    
        The previously added perf-context Promise-hooks take a v8::Function as
        arguments. However, the builtin code was only accepting JSFunctions
        which causes cast errors.
    
        Drive-by-fix: Directly pass nativeContext in more places.
    
        Bug: chromium:1201465
        Change-Id: Ic8bed11253a1f18a84e71eb9ea809b1ec1c3f428
        Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2850162
        Reviewed-by: Jakob Gruber <jgruber@chromium.org>
        Commit-Queue: Camillo Bruni <cbruni@chromium.org>
        Cr-Commit-Position: refs/heads/master@{#74223}
    
    Refs: v8/v8@5f44131
    Qard committed May 3, 2021
    Copy the full SHA
    b9f79a6 View commit details
    Browse the repository at this point in the history
  4. deps: V8: cherry-pick 4c074516397b

    Original commit message:
    
        [promises] Fix slow path when context promise hooks are present
    
        Bug: chromium:1201936
        Change-Id: I1ee545e33587ddf4a5c7e1cbd64b53d36c75a146
        Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2850936
        Reviewed-by: Marja Hölttä <marja@chromium.org>
        Reviewed-by: Jakob Gruber <jgruber@chromium.org>
        Commit-Queue: Camillo Bruni <cbruni@chromium.org>
        Cr-Commit-Position: refs/heads/master@{#74267}
    
    Refs: v8/v8@4c07451
    Qard committed May 3, 2021
    Copy the full SHA
    ae8b951 View commit details
    Browse the repository at this point in the history
  5. deps: V8: cherry-pick fa4cb172cde2

    Original commit message:
    
        [runtime] Fix Promise.all context promise hooks
    
        We have to take the slow path in Promise.all if context promise hooks
        are set. The fast-path doesn't create intermediate promises by default.
    
        Bug: chromium:1204132, v8:11025
        Change-Id: Ide92de00a4f6df05e0ddbc8814f6673bd667f426
        Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2866771
        Reviewed-by: Victor Gomes <victorgomes@chromium.org>
        Commit-Queue: Camillo Bruni <cbruni@chromium.org>
        Cr-Commit-Position: refs/heads/master@{#74326}
    
    Refs: v8/v8@fa4cb17
    Qard committed May 3, 2021
    Copy the full SHA
    eed9e5e View commit details
    Browse the repository at this point in the history
  6. Copy the full SHA
    023447d View commit details
    Browse the repository at this point in the history