• littledan's avatar
    Improve stack traces for async functions · f296dad9
    littledan authored
    This patch tracks the stack of async functions differently from other
    Promise async stack tracking. With this patch, the stack trace of a
    callstack of async functions should look similarly to the call stack
    if all of the functions were synchronous. An example can be found in
    the updated test expectations: https://codereview.chromium.org/2362923002 .
    
    The new stack traces are implemented using existing mechanisms in the
    inspector. The inspector has two ways to save async stack traces: recurring
    and non-recurring stacks. An example of a non-recurring stack is setTimeout,
    and a recurring one is saved for setInterval. Recurring stacks are deleted
    only when a special "cancel" function is called, rather than being deleted
    after being used the first time. Previous Promise async stack tracking always
    used non-recurring stacks.
    
    For async functions, this patch saves a recurring stack. The top frame of
    the stack is duplicated, as the resuming function contains a similar frame;
    the devtools frontend is responsible for removing or marking this frame,
    which it can do based on seeing the [async function] line which follows it.
    The second frame will instead be provided by the resuming execution
    context. The recurring stack is saved when the async function is entered, and
    it is deleted from a finally block. The id of the stack is saved in the outer
    Promise being constructed by the async function. When an intermediate
    throwaway Promise will be triggered as a reaction, it will be identified as
    such based on its debugging metadata, and the corresponding async function's
    recurring stack will be used.
    
    BUG=v8:4483
    
    Review-Url: https://codereview.chromium.org/2357423002
    Cr-Commit-Position: refs/heads/master@{#39695}
    f296dad9
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles 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/binutils Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...