Commit d6a14abe authored by Dominik Inführ's avatar Dominik Inführ Committed by Commit Bot

[heap] Move start of incremental marking in allocation

Move start of incremental marking out of
RefillLinearAllocationAreaFromFreeList. This avoids a potential
safepoint while holding allocation_mutex_.

Bug: v8:10315
Change-Id: Ieb60ac68f26199eea7b6b7ad6d874851382f3d69
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2287496
Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#68751}
parent 8377214a
...@@ -529,12 +529,6 @@ bool PagedSpace::RefillLinearAllocationAreaFromFreeList( ...@@ -529,12 +529,6 @@ bool PagedSpace::RefillLinearAllocationAreaFromFreeList(
// if it is big enough. // if it is big enough.
FreeLinearAllocationArea(); FreeLinearAllocationArea();
if (!is_local_space()) {
heap()->StartIncrementalMarkingIfAllocationLimitIsReached(
heap()->GCFlagsForIncrementalMarking(),
kGCCallbackScheduleIdleGarbageCollection);
}
size_t new_node_size = 0; size_t new_node_size = 0;
FreeSpace new_node = FreeSpace new_node =
free_list_->Allocate(size_in_bytes, &new_node_size, origin); free_list_->Allocate(size_in_bytes, &new_node_size, origin);
...@@ -1019,6 +1013,15 @@ AllocationResult PagedSpace::AllocateRawSlow(int size_in_bytes, ...@@ -1019,6 +1013,15 @@ AllocationResult PagedSpace::AllocateRawSlow(int size_in_bytes,
top_on_previous_step_ ? top() - top_on_previous_step_ : 0; top_on_previous_step_ ? top() - top_on_previous_step_ : 0;
DCHECK_IMPLIES(!SupportsInlineAllocation(), bytes_since_last == 0); DCHECK_IMPLIES(!SupportsInlineAllocation(), bytes_since_last == 0);
if (!is_local_space()) {
// Start incremental marking before the actual allocation, this allows the
// allocation function to mark the object black when incremental marking is
// running.
heap()->StartIncrementalMarkingIfAllocationLimitIsReached(
heap()->GCFlagsForIncrementalMarking(),
kGCCallbackScheduleIdleGarbageCollection);
}
#ifdef V8_HOST_ARCH_32_BIT #ifdef V8_HOST_ARCH_32_BIT
AllocationResult result = AllocationResult result =
alignment != kWordAligned alignment != kWordAligned
......
...@@ -130,6 +130,7 @@ TEST(ExternalString_ExternalBackingStoreSizeIncreasesMarkCompact) { ...@@ -130,6 +130,7 @@ TEST(ExternalString_ExternalBackingStoreSizeIncreasesMarkCompact) {
} }
TEST(ExternalString_ExternalBackingStoreSizeIncreasesAfterExternalization) { TEST(ExternalString_ExternalBackingStoreSizeIncreasesAfterExternalization) {
ManualGCScope manual_gc_scope;
CcTest::InitializeVM(); CcTest::InitializeVM();
LocalContext env; LocalContext env;
v8::Isolate* isolate = env->GetIsolate(); v8::Isolate* isolate = env->GetIsolate();
......
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