• Leszek Swirski's avatar
    [api] Add API for off-thread code cache deserialization · f888f48e
    Leszek Swirski authored
    To consume a code cache off-thread
    
      1. The embedder creates a CachedData object wrapping the data blob.
      2. The embedder calls ScriptCompiler::StartConsumingCodeCache with the
         CachedData, and receives a ScriptCompiler::CodeCacheConsumeTask
         which takes ownership of the CachedData.
      3. The embedder calls ScriptCompiler::CodeCacheConsumeTask::Run
         on a different thread.
      4. Once this completes, the embedded passes the completed task as an
         optional argument into Source constructor, and calls Compile as
         before.
    
    This is roughly similar to how streaming compilation works, with the
    QoL improvement that Source owns the CodeCacheConsumeTask and therefore
    we can reuse the same Compile method and do the off-thread finalization
    behind the scenes inside Compile.
    
    On the v8::internal side, ScriptCompiler::CodeCacheConsumeTask wraps a
    v8::internal::BackgroundDeserializeTask, which has a Run and a Finish
    method. The Run creates a LocalIsolate (again, similar to
    BackgroundCompileTask), calls some helpers on CodeSerializer, and stores
    the pre-finalization result in a OffThreadDeserializeData structure.
    This stores Persistent Handles to the off-thread initialized SFI and
    a vector of Scripts needing fixing up, and it owns the PersistentHandles
    object which owns those Handles. Finally, the Finish method consumes
    this OffThreadDeserializeData structure, fixes up Scripts, moves the
    SFI Handle into the caller HandleScope, and that's it.
    
    Since we don't yet have the source at off-thread deserialization time,
    the various code cache sanity checks are done without the source hash
    when deserializing, and the Finish method re-does them now that the
    source is available.
    
    Bug: chromium:1075999
    Change-Id: If1faf35ba3ef840fa4e735581d0b29c96c1d5fc8
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3067322
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
    Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
    Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#76155}
    f888f48e
test-serialize.cc 153 KB