1. 01 Jul, 2020 1 commit
  2. 11 Jun, 2020 1 commit
  3. 10 Jun, 2020 2 commits
    • Michael Lippautz's avatar
      cppgc: Introduce AllocationHandle · 935d9151
      Michael Lippautz authored
      Unified heap support in V8 requires having another (at least internal)
      heap that implements a unfied garbage collection strategy. This will
      not re-use the already existing cppgc::Heap because there should be no
      way in creating such a heap externally or scheduling stand-alone
      garbage collections.
      
      In order to have a common token, this CL introduces AllocationHandle
      which can be passed to MakeGarbageCollected to allocate C++ objects.
      V8 (soon) and the stand-alone heap both have methods to retrieve such
      a handle.
      
      This works around a problem with creating diamond class hierarchies
      when a base class would be exposed on the public API level.
      
      Fast paths for Blink are still possible because allocation handles can
      be cached the same way (e.g. global, or TLS) as a heap can be cached.
      
      Tbr: yangguo@chromium.org
      Bug: chromium:1056170
      Change-Id: I8e9472a2c24ef82d1178953e8429b1fd8a2344bc
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2238027
      Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#68310}
      935d9151
    • Anton Bikineev's avatar
      cppgc: Fix byte accounting for large pages and reset labs · c036b6cd
      Anton Bikineev authored
      This fixes two issues:
      - labs resetting didn't account bytes as beeing freed;
      - large object were not accounted.
      
      The CL introduces a single bottleneck for labs resetting in
      ObjectAllocator, which is aware of StatsCollector. This way
      NormalSpace is treated as a value object and all invariants
      are maintained by ObjectAllocator (and Sweeper).
      
      Bug: chromium:1056170
      Change-Id: I027cc01fe5028a3dfa81905d7ea53dd12d1c1f20
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2237629
      Commit-Queue: Anton Bikineev <bikineev@chromium.org>
      Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#68286}
      c036b6cd
  4. 14 May, 2020 3 commits
    • Omer Katz's avatar
      Reland "cppgc: Stack scanning using ObjectStartBitmap" · 93059842
      Omer Katz authored
      This reverts commit 580917d2.
      
      Reason for revert: fix in patchset 2
      
      Original change's description:
      > Revert "cppgc: Stack scanning using ObjectStartBitmap"
      > 
      > This reverts commit d3a72e3c.
      > 
      > Reason for revert: MSAN failures (https://ci.chromium.org/p/v8/builders/ci/V8%20Linux%20-%20arm64%20-%20sim%20-%20MSAN/32360)
      > 
      > Original change's description:
      > > cppgc: Stack scanning using ObjectStartBitmap
      > > 
      > > This CL implements stack scanning for cppgc.
      > > Given a value on the stack, the MarkingVisitor uses
      > > PageBackend::Lookup to checks whether that address is on
      > > the heap. If it is, BasePage::TryObjectHeaderFromInnerAddress
      > > (introduced in this CL) is used to get the relevant object
      > > header. Note that random addresses on the heap might point to
      > > free memory, object-start-bitmap, etc.
      > > 
      > > If a valid object header is found:
      > > * If the object is not in construction, the GCInfoIndex is used
      > > the get the relevant Trace method and the object is traced.
      > > * Otherwise, the object is conservatively scanned - i.e. the
      > > payload of the object is iterated word by word and each word is
      > > treated as a possible pointer.
      > > 
      > > Only addresses pointing to the payload on non-free objects are
      > > traced.
      > > 
      > > BasePage::TryObjectHeaderFromInnerAddress assumes on LAB on the
      > > relevant space, thus all LABs are reset before scanning the stack.
      > > 
      > > Bug: chromium:1056170
      > > Change-Id: I172850f6f1bbb6f0efca8e44ad8fdfe222977b9f
      > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2190426
      > > Commit-Queue: Omer Katz <omerkatz@chromium.org>
      > > Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
      > > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > > Reviewed-by: Anton Bikineev <bikineev@chromium.org>
      > > Cr-Commit-Position: refs/heads/master@{#67795}
      > 
      > TBR=ulan@chromium.org,mlippautz@chromium.org,bikineev@chromium.org,omerkatz@chromium.org
      > 
      > Change-Id: I3caef6f9f55911fd1a86e895c3495d1b98b1eac2
      > No-Presubmit: true
      > No-Tree-Checks: true
      > No-Try: true
      > Bug: chromium:1056170
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2201136
      > Reviewed-by: Leszek Swirski <leszeks@chromium.org>
      > Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#67796}
      
      TBR=ulan@chromium.org,mlippautz@chromium.org,leszeks@chromium.org,bikineev@chromium.org,omerkatz@chromium.org
      
      # Not skipping CQ checks because this is a reland.
      
      Bug: chromium:1056170
      Change-Id: If7ea4fe5cb794c07544d5545f5d6548e3375d3ae
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2201137Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarAnton Bikineev <bikineev@chromium.org>
      Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
      Commit-Queue: Omer Katz <omerkatz@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#67803}
      93059842
    • Leszek Swirski's avatar
      Revert "cppgc: Stack scanning using ObjectStartBitmap" · 580917d2
      Leszek Swirski authored
      This reverts commit d3a72e3c.
      
      Reason for revert: MSAN failures (https://ci.chromium.org/p/v8/builders/ci/V8%20Linux%20-%20arm64%20-%20sim%20-%20MSAN/32360)
      
      Original change's description:
      > cppgc: Stack scanning using ObjectStartBitmap
      > 
      > This CL implements stack scanning for cppgc.
      > Given a value on the stack, the MarkingVisitor uses
      > PageBackend::Lookup to checks whether that address is on
      > the heap. If it is, BasePage::TryObjectHeaderFromInnerAddress
      > (introduced in this CL) is used to get the relevant object
      > header. Note that random addresses on the heap might point to
      > free memory, object-start-bitmap, etc.
      > 
      > If a valid object header is found:
      > * If the object is not in construction, the GCInfoIndex is used
      > the get the relevant Trace method and the object is traced.
      > * Otherwise, the object is conservatively scanned - i.e. the
      > payload of the object is iterated word by word and each word is
      > treated as a possible pointer.
      > 
      > Only addresses pointing to the payload on non-free objects are
      > traced.
      > 
      > BasePage::TryObjectHeaderFromInnerAddress assumes on LAB on the
      > relevant space, thus all LABs are reset before scanning the stack.
      > 
      > Bug: chromium:1056170
      > Change-Id: I172850f6f1bbb6f0efca8e44ad8fdfe222977b9f
      > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2190426
      > Commit-Queue: Omer Katz <omerkatz@chromium.org>
      > Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
      > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > Reviewed-by: Anton Bikineev <bikineev@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#67795}
      
      TBR=ulan@chromium.org,mlippautz@chromium.org,bikineev@chromium.org,omerkatz@chromium.org
      
      Change-Id: I3caef6f9f55911fd1a86e895c3495d1b98b1eac2
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: chromium:1056170
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2201136Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#67796}
      580917d2
    • Omer Katz's avatar
      cppgc: Stack scanning using ObjectStartBitmap · d3a72e3c
      Omer Katz authored
      This CL implements stack scanning for cppgc.
      Given a value on the stack, the MarkingVisitor uses
      PageBackend::Lookup to checks whether that address is on
      the heap. If it is, BasePage::TryObjectHeaderFromInnerAddress
      (introduced in this CL) is used to get the relevant object
      header. Note that random addresses on the heap might point to
      free memory, object-start-bitmap, etc.
      
      If a valid object header is found:
      * If the object is not in construction, the GCInfoIndex is used
      the get the relevant Trace method and the object is traced.
      * Otherwise, the object is conservatively scanned - i.e. the
      payload of the object is iterated word by word and each word is
      treated as a possible pointer.
      
      Only addresses pointing to the payload on non-free objects are
      traced.
      
      BasePage::TryObjectHeaderFromInnerAddress assumes on LAB on the
      relevant space, thus all LABs are reset before scanning the stack.
      
      Bug: chromium:1056170
      Change-Id: I172850f6f1bbb6f0efca8e44ad8fdfe222977b9f
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2190426
      Commit-Queue: Omer Katz <omerkatz@chromium.org>
      Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarAnton Bikineev <bikineev@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#67795}
      d3a72e3c
  5. 13 May, 2020 1 commit
  6. 12 May, 2020 2 commits
  7. 11 May, 2020 1 commit
  8. 08 May, 2020 2 commits
    • Michael Lippautz's avatar
      cppgc: Rename unittest files · f701df1f
      Michael Lippautz authored
      Adjust suffix to "-unittest" like everywhere else in V8.
      
      Accept clang-format suggested changes.
      
      Bug: chromium:1056170
      Change-Id: I54c1396e79aff87c052233853d7fe560337eeecf
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2190410
      Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
      Commit-Queue: Omer Katz <omerkatz@chromium.org>
      Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
      Auto-Submit: Michael Lippautz <mlippautz@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#67672}
      f701df1f
    • Michael Lippautz's avatar
      cppgc: Implement allocation on custom spaces · 611d1bb9
      Michael Lippautz authored
      This patch provides infrastructure to pin object types to specific
      spaces. This allows embedders to create mutual exclusive arenas for
      certain (base) types. In future, this will also be used to provide
      sliding-window compaction on certain custom spaces.
      
      We mainly preserve the existing infrastructure with the difference
      that spaces are now slightly more dynamic than in Blink as they are
      kept in a vector instead of a fixed-size array.
      
      The mechanism differs from Blink in that it does not allow the user
      object to call allocation methods directly but instead provides a
      trait that can be overridden to specify a custom space.
      
      The patch preserves templatization for objects that do not go into
      custom spaces to safe a branch in the allocation hot path.
      
      Change-Id: I08aa6932348e2d6258e19c4a32d189865f459f02
      Bug: chromium:1056170
      Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2187611
      Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#67666}
      611d1bb9
  9. 07 May, 2020 1 commit
  10. 05 May, 2020 1 commit
  11. 28 Apr, 2020 1 commit
  12. 09 Apr, 2020 2 commits