Commit a12cbd34 authored by Marja Hölttä's avatar Marja Hölttä Committed by Commit Bot

Revert "Revert (partially) "Reland [in-place weak refs] Use WeakArrayList in Heap::noscript_list.""

This reverts commit a5efd507.

Reason for revert: was a GC bug, unrelated to this CL.

Original change's description:
> Revert (partially) "Reland [in-place weak refs] Use WeakArrayList in Heap::noscript_list."
> 
> Reason: flaky wasm crashes.
> 
> This leaves WeakArrayList::RemoveOne (+ tests for it) in place.
> 
> BUG=v8:7308, v8:8014
> 
> Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng
> Change-Id: I1195d061ae7d3c82f921f94f50df3f09a55de5ca
> Reviewed-on: https://chromium-review.googlesource.com/1161904
> Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
> Commit-Queue: Marja Hölttä <marja@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#54891}

TBR=marja@chromium.org,mlippautz@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: v8:7308, v8:8014
Change-Id: Id8002e2178ac89378b047dd0acd1bf4e3c272918
Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng
Reviewed-on: https://chromium-review.googlesource.com/1162124Reviewed-by: 's avatarMarja Hölttä <marja@chromium.org>
Commit-Queue: Marja Hölttä <marja@chromium.org>
Cr-Commit-Position: refs/heads/master@{#54921}
parent 3fc300e1
......@@ -715,7 +715,7 @@ StartupData SnapshotCreator::CreateBlob(
i::GarbageCollectionReason::kSnapshotCreator);
{
i::HandleScope scope(isolate);
isolate->heap()->CompactFixedArraysOfWeakCells();
isolate->heap()->CompactWeakArrayLists();
}
isolate->heap()->read_only_space()->ClearStringPaddingIfNeeded();
......
......@@ -3541,9 +3541,10 @@ Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(
share->clear_padding();
}
// Link into the list.
Handle<Object> new_noscript_list = FixedArrayOfWeakCells::Add(
isolate(), noscript_shared_function_infos(), share);
isolate()->heap()->set_noscript_shared_function_infos(*new_noscript_list);
Handle<WeakArrayList> noscript_list = noscript_shared_function_infos();
noscript_list = WeakArrayList::AddToEnd(isolate(), noscript_list,
MaybeObjectHandle::Weak(share));
isolate()->heap()->set_noscript_shared_function_infos(*noscript_list);
#ifdef VERIFY_HEAP
share->SharedFunctionInfoVerify(isolate());
......
......@@ -5037,13 +5037,6 @@ void Heap::RemoveGCEpilogueCallback(v8::Isolate::GCCallbackWithData callback,
}
namespace {
void CompactFixedArrayOfWeakCells(Isolate* isolate, Object* object) {
if (object->IsFixedArrayOfWeakCells()) {
FixedArrayOfWeakCells* array = FixedArrayOfWeakCells::cast(object);
array->Compact<FixedArrayOfWeakCells::NullCallback>(isolate);
}
}
Handle<WeakArrayList> CompactWeakArrayList(Heap* heap,
Handle<WeakArrayList> array) {
if (array->length() == 0) {
......@@ -5073,7 +5066,7 @@ Handle<WeakArrayList> CompactWeakArrayList(Heap* heap,
} // anonymous namespace
void Heap::CompactFixedArraysOfWeakCells() {
void Heap::CompactWeakArrayLists() {
// Find known PrototypeUsers and compact them.
std::vector<Handle<PrototypeInfo>> prototype_infos;
{
......@@ -5095,13 +5088,15 @@ void Heap::CompactFixedArraysOfWeakCells() {
prototype_info->set_prototype_users(new_array);
}
// Find known FixedArrayOfWeakCells and compact them.
CompactFixedArrayOfWeakCells(isolate(), noscript_shared_function_infos());
// Find known WeakArrayLists and compact them.
Handle<WeakArrayList> scripts(script_list(), isolate());
scripts = CompactWeakArrayList(this, scripts);
set_script_list(*scripts);
Handle<WeakArrayList> no_script_list(noscript_shared_function_infos(),
isolate());
no_script_list = CompactWeakArrayList(this, no_script_list);
set_noscript_shared_function_infos(*no_script_list);
}
void Heap::AddRetainedMap(Handle<Map> map) {
......
......@@ -689,7 +689,7 @@ class Heap {
void ProcessMovedExternalString(Page* old_page, Page* new_page,
ExternalString* string);
void CompactFixedArraysOfWeakCells();
void CompactWeakArrayLists();
void AddRetainedMap(Handle<Map> map);
......
......@@ -706,8 +706,7 @@ void ObjectStatsCollectorImpl::CollectGlobalStatistics() {
// FixedArrayOfWeakCells.
RecordSimpleVirtualObjectStats(
nullptr,
FixedArrayOfWeakCells::cast(heap_->noscript_shared_function_infos()),
nullptr, WeakArrayList::cast(heap_->noscript_shared_function_infos()),
ObjectStats::NOSCRIPT_SHARED_FUNCTION_INFOS_TYPE);
RecordSimpleVirtualObjectStats(nullptr,
WeakArrayList::cast(heap_->script_list()),
......
......@@ -866,7 +866,7 @@ void Heap::CreateInitialObjects() {
set_serialized_objects(roots.empty_fixed_array());
set_serialized_global_proxy_sizes(roots.empty_fixed_array());
set_noscript_shared_function_infos(Smi::kZero);
set_noscript_shared_function_infos(roots.empty_weak_array_list());
STATIC_ASSERT(interpreter::BytecodeOperands::kOperandScaleCount == 3);
set_deserialize_lazy_handler(Smi::kZero);
......
......@@ -13947,11 +13947,11 @@ SharedFunctionInfo::GlobalIterator::GlobalIterator(Isolate* isolate)
sfi_iterator_(isolate, script_iterator_.Next()) {}
SharedFunctionInfo* SharedFunctionInfo::GlobalIterator::Next() {
SharedFunctionInfo* next = noscript_sfi_iterator_.Next<SharedFunctionInfo>();
if (next != nullptr) return next;
HeapObject* next = noscript_sfi_iterator_.Next();
if (next != nullptr) return SharedFunctionInfo::cast(next);
for (;;) {
next = sfi_iterator_.Next();
if (next != nullptr) return next;
if (next != nullptr) return SharedFunctionInfo::cast(next);
Script* next_script = script_iterator_.Next();
if (next_script == nullptr) return nullptr;
sfi_iterator_.Reset(next_script);
......@@ -13988,19 +13988,21 @@ void SharedFunctionInfo::SetScript(Handle<SharedFunctionInfo> shared,
#endif
list->Set(function_literal_id, HeapObjectReference::Weak(*shared));
} else {
Handle<Object> list = isolate->factory()->noscript_shared_function_infos();
Handle<WeakArrayList> list =
isolate->factory()->noscript_shared_function_infos();
#ifdef DEBUG
if (FLAG_enable_slow_asserts) {
FixedArrayOfWeakCells::Iterator iterator(*list);
SharedFunctionInfo* next;
while ((next = iterator.Next<SharedFunctionInfo>()) != nullptr) {
WeakArrayList::Iterator iterator(*list);
HeapObject* next;
while ((next = iterator.Next()) != nullptr) {
DCHECK_NE(next, *shared);
}
}
#endif // DEBUG
list = FixedArrayOfWeakCells::Add(isolate, list, shared);
list =
WeakArrayList::AddToEnd(isolate, list, MaybeObjectHandle::Weak(shared));
isolate->heap()->SetRootNoScriptSharedFunctionInfos(*list);
}
......@@ -14024,8 +14026,8 @@ void SharedFunctionInfo::SetScript(Handle<SharedFunctionInfo> shared,
}
} else {
// Remove shared function info from root array.
Object* list = isolate->heap()->noscript_shared_function_infos();
CHECK(FixedArrayOfWeakCells::cast(list)->Remove(shared));
WeakArrayList* list = isolate->heap()->noscript_shared_function_infos();
CHECK(list->RemoveOne(MaybeObjectHandle::Weak(shared)));
}
// Finally set new script.
......
......@@ -574,7 +574,7 @@ class SharedFunctionInfo : public HeapObject, public NeverReadOnlySpaceObject {
private:
Script::Iterator script_iterator_;
FixedArrayOfWeakCells::Iterator noscript_sfi_iterator_;
WeakArrayList::Iterator noscript_sfi_iterator_;
SharedFunctionInfo::ScriptIterator sfi_iterator_;
DisallowHeapAllocation no_gc_;
DISALLOW_COPY_AND_ASSIGN(GlobalIterator);
......
......@@ -244,7 +244,8 @@ namespace internal {
/* Feedback vectors that we need for code coverage or type profile */ \
V(Object, feedback_vectors_for_profiling_tools, \
FeedbackVectorsForProfilingTools) \
V(Object, noscript_shared_function_infos, NoScriptSharedFunctionInfos) \
V(WeakArrayList, noscript_shared_function_infos, \
NoScriptSharedFunctionInfos) \
V(FixedArray, serialized_objects, SerializedObjects) \
V(FixedArray, serialized_global_proxy_sizes, SerializedGlobalProxySizes) \
V(TemplateList, message_listeners, MessageListeners) \
......
......@@ -83,6 +83,7 @@ bool IsInitiallyMutable(Factory* factory, Address object_address) {
V(feedback_vectors_for_profiling_tools) \
V(materialized_objects) \
V(microtask_queue) \
V(noscript_shared_function_infos) \
V(retained_maps) \
V(retaining_path_targets) \
V(serialized_global_proxy_sizes) \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment