• Andreas Haas's avatar
    [wasm] Reschedule compilation tasks · 62fa0487
    Andreas Haas authored
    At the moment, the whole WebAssembly compilation may run in a single
    background task. On a low-end device, this can mean that the background
    thread is busy for seconds and thereby blocks other tasks, see e.g.
    https://crbug.com/914757.
    
    With this CL we re-schedule compilation tasks after every 50ms. These
    50ms are an arbitrary number. I don't want to introduce too much
    overhead, but since this is in the background we also don't have to
    make tasks super short.
    
    Tasks which are going to compile with TurboFan will be posted with
    lower priority.
    
    This change requires changes in the CancelableTaskManager. At the
    moment it is not possible that a background task posts a new task
    which is managed by the same task manager as itself. The problem is
    about how to deal with another thread which calls CancelAndWait
    concurrently. At the moment, if a new task gets posted after the call
    to CancelAndWait, then `CHECK(!canceled_)` in
    CancelableTaskManager::Register will fail. If we used a lock to
    synchronize the calls to CancelAndWait and Register, then there would
    be a deadlock, where the thread which calls CancelAndWait waits for
    the task which wants to call Register, but at the same time blocks that
    task by holding the lock.
    
    With the change here, posting a task after the call to CancelAndWait
    will just immediately cancel the new task. This matches the behavior
    you would get if CancelAndWait is called right after calling Register.
    
    Bug: chromium:914757
    Change-Id: I6d57aba161db8a915ec0d745658e0c28d25219a8
    Reviewed-on: https://chromium-review.googlesource.com/c/1411884
    Commit-Queue: Andreas Haas <ahaas@chromium.org>
    Reviewed-by: 's avatarClemens Hammacher <clemensh@chromium.org>
    Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58898}
    62fa0487
Name
Last commit
Last update
benchmarks 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...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython 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...
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...