• 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
cancelable-task.h 5.9 KB