- 06 Oct, 2020 1 commit
-
-
Ulan Degenbaev authored
This reverts commit 969cdfe6. Reason for revert: speculative revert for crbug.com/1135472 Original change's description: > [heap] Convert WeakObjects to heap::base::Worklist > > This splits WeakObjects into explicit global and local worklists. > The latter are defined in WeakObjects::Local and are thread-local. > > The main thread local worklist is stored in > MarkCompactCollector::local_weak_objects and exists during marking > similar to local_marking_worklists. Concurrent markers create their > own local worklists that are published at the end. > > Change-Id: I093fdc580b4609ce83455b860b90a5099085beac > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2440607 > Commit-Queue: Ulan Degenbaev <ulan@chromium.org> > Reviewed-by: Dominik Inführ <dinfuehr@chromium.org> > Cr-Commit-Position: refs/heads/master@{#70317} TBR=ulan@chromium.org,dinfuehr@chromium.org Change-Id: I3fa3bfdcf3c359f46a3b56c19fb4e486883cde9d No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2452749Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#70344}
-
- 05 Oct, 2020 1 commit
-
-
Ulan Degenbaev authored
This splits WeakObjects into explicit global and local worklists. The latter are defined in WeakObjects::Local and are thread-local. The main thread local worklist is stored in MarkCompactCollector::local_weak_objects and exists during marking similar to local_marking_worklists. Concurrent markers create their own local worklists that are published at the end. Change-Id: I093fdc580b4609ce83455b860b90a5099085beac Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2440607 Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Cr-Commit-Position: refs/heads/master@{#70317}
-
- 01 Oct, 2020 1 commit
-
-
Ulan Degenbaev authored
This removes custom object iteration in MarkingVerifier. Change-Id: I2e597dab6014ff4443faa60cd3d4be20a2dc1b56 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2438067Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#70250}
-
- 24 Sep, 2020 1 commit
-
-
Ulan Degenbaev authored
Change-Id: I5d82528cd07c263bfbedfdd3a090bcd4f67ef55d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2428593Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#70117}
-
- 11 Aug, 2020 1 commit
-
-
Ulan Degenbaev authored
This is the first step in refactoring Worklist to allow arbitrary number of local worklists with private segments: - Introduce MarkingWorklistImpl<> which will eventually replace (and will be renamed to) Worklist. - MarkingWorklistImpl<> owns the global pool of segments but does not keep track of private segments. - MarkingWorklistImpl<>::Local owns private segments and can be constructed dynamically on background threads. - Rename the existing MarkingWorklistsHolder to MarkingWorklists. - Rename the existing MarkingWorklists to MarkingWorklists::Local. - Rename the existing marking_workists_holder to marking_worklists. - Rename the existing marking_worklists to local_marking_worklists. Design doc: https://bit.ly/2XMtjLi Bug: v8:10315 Change-Id: I9da34883ad34f4572fccd40c51e51eaf50c617bc Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2343330Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#69330}
-
- 17 Jun, 2020 1 commit
-
-
Dan Elphick authored
Since ReadOnlySpace pages will soon not be MemoryChunks, change most uses of MemoryChunk::FromHeapObject and FromAddress to use the BasicMemoryChunk variants and which use the new MemoryChunk::cast function that takes a BasicMemoryChunk and DCHECKs !InReadOnlySpace(). To enable this, it also moves into BasicMemoryChunk several MemoryChunk functions that just require a BasicMemoryChunk. Bug: v8:10454 Change-Id: I80875b2c2446937ac2c2bc9287d36e71cc050c38 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2243216 Commit-Queue: Dan Elphick <delphick@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#68390}
-
- 06 May, 2020 1 commit
-
-
Junliang Yan authored
Bug: v8:7703 Change-Id: If2d5c2da1d653247f49e5dfb2e50850b97119b20 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2170798Reviewed-by:
Igor Sheludko <ishell@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Junliang Yan <jyan@ca.ibm.com> Cr-Commit-Position: refs/heads/master@{#67629}
-
- 26 Feb, 2020 1 commit
-
-
Dominik Inführ authored
When iterating objects on a page add CHECKs that we actually load a map and ensure the object ends within the current chunk. Bug: chromium:1055252 Change-Id: I8f2d5f08229cb1a2fce64af6e22988de87d1b572 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2072744Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Commit-Queue: Dominik Inführ <dinfuehr@chromium.org> Cr-Commit-Position: refs/heads/master@{#66456}
-
- 11 Dec, 2019 1 commit
-
-
Ulan Degenbaev authored
This unifies marking worklists handling by the main thread marker and by the concurrent markers. A new class called MarkingWorklistsHolder owns all marking worklists: the default worklist, the on-hold worklist, and the embedder worklist. Each thread creates a local view of the marking worklists by creating an instance of MarkingWorklists. Additionally, marking visitors now work on MarkingWorklists instead of accessing each worklist individually. Besides cleaning the code up, this CL provides a bottleneck for implementing per-context worklists. Bug: chromium:973627 Change-Id: I52ad65c94bc0695287ba7bf4d8a814a9035e2888 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1941947Reviewed-by:
Hannes Payer <hpayer@chromium.org> Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#65421}
-
- 08 Nov, 2019 1 commit
-
-
Ulan Degenbaev authored
Now incremental marker and stop-the-world marker use the same visitor, which is derived from MarkingVisitorBase. This removes code duplication and also should reduce binary size. The marking worklist processing code also changes to not color the object black before visiting it. Instead the visitor colors the object black in ShouldVisit method. Bug: chromium:1019218 Change-Id: I57971122f3c77ad2770b6754d696b79d802ef1a4 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1901271 Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Cr-Commit-Position: refs/heads/master@{#64848}
-
- 05 Nov, 2019 1 commit
-
-
Ulan Degenbaev authored
This removes the usage of retaining_path_mode template parameter in main thread marking visitor and makes the incremental visitor identical to the stop-the-world visitor. Subsequent CL will switch these visitors to MarkingVisitorBase. Bug: chromium:1019218 Change-Id: I00e3ef190d8f2ac821cb63b02c402aad5ea49e9c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1897538Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#64757}
-
- 04 Nov, 2019 1 commit
-
-
Ulan Degenbaev authored
This makes the stop-the-world marking visitor the same as incremental visitor for processing large fixed arrays. Bug: chromium:1020982 Change-Id: Ie3b4ea7ad397ea0ae00000875aca0d142f672a3f Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1897828Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#64743}
-
- 30 Oct, 2019 1 commit
-
-
Ulan Degenbaev authored
This is the first step in unification of concurrent and main thread marking visitors. The new MarkingVisitorBase will become a base class for all marking visitors and will remove the existing code duplication. This is a refactoring without behavior change. Subsequent CL will change the main thread marking visitor to derive from the new base class. Bug: chromium:1019218 Change-Id: I3d47030d396e0ba6706882fbd922bbcac46181b2 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1886920Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#64632}
-
- 28 Oct, 2019 1 commit
-
-
Seth Brenith authored
This change begins making use of the fact that Torque now knows about the relationship between classes and instance types, to replace a few repetitive lists: - Instance type checkers (single and range), defined in src/objects/instance-type.h - Verification dispatch in src/diagnostics/objects-debug.cc - Printer dispatch in src/diagnostics/objects-printer.cc - Postmortem object type detection in tools/debug_helper/get-object-properties.cc Torque is updated to generate four macro lists for the instance types, representing all of the classes separated in two dimensions: classes that correspond to a single instance type versus those that have a range, and classes that are fully defined in Torque (with fields and methods inside '{}') versus those that are only declared. The latter distinction is useful because fully-defined classes are guaranteed to correspond to real C++ classes, whereas only-declared classes are not. A few other changes were required to make the lists above work: - Renamed IsFiller to IsFreeSpaceOrFiller to better reflect what it does and avoid conflicts with the new macro-generated IsFiller method. This is the part I'm most worried about: I think the new name is an improvement for clarity and consistency, but I could imagine someone typing IsFiller out of habit and introducing a bug. If we'd prefer to keep the name IsFiller, my other idea is to rename FreeSpace to VariableSizeFiller and Filler to FixedSizeFiller. - Made Tuple3 extend from Struct, not Tuple2, because IsTuple2 is expected to check for only TUPLE2_TYPE and not include TUPLE3_TYPE. - Normalized the dispatched behavior for BigIntBase and HeapNumber. - Added a few new object printers. Bug: v8:7793 Change-Id: I5462bb105f8a314baa59bd6ab6ab6215df6f313c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1860314 Commit-Queue: Seth Brenith <seth.brenith@microsoft.com> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Reviewed-by:
Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Dan Elphick <delphick@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#64597}
-
- 16 Oct, 2019 1 commit
-
-
Jakob Kummerow authored
for "entries", i.e. indices into the backing store (as opposed to "public indices" going into the hash function). This improves consistency and compiler-enforced type safety; no change in behavior is intended. Change-Id: I25e57e3ddcf18a406e2dfbd66786b6980c4e9615 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1852768 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Yang Guo <yangguo@chromium.org> Cr-Commit-Position: refs/heads/master@{#64317}
-
- 25 Sep, 2019 1 commit
-
-
Dominik Inführ authored
Since https://crrev.com/c/1771783 the mutator owns the old-to-new remembered set, while the sweeper modifies the sweeping-slot-set. This allows us to update the old-to-new remembered set non-atomically. In this CL the mutator now inserts non-atomically into the remembered set. The AccessMode is now explicit for Insert-operations as well. Bug: v8:9454 Change-Id: I94730345f7dd34fe309839969330687c94b3080b Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1803652 Commit-Queue: Dominik Inführ <dinfuehr@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#63971}
-
- 23 May, 2019 1 commit
-
-
Clemens Hammacher authored
This CL was generated by an automatic clang AST rewriter using this matcher expression: callExpr( callee( cxxMethodDecl( hasName("operator->"), ofClass(isSameOrDerivedFrom("v8::internal::Object")) ) ), argumentCountIs(1) ) The "->" at the expression location was then rewritten to ".". R=jkummerow@chromium.org TBR=mstarzinger@chromium.org,verwaest@chromium.org,yangguo@chromium.org Bug: v8:9183, v8:3770 No-Try: true No-Tree-Checks: true Change-Id: I0a7ecabdeafe51d0cf427f5280af0c7cab96869e Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1624209Reviewed-by:
Clemens Hammacher <clemensh@chromium.org> Reviewed-by:
Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Commit-Queue: Yang Guo <yangguo@chromium.org> Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#61764}
-
- 21 May, 2019 1 commit
-
-
Yang Guo authored
Bug: v8:9247 TBR=bmeurer@chromium.org,neis@chromium.org NOPRESUBMIT=true Change-Id: Ia1e49d1aac09c4ff9e05d58fab9d08dd71198878 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1621931Reviewed-by:
Yang Guo <yangguo@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Commit-Queue: Yang Guo <yangguo@chromium.org> Cr-Commit-Position: refs/heads/master@{#61682}
-
- 20 May, 2019 1 commit
-
-
Yang Guo authored
Code that is being moved primarily deal with layout of a JSObject, accessing properties and elements, and map transitions. NOTREECHECKS=true NOTRY=true Bug: v8:9247 Change-Id: Ibce5d5926ac4021c8d40c4dd109948775ce1da58 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1613994 Commit-Queue: Yang Guo <yangguo@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Reviewed-by:
Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#61638}
-
- 02 May, 2019 1 commit
-
-
Ulan Degenbaev authored
This is a reland of 7c426286 Original change's description: > [heap] Use normal marking write barrier for fixed array elements > > This simplifies the marking write barrier for elements to mark the > values instead of revisiting the array. > > Bug: chromium:918485 > > Change-Id: Id5da0d5b9ff8385a256fe14f4bf7171f9f6343e1 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1588459 > Commit-Queue: Ulan Degenbaev <ulan@chromium.org> > Reviewed-by: Hannes Payer <hpayer@chromium.org> > Reviewed-by: Michael Lippautz <mlippautz@chromium.org> > Cr-Commit-Position: refs/heads/master@{#61125} Bug: chromium:918485 Change-Id: I8075e0333b3a05bc6193eb4bc030bfdcd72e64d8 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1593088Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Reviewed-by:
Hannes Payer <hpayer@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#61170}
-
- 30 Apr, 2019 3 commits
-
-
Clemens Hammacher authored
This reverts commit 7c426286. Reason for revert: Compile error on cfi: https://ci.chromium.org/p/v8/builders/ci/V8%20Linux64%20-%20cfi/20196 Original change's description: > [heap] Use normal marking write barrier for fixed array elements > > This simplifies the marking write barrier for elements to mark the > values instead of revisiting the array. > > Bug: chromium:918485 > > Change-Id: Id5da0d5b9ff8385a256fe14f4bf7171f9f6343e1 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1588459 > Commit-Queue: Ulan Degenbaev <ulan@chromium.org> > Reviewed-by: Hannes Payer <hpayer@chromium.org> > Reviewed-by: Michael Lippautz <mlippautz@chromium.org> > Cr-Commit-Position: refs/heads/master@{#61125} TBR=ulan@chromium.org,hpayer@chromium.org,mlippautz@chromium.org Change-Id: I8576fe00b19db906aa80ca9cb54c3b8cc95e3d97 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:918485 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1590076Reviewed-by:
Clemens Hammacher <clemensh@chromium.org> Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#61128}
-
Ulan Degenbaev authored
This simplifies the marking write barrier for elements to mark the values instead of revisiting the array. Bug: chromium:918485 Change-Id: Id5da0d5b9ff8385a256fe14f4bf7171f9f6343e1 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1588459 Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Reviewed-by:
Hannes Payer <hpayer@chromium.org> Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Cr-Commit-Position: refs/heads/master@{#61125}
-
Mike Stanton authored
Failure addressed by not exposing the new test to the jitless environment. (jgruber@ on TBR). New enum RelocInfo::COMPRESSED_EMBEDDED_OBJECT created to support compressed pointers in generated code. Enum name EMBEDDED_OBJECT changed to FULL_EMBEDDED_OBJECT. RelocInfo::[set_]target_object() abstract away the difference between FULL_EMBEDDED_OBJECT and COMPRESSED_EMBEDDED_OBJECT. Compressed embedded objects can only be created at this time on x64 with pointer compression turned on. Arm64 constant pools don't support compressed objects at this time. NOPRESUBMIT=true Bug: v8:7703 TBR: jgruber@chromium.org Change-Id: Ifff53b041bab09b4b8c3e16085e5df4aa2b99f4f Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1588461Reviewed-by:
Michael Stanton <mvstanton@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Michael Stanton <mvstanton@chromium.org> Cr-Commit-Position: refs/heads/master@{#61104}
-
- 29 Apr, 2019 2 commits
-
-
Ross McIlroy authored
This reverts commit b5da9fcb. Reason for revert: Breaks pointer compression bot: https://ci.chromium.org/p/v8/builders/ci/V8%20Linux64%20-%20pointer%20compression/3098 Original change's description: > [ptr-compr] New RelocInfo for compressed pointers. > > New enum RelocInfo::COMPRESSED_EMBEDDED_OBJECT created to support > compressed pointers in generated code. Enum name EMBEDDED_OBJECT > changed to FULL_EMBEDDED_OBJECT. > > RelocInfo::[set_]target_object() abstract away the difference between > FULL_EMBEDDED_OBJECT and COMPRESSED_EMBEDDED_OBJECT. > > Compressed embedded objects can only be created at this time on > x64 with pointer compression turned on. Arm64 constant pools don't > support compressed objects at this time. > > Bug: v8:7703 > Change-Id: I03bfd84effa33c65cf9bcefa5df680ab7eace9dd > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1547661 > Commit-Queue: Michael Stanton <mvstanton@chromium.org> > Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> > Reviewed-by: Jakob Gruber <jgruber@chromium.org> > Reviewed-by: Igor Sheludko <ishell@chromium.org> > Reviewed-by: Ulan Degenbaev <ulan@chromium.org> > Cr-Commit-Position: refs/heads/master@{#61076} TBR=ulan@chromium.org,mvstanton@chromium.org,mstarzinger@chromium.org,jgruber@chromium.org,ishell@chromium.org Change-Id: I262b2b98315fa987c5a66b1050dc726563ccdb2d No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: v8:7703 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1588135Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Cr-Commit-Position: refs/heads/master@{#61087}
-
Mike Stanton authored
New enum RelocInfo::COMPRESSED_EMBEDDED_OBJECT created to support compressed pointers in generated code. Enum name EMBEDDED_OBJECT changed to FULL_EMBEDDED_OBJECT. RelocInfo::[set_]target_object() abstract away the difference between FULL_EMBEDDED_OBJECT and COMPRESSED_EMBEDDED_OBJECT. Compressed embedded objects can only be created at this time on x64 with pointer compression turned on. Arm64 constant pools don't support compressed objects at this time. Bug: v8:7703 Change-Id: I03bfd84effa33c65cf9bcefa5df680ab7eace9dd Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1547661 Commit-Queue: Michael Stanton <mvstanton@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Reviewed-by:
Igor Sheludko <ishell@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#61076}
-
- 01 Apr, 2019 1 commit
-
-
Mythri A authored
It is not safe to access flags from concurrent marking visitor. We access FLAG_flush_bytecode and FLAG_stress_flush_bytecode when visiting SharedFunctionInfo and JSFunction to decide if we need to collect bytecode. This cl adds a bytecode_flushing_mode which will be initialized when creating the visitor. This way we can avoid accessing flags. Bug: v8:9045 Change-Id: I84bf09ec2dd1543abad54bd87f8bf953830b89e7 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1541108Reviewed-by:
Hannes Payer <hpayer@chromium.org> Commit-Queue: Mythri Alle <mythria@chromium.org> Cr-Commit-Position: refs/heads/master@{#60553}
-
- 21 Mar, 2019 1 commit
-
-
Michael Lippautz authored
FixedArray object in LO space are processed incrementally in ranges of slots size kProgressBarScanningChunk to reduce latency when returning to the processing loop is critical. A progress bar stores how much slots have been processed already. In the case of regular concurrent marking there was a guarantee that the object was only processed by one thread (main *or* concurrent marking thread) at the same time. However, some optimizations that avoid write barriers for each individual write operation emit a batched write barrier that requires re-visiting the FixedArray for the marking barrier. In such cases, the progress bar would be reset using relaxed stores which is problematic as the concurrent marking thread could race on setting its own progress on the progress bar. As a result, the array would only be re-scanned partially. The fix involves using CAS to set the progress bar and bail out in the case an inconsistent state was observed. In the following: MT... main thread CM... concurrent marking thread The interesting cases are: 1. MT *or* CM processes the array without interfering: Progress bar is updated monotonically without failing. 3. MT interferes with itself: The progress bar is just reset and the main thread will restart scanning from index 0. The object is added twice to the marking worklist and processed each time one of the entries is retrieved from the worklist. 4. MT interferes with CM: 4.a.: CM processes a range of slots and re-adds the left overs by setting the progress bar and re-adding the array to the worklist. In this case CM *and* MT process the array from index 0. The first time the CAS for setting the progress bar fails on either of the threads, the looser will bail out and leave processing for the winner. 4.b.: CM is interrupted while processing a range of the array and fails in setting the progress bar for the left overs. In this case the CM bails out right away and the main thread starts processing from index 0. In addition, there is a transition from index 0 to the index of the first actual slot. This transition makes it possible to observe a reset while processing the first actual chunk of slots. Bug: chromium:942699 Change-Id: I0b06f47ee075030dadfc959528cd77b6b69bbec2 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1532325Reviewed-by:
Hannes Payer <hpayer@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Michael Lippautz <mlippautz@chromium.org> Cr-Commit-Position: refs/heads/master@{#60385}
-
- 18 Mar, 2019 1 commit
-
-
Maciej Goszczycki authored
Change-Id: I626340e61e9c1a46e0d1c882cc4fa86454d93e8a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1526013 Commit-Queue: Mythri Alle <mythria@chromium.org> Commit-Queue: Maciej Goszczycki <goszczycki@google.com> Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Cr-Commit-Position: refs/heads/master@{#60293}
-
- 15 Feb, 2019 1 commit
-
-
Jakob Kummerow authored
This takes heap-inl.h out of the "Giant Include Cluster". Naturally, that means adding a bunch of explicit includes in a bunch of places that relied on transitively including them before. As of this patch, no header file outside src/heap/ includes heap-inl.h. Bug: v8:8562,v8:8499 Change-Id: I65fa763f90e66afc30d105b9277792721f05a6d4 Reviewed-on: https://chromium-review.googlesource.com/c/1459659 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Reviewed-by:
Michael Starzinger <mstarzinger@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#59617}
-
- 30 Jan, 2019 1 commit
-
-
Marja Hölttä authored
This replaces WeakFactory with FinalizationGroup. New API is here: https://weakrefs.netlify.com/ BUG=v8:8179 Change-Id: I8c1c4a70deb42581d17117423dd29d93bdd35cb0 Reviewed-on: https://chromium-review.googlesource.com/c/1435938Reviewed-by:
Maya Lekova <mslekova@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Reviewed-by:
Sathya Gunasekaran <gsathya@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#59204}
-
- 29 Jan, 2019 1 commit
-
-
Ulan Degenbaev authored
This replaces InNewSpace with InYoungGeneration, which is a prerequisite for young large objects. Additional changes: - FROM_SPACE, TO_SPACE flags are renamed to FROM_PAGE, TO_PAGE. - A new LARGE_PAGE flag is added. - The external string table is refactored to track young string instead of new space strings. Bug: chromium:924547 Change-Id: Ia4e3ba1b72995c3400257a1f98559f091533e811 Reviewed-on: https://chromium-review.googlesource.com/c/1437274Reviewed-by:
Benedikt Meurer <bmeurer@chromium.org> Reviewed-by:
Yang Guo <yangguo@chromium.org> Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#59156}
-
- 22 Jan, 2019 1 commit
-
-
Ross McIlroy authored
This is a reland of f5729f1c TBR=ulan@chromium.org Original change's description: > [GC] Ensure JSFunctions with flushed bytecode are flushed during GC. > > When bytecode is flushed from a SFI, the JSFunctions still retain their > FeedbackVector's and point to the interpreter entry trampoline. They are > reset if re-executed, however if not they could hold onto the feedback > vector indefinetly. This CL adds a pass the GC to detect JSFunctions that > need to be reset, and performs the reset at the end of GC. > > BUG=v8:8395 > > Change-Id: I3de8655aff9ff80f912b4fd51dee43eb98cfd519 > Reviewed-on: https://chromium-review.googlesource.com/c/1393292 > Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> > Reviewed-by: Ulan Degenbaev <ulan@chromium.org> > Cr-Commit-Position: refs/heads/master@{#58775} Bug: v8:8395 Change-Id: If9580b25ba32e4065e20d86cb8ed22a3280d59e9 Reviewed-on: https://chromium-review.googlesource.com/c/1424860Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Cr-Commit-Position: refs/heads/master@{#59001}
-
- 18 Jan, 2019 2 commits
-
-
Clemens Hammacher authored
This reverts commit d5e63b03. Reason for revert: Fails gc-stress: https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Mac64%20GC%20Stress/5312 Original change's description: > Reland "[GC] Ensure JSFunctions with flushed bytecode are flushed during GC." > > This is a reland of f5729f1c > > TBR=ulan@chromium.org > > Original change's description: > > [GC] Ensure JSFunctions with flushed bytecode are flushed during GC. > > > > When bytecode is flushed from a SFI, the JSFunctions still retain their > > FeedbackVector's and point to the interpreter entry trampoline. They are > > reset if re-executed, however if not they could hold onto the feedback > > vector indefinetly. This CL adds a pass the GC to detect JSFunctions that > > need to be reset, and performs the reset at the end of GC. > > > > BUG=v8:8395 > > > > Change-Id: I3de8655aff9ff80f912b4fd51dee43eb98cfd519 > > Reviewed-on: https://chromium-review.googlesource.com/c/1393292 > > Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> > > Reviewed-by: Ulan Degenbaev <ulan@chromium.org> > > Cr-Commit-Position: refs/heads/master@{#58775} > > Bug: v8:8395 > Change-Id: I9bc84b62332575a080561c51f08b699b91e41e4a > Reviewed-on: https://chromium-review.googlesource.com/c/1414859 > Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> > Reviewed-by: Ulan Degenbaev <ulan@chromium.org> > Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> > Cr-Commit-Position: refs/heads/master@{#58924} TBR=ulan@chromium.org,rmcilroy@chromium.org Change-Id: I5d3012d4c7277ae792b0488780ff426d51dd602f No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: v8:8395 Reviewed-on: https://chromium-review.googlesource.com/c/1421838Reviewed-by:
Clemens Hammacher <clemensh@chromium.org> Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#58925}
-
Ross McIlroy authored
This is a reland of f5729f1c TBR=ulan@chromium.org Original change's description: > [GC] Ensure JSFunctions with flushed bytecode are flushed during GC. > > When bytecode is flushed from a SFI, the JSFunctions still retain their > FeedbackVector's and point to the interpreter entry trampoline. They are > reset if re-executed, however if not they could hold onto the feedback > vector indefinetly. This CL adds a pass the GC to detect JSFunctions that > need to be reset, and performs the reset at the end of GC. > > BUG=v8:8395 > > Change-Id: I3de8655aff9ff80f912b4fd51dee43eb98cfd519 > Reviewed-on: https://chromium-review.googlesource.com/c/1393292 > Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> > Reviewed-by: Ulan Degenbaev <ulan@chromium.org> > Cr-Commit-Position: refs/heads/master@{#58775} Bug: v8:8395 Change-Id: I9bc84b62332575a080561c51f08b699b91e41e4a Reviewed-on: https://chromium-review.googlesource.com/c/1414859 Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Reviewed-by:
Ross McIlroy <rmcilroy@chromium.org> Cr-Commit-Position: refs/heads/master@{#58924}
-
- 15 Jan, 2019 1 commit
-
-
Jakob Kummerow authored
It is slightly faster than Page::FromAddress(o->address()) (saves one instruction), and more concise than Page::FromAddress(o->ptr()). Same for MemoryChunk::FromHeapObject(). Bug: v8:8562 Change-Id: I9dc2b787aed5cad2d4087850dfa2e8eb157ad225 Reviewed-on: https://chromium-review.googlesource.com/c/1405031 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Yang Guo <yangguo@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#58806}
-
- 14 Jan, 2019 2 commits
-
-
Clemens Hammacher authored
This reverts commit f5729f1c. Reason for revert: GC Stress failures, e.g. https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Linux64%20GC%20Stress%20-%20custom%20snapshot/23549 Original change's description: > [GC] Ensure JSFunctions with flushed bytecode are flushed during GC. > > When bytecode is flushed from a SFI, the JSFunctions still retain their > FeedbackVector's and point to the interpreter entry trampoline. They are > reset if re-executed, however if not they could hold onto the feedback > vector indefinetly. This CL adds a pass the GC to detect JSFunctions that > need to be reset, and performs the reset at the end of GC. > > BUG=v8:8395 > > Change-Id: I3de8655aff9ff80f912b4fd51dee43eb98cfd519 > Reviewed-on: https://chromium-review.googlesource.com/c/1393292 > Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> > Reviewed-by: Ulan Degenbaev <ulan@chromium.org> > Cr-Commit-Position: refs/heads/master@{#58775} TBR=ulan@chromium.org,rmcilroy@chromium.org Change-Id: I1ba0a190e54bb84b9e2c52ae73d19eb5afc02a4b No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: v8:8395 Reviewed-on: https://chromium-review.googlesource.com/c/1408993Reviewed-by:
Clemens Hammacher <clemensh@chromium.org> Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#58778}
-
Ross McIlroy authored
When bytecode is flushed from a SFI, the JSFunctions still retain their FeedbackVector's and point to the interpreter entry trampoline. They are reset if re-executed, however if not they could hold onto the feedback vector indefinetly. This CL adds a pass the GC to detect JSFunctions that need to be reset, and performs the reset at the end of GC. BUG=v8:8395 Change-Id: I3de8655aff9ff80f912b4fd51dee43eb98cfd519 Reviewed-on: https://chromium-review.googlesource.com/c/1393292 Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#58775}
-
- 11 Jan, 2019 2 commits
-
-
Ross McIlroy authored
Forced GCs are performed during memory benchmarking to record memory usage, and as such, should not age the bytecode and cause it to be prematurely flushed. BUG=v8:8395 Change-Id: I75c16d8fec29963e49d70738c6a399fd826f6e8b Reviewed-on: https://chromium-review.googlesource.com/c/1393298 Commit-Queue: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by:
Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#58749}
-
Ulan Degenbaev authored
This fixes two places that used the marking write barrier for elements instead of the new marking write barrier for descriptor array. This also ensures that revisited objects are marked black. Bug: v8:8651,chromium:917794 Change-Id: Ifc17ff89686f32ccf61d4b3f764b0ab536c42912 Reviewed-on: https://chromium-review.googlesource.com/c/1406670Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#58742}
-
- 09 Jan, 2019 1 commit
-
-
Jakob Kummerow authored
Now that we no longer have ObjectPtr and Object* return types, one way to load the slot's contents is enough. Bug: v8:3770 Change-Id: I5acaeed22e68595b0e0ba036fcc4ac3d15c57462 Reviewed-on: https://chromium-review.googlesource.com/c/1400416 Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by:
Michael Lippautz <mlippautz@chromium.org> Cr-Commit-Position: refs/heads/master@{#58678}
-