Skip to content

Commit cb1c2b0

Browse files
Dominik InführCommit Bot
authored andcommitted
Remove noscript_shared_function_infos
SharedFunctionInfos that do not belong to a script were tracked in noscript_shared_function_infos. However this was only used in object-stats. Remove this since it was actually leaking memory in some use cases. Bug: v8:9674 Change-Id: I9482f7e5dedf975666a70684b3d2ea04c9a23518 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1798423 Reviewed-by: Ulan Degenbaev <[email protected]> Reviewed-by: Michael Stanton <[email protected]> Commit-Queue: Dominik Inführ <[email protected]> Cr-Commit-Position: refs/heads/master@{#63685}
1 parent f3bb773 commit cb1c2b0

File tree

11 files changed

+0
-109
lines changed

11 files changed

+0
-109
lines changed

src/heap/factory.cc

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3537,11 +3537,6 @@ Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(
35373537

35383538
share->clear_padding();
35393539
}
3540-
// Link into the list.
3541-
Handle<WeakArrayList> noscript_list = noscript_shared_function_infos();
3542-
noscript_list = WeakArrayList::AddToEnd(isolate(), noscript_list,
3543-
MaybeObjectHandle::Weak(share));
3544-
isolate()->heap()->set_noscript_shared_function_infos(*noscript_list);
35453540

35463541
#ifdef VERIFY_HEAP
35473542
share->SharedFunctionInfoVerify(isolate());

src/heap/heap-inl.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,6 @@ void Heap::SetRootStringTable(StringTable value) {
111111
roots_table()[RootIndex::kStringTable] = value.ptr();
112112
}
113113

114-
void Heap::SetRootNoScriptSharedFunctionInfos(Object value) {
115-
roots_table()[RootIndex::kNoScriptSharedFunctionInfos] = value.ptr();
116-
}
117-
118114
void Heap::SetMessageListeners(TemplateList value) {
119115
roots_table()[RootIndex::kMessageListeners] = value.ptr();
120116
}

src/heap/heap.cc

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5416,13 +5416,6 @@ void Heap::CompactWeakArrayLists(AllocationType allocation) {
54165416
DCHECK_IMPLIES(allocation == AllocationType::kOld, InOldSpace(*scripts));
54175417
scripts = CompactWeakArrayList(this, scripts, allocation);
54185418
set_script_list(*scripts);
5419-
5420-
Handle<WeakArrayList> no_script_list(noscript_shared_function_infos(),
5421-
isolate());
5422-
DCHECK_IMPLIES(allocation == AllocationType::kOld,
5423-
InOldSpace(*no_script_list));
5424-
no_script_list = CompactWeakArrayList(this, no_script_list, allocation);
5425-
set_noscript_shared_function_infos(*no_script_list);
54265419
}
54275420

54285421
void Heap::AddRetainedMap(Handle<Map> map) {

src/heap/object-stats.cc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -829,10 +829,6 @@ void ObjectStatsCollectorImpl::CollectGlobalStatistics() {
829829
ObjectStats::RETAINED_MAPS_TYPE);
830830

831831
// WeakArrayList.
832-
RecordSimpleVirtualObjectStats(
833-
HeapObject(),
834-
WeakArrayList::cast(heap_->noscript_shared_function_infos()),
835-
ObjectStats::NOSCRIPT_SHARED_FUNCTION_INFOS_TYPE);
836832
RecordSimpleVirtualObjectStats(HeapObject(),
837833
WeakArrayList::cast(heap_->script_list()),
838834
ObjectStats::SCRIPT_LIST_TYPE);

src/heap/object-stats.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
V(MAP_PROTOTYPE_DICTIONARY_TYPE) \
5555
V(MAP_PROTOTYPE_TYPE) \
5656
V(MAP_STABLE_TYPE) \
57-
V(NOSCRIPT_SHARED_FUNCTION_INFOS_TYPE) \
5857
V(NUMBER_STRING_CACHE_TYPE) \
5958
V(OBJECT_DICTIONARY_ELEMENTS_TYPE) \
6059
V(OBJECT_ELEMENTS_TYPE) \

src/heap/setup-heap-internal.cc

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -911,8 +911,6 @@ void Heap::CreateInitialObjects() {
911911
set_serialized_objects(roots.empty_fixed_array());
912912
set_serialized_global_proxy_sizes(roots.empty_fixed_array());
913913

914-
set_noscript_shared_function_infos(roots.empty_weak_array_list());
915-
916914
/* Canonical off-heap trampoline data */
917915
set_off_heap_trampoline_relocation_info(
918916
*Builtins::GenerateOffHeapTrampolineRelocInfo(isolate_));

src/objects/objects.cc

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4972,24 +4972,6 @@ void SharedFunctionInfo::ScriptIterator::Reset(Isolate* isolate,
49724972
index_ = 0;
49734973
}
49744974

4975-
SharedFunctionInfo::GlobalIterator::GlobalIterator(Isolate* isolate)
4976-
: isolate_(isolate),
4977-
script_iterator_(isolate),
4978-
noscript_sfi_iterator_(isolate->heap()->noscript_shared_function_infos()),
4979-
sfi_iterator_(isolate, script_iterator_.Next()) {}
4980-
4981-
SharedFunctionInfo SharedFunctionInfo::GlobalIterator::Next() {
4982-
HeapObject next = noscript_sfi_iterator_.Next();
4983-
if (!next.is_null()) return SharedFunctionInfo::cast(next);
4984-
for (;;) {
4985-
next = sfi_iterator_.Next();
4986-
if (!next.is_null()) return SharedFunctionInfo::cast(next);
4987-
Script next_script = script_iterator_.Next();
4988-
if (next_script.is_null()) return SharedFunctionInfo();
4989-
sfi_iterator_.Reset(isolate_, next_script);
4990-
}
4991-
}
4992-
49934975
void SharedFunctionInfo::SetScript(Handle<SharedFunctionInfo> shared,
49944976
Handle<Object> script_object,
49954977
int function_literal_id,
@@ -5020,30 +5002,8 @@ void SharedFunctionInfo::SetScript(Handle<SharedFunctionInfo> shared,
50205002
}
50215003
#endif
50225004
list->Set(function_literal_id, HeapObjectReference::Weak(*shared));
5023-
5024-
// Remove shared function info from root array.
5025-
WeakArrayList noscript_list =
5026-
isolate->heap()->noscript_shared_function_infos();
5027-
CHECK(noscript_list.RemoveOne(MaybeObjectHandle::Weak(shared)));
50285005
} else {
50295006
DCHECK(shared->script().IsScript());
5030-
Handle<WeakArrayList> list =
5031-
isolate->factory()->noscript_shared_function_infos();
5032-
5033-
#ifdef DEBUG
5034-
if (FLAG_enable_slow_asserts) {
5035-
WeakArrayList::Iterator iterator(*list);
5036-
for (HeapObject next = iterator.Next(); !next.is_null();
5037-
next = iterator.Next()) {
5038-
DCHECK_NE(next, *shared);
5039-
}
5040-
}
5041-
#endif // DEBUG
5042-
5043-
list =
5044-
WeakArrayList::AddToEnd(isolate, list, MaybeObjectHandle::Weak(shared));
5045-
5046-
isolate->heap()->SetRootNoScriptSharedFunctionInfos(*list);
50475007

50485008
// Remove shared function info from old script's list.
50495009
Script old_script = Script::cast(shared->script());

src/objects/shared-function-info.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -602,21 +602,6 @@ class SharedFunctionInfo : public HeapObject {
602602
DISALLOW_COPY_AND_ASSIGN(ScriptIterator);
603603
};
604604

605-
// Iterate over all shared function infos on the heap.
606-
class GlobalIterator {
607-
public:
608-
V8_EXPORT_PRIVATE explicit GlobalIterator(Isolate* isolate);
609-
V8_EXPORT_PRIVATE SharedFunctionInfo Next();
610-
611-
private:
612-
Isolate* isolate_;
613-
Script::Iterator script_iterator_;
614-
WeakArrayList::Iterator noscript_sfi_iterator_;
615-
SharedFunctionInfo::ScriptIterator sfi_iterator_;
616-
DISALLOW_HEAP_ALLOCATION(no_gc_)
617-
DISALLOW_COPY_AND_ASSIGN(GlobalIterator);
618-
};
619-
620605
DECL_CAST(SharedFunctionInfo)
621606

622607
// Constants.

src/roots/roots.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,6 @@ class Symbol;
255255
/* Feedback vectors that we need for code coverage or type profile */ \
256256
V(Object, feedback_vectors_for_profiling_tools, \
257257
FeedbackVectorsForProfilingTools) \
258-
V(WeakArrayList, noscript_shared_function_infos, \
259-
NoScriptSharedFunctionInfos) \
260258
V(FixedArray, serialized_objects, SerializedObjects) \
261259
V(FixedArray, serialized_global_proxy_sizes, SerializedGlobalProxySizes) \
262260
V(TemplateList, message_listeners, MessageListeners) \

test/cctest/heap/test-heap.cc

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5269,34 +5269,6 @@ TEST(ScriptIterator) {
52695269
CHECK_EQ(0, script_count);
52705270
}
52715271

5272-
5273-
TEST(SharedFunctionInfoIterator) {
5274-
CcTest::InitializeVM();
5275-
v8::HandleScope scope(CcTest::isolate());
5276-
Isolate* isolate = CcTest::i_isolate();
5277-
Heap* heap = CcTest::heap();
5278-
LocalContext context;
5279-
5280-
CcTest::CollectAllGarbage();
5281-
CcTest::CollectAllGarbage();
5282-
5283-
int sfi_count = 0;
5284-
{
5285-
HeapObjectIterator it(heap);
5286-
for (HeapObject obj = it.Next(); !obj.is_null(); obj = it.Next()) {
5287-
if (!obj.IsSharedFunctionInfo()) continue;
5288-
sfi_count++;
5289-
}
5290-
}
5291-
5292-
{
5293-
SharedFunctionInfo::GlobalIterator iterator(isolate);
5294-
while (!iterator.Next().is_null()) sfi_count--;
5295-
}
5296-
5297-
CHECK_EQ(0, sfi_count);
5298-
}
5299-
53005272
// This is the same as Factory::NewByteArray, except it doesn't retry on
53015273
// allocation failure.
53025274
AllocationResult HeapTester::AllocateByteArrayForTest(

0 commit comments

Comments
 (0)