• Benedikt Meurer's avatar
    [debug] Simplify async function instrumentation. · 41f0c0ba
    Benedikt Meurer authored
    This unifies and simplifies the way we instrument async functions for
    the purpose of async stack traces and async stepping. It does so while
    retaining the observable behavior on the inspector level (for now).
    
    Previously we'd mark the implicit promise of the async function object
    with the async task ID, and whenever we awaited, we'd copy the async
    task ID to the throwaway promise that is created by the `await`. This
    however made things unnecessarily interesting in the following regards:
    
    1. We'd see `DebugDidHandle` and `DebugWillHandle` events after the
    `AsyncFunctionFinished` events, coming from the throwaway promises,
    while the implicit promise is "done". This is especially confusing
    with rejection propagation and requires very complex stepping logic
    for async functions (after this CL it'll be possible to unify and
    simplify the stepping logic).
    2. We have to thread through the "can suspend" information from the
    Parser all the way through AsyncFunctionReject/AsyncFunctionResolve
    to the async function instrumentation to decide whether to cancel the
    pending task when the async function finishes.
    
    This CL changes the instrumentation to only happen (non recurringly) for
    the throwaway promises allocated upon `await`. This solves both problems
    mentioned above, and works because upon the first `await` the stack
    captured for the throwaway promise will include the synchronous part as
    expected, while upon later `await`s the synchronous part will be empty
    and the asynchronous part will be the stack captured for the previous
    throwaway promise (and the V8Debugger automatically short circuits
    stacks with empty synchronous part).
    
    Bug: chromium:1280519, chromium:1277451, chromium:1246867
    Change-Id: Id604dabc19ea133ea2e9dd63181b1fc33ccb5eda
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3383775Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarMaya Lekova <mslekova@chromium.org>
    Reviewed-by: 's avatarSimon Zünd <szuend@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#78599}
    41f0c0ba
Name
Last commit
Last update
.github Loading commit data...
bazel Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.bazelrc Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.mailmap Loading commit data...
.vpython Loading commit data...
.vpython3 Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.bazel Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LOONG_OWNERS Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
RISCV_OWNERS Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
WORKSPACE Loading commit data...
codereview.settings Loading commit data...