• Clemens Backes's avatar
    [utils] Synchronize across StdoutStream instances · a0687c71
    Clemens Backes authored
    We constantly fight against scrambled output with --print-wasm-code and
    other flags. Passing --single-threaded only partially mitigates this,
    because there could still be multiple isolates (e.g. Workers), and we
    sometimes failed to really execute in a single thread if that flag was
    set.
    Hence this CL solves the problem in a more fundamental way: Whenever a
    {StdoutStream} is constructed, it implicitly takes a global recursive
    mutex. The recursive mutex is needed because we still have some printing
    methods that don't take a stream as parameter, and instead create their
    own instance of {StdoutStream}, which should not crash of course.
    
    The overhead of taking a mutex should be acceptable, since output to
    stdout mostly happens if special tracing flags have been passed, and is
    slow anyway.
    
    This CL ensures that the {StdoutStream} is used at least for
    --print-code, --print-wasm-code, and --trace-turbo-graph.
    More flags can later be ported on demand.
    
    The {JSHeapBroker} class was modified to not contain a {StdoutStream},
    but instead create one on demand.
    
    R=mlippautz@chromium.org, tebbi@chromium.org
    CC=ahaas@chromium.org
    
    Bug: v8:10506
    Change-Id: Ib9cf8d76aa79553b4215bb7775e6d47a8179aafa
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2201767Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
    Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
    Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Commit-Queue: Clemens Backes <clemensb@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#67855}
    a0687c71
js-heap-broker.h 13.1 KB