1 // Copyright 2020 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "src/heap/cppgc/marking-state.h" 6 7 #include <unordered_set> 8 9 namespace cppgc { 10 namespace internal { 11 FlushNotFullyConstructedObjects()12void MutatorMarkingState::FlushNotFullyConstructedObjects() { 13 std::unordered_set<HeapObjectHeader*> objects = 14 not_fully_constructed_worklist_.Extract<AccessMode::kAtomic>(); 15 for (HeapObjectHeader* object : objects) { 16 if (MarkNoPush(*object)) 17 previously_not_fully_constructed_worklist_.Push(object); 18 } 19 } 20 FlushDiscoveredEphemeronPairs()21void MutatorMarkingState::FlushDiscoveredEphemeronPairs() { 22 discovered_ephemeron_pairs_worklist_.Publish(); 23 if (!discovered_ephemeron_pairs_worklist_.IsGlobalEmpty()) { 24 ephemeron_pairs_for_processing_worklist_.Merge( 25 &discovered_ephemeron_pairs_worklist_); 26 } 27 } 28 29 } // namespace internal 30 } // namespace cppgc 31