• Leszek Swirski's avatar
    [compiler-dispatcher] Move Job pointer to SFI · 3b9091c8
    Leszek Swirski authored
    Reduce the enqueuing cost of compiler-dispatcher jobs by getting rid of
    the sets and hashmaps, and instead:
    
      1. Turning the pending job set into a queue, and
      2. Making the SharedFunctionInfo's UncompiledData hold a pointer to
         the LazyCompilerDispatcher::Job, instead of maintaining an
         IdentityMap from one to the other.
    
    To avoid bloating all UncompiledData, this adds two new UncompiledData
    subclasses, making it four subclasses total, for with/without Preparse
    data and with/without a Job pointer. "should_parallel_compile"
    FunctionLiterals get allocated an UncompiledData with a job pointer by
    default, otherwise enqueueing a SFI without a job pointer triggers a
    reallocation of the UncompiledData to add a job pointer.
    
    Since there is no longer a set of all Jobs (aside from one for
    debug-only), we need to be careful to manually clear the Job pointer
    from the UncompiledData whenever we finish a Job (whether successfully
    or by aborting) and we have to make sure that we implicitly can reach
    all Jobs via the pending/finalizable lists, or the set of currently
    running jobs.
    
    Change-Id: I3aae78e6dfbdc74f5f7c1411de398433907b2705
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3314833Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
    Commit-Queue: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#78302}
    3b9091c8
factory-base.cc 41.2 KB