• Michael Lippautz's avatar
    cppgc-js,heap: Implement snapshots for embedder fields · 142dd775
    Michael Lippautz authored
    https://crrev.com/c/3293410 added concurrent processing of C++ objects
    found through V8 embedder fields. The CL missed that those embedder
    fields are not read atomically from JS objects. The problem is that
    embedder fields are only aligned to kTaggedSize on builds with pointer
    compression and are as such mis-aligned for atomic ops. This is not a
    problem for on-heap values as the upper 32bits are anyways computed
    from the cage. Is is a problem for generic C++ values though, as they
    are used with Oilpan.
    
    This CL adds the standard marker snapshot protocol for embedder fields.
    
    Marker:
    1. Snapshot embedder fields
    2. Try to mark host object
    3. On success: process snapshot
    
    Main thread:
    1. On setting embedder fields mark the object black first
    2. Emit a write barrier for the embedder fields
    
    This will get simpler with the heap sandbox that uses a separate table
    for embedder fields. Once the sandbox is the default configuration, we
    	can use it as dependency for the concurrent fast path.
    
    Bug: chromium:1285706
    Change-Id: I6b975ea561be08cda840ef0dd27a11627de93900
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3380983Reviewed-by: 's avatarDominik Inführ <dinfuehr@chromium.org>
    Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#78604}
    142dd775
mark-compact.h 30.9 KB