• mtrofin's avatar
    [wasm] reuse the first compiled module. · b4dc310a
    mtrofin authored
    This change avoids needing to keep around an unused compiled
    module. Instead, the result of compiling the wasm bytes is
    given to the first instance. The module object and that instance object
    point to the same compiled module. Instances are, then, cloned from
    the compiled module the module object points to. When an instance is
    collected, we make sure that the module object still has a clone
    available, and, if the last instance is GC-ed, we also reset the compiled
    module so that it does not reference its heap, so that it (==heap) may
    be collected.
    
    This is achieved by linking the clones in a double-linked list and
    registering a finalizer for each. When we create an instance, we tie it
    in the front of the list, making the module object point to it (O(1)). When
    the finalizer is called, we relink the list over the dying object (O(1)). The
    costliest operation is finalizing the last instance, since we need to visit
    all wasm functions and reset heap references.
    
    BUG=v8:5316
    
    Committed: https://crrev.com/01f5af515728aebe6c5246f4f7dd6c573e8748af
    Review-Url: https://codereview.chromium.org/2305903002
    Cr-Original-Commit-Position: refs/heads/master@{#39153}
    Cr-Commit-Position: refs/heads/master@{#39361}
    b4dc310a
wasm-module.cc 80.7 KB