%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Copyright 2021 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "src/profiler/weak-code-registry.h" #include "src/handles/global-handles.h" #include "src/objects/instance-type-inl.h" namespace v8 { namespace internal { namespace { void Untrack(CodeEntry* entry) { if (Address** heap_object_location_address = entry->heap_object_location_address()) { GlobalHandles::Destroy(*heap_object_location_address); *heap_object_location_address = nullptr; } } } // namespace void WeakCodeRegistry::Track(CodeEntry* entry, Handle<AbstractCode> code) { DCHECK(!*entry->heap_object_location_address()); DisallowGarbageCollection no_gc; Handle<AbstractCode> handle = isolate_->global_handles()->Create(*code); Address** heap_object_location_address = entry->heap_object_location_address(); *heap_object_location_address = handle.location(); GlobalHandles::MakeWeak(heap_object_location_address); entries_.push_back(entry); } void WeakCodeRegistry::Sweep(WeakCodeRegistry::Listener* listener) { std::vector<CodeEntry*> alive_entries; for (CodeEntry* entry : entries_) { // Mark the CodeEntry as being deleted on the heap if the heap object // location was nulled, indicating the object was freed. if (!*entry->heap_object_location_address()) { if (listener) { listener->OnHeapObjectDeletion(entry); } } else { alive_entries.push_back(entry); } } entries_ = std::move(alive_entries); } void WeakCodeRegistry::Clear() { for (CodeEntry* entry : entries_) { Untrack(entry); } entries_.clear(); } } // namespace internal } // namespace v8