[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: Ulan Degenbaev <ulan@chromium.org> Cr-Commit-Position: refs/heads/master@{#68751}
This commit is contained in:
parent
8377214ae8
commit
d6a14abe05
@ -529,12 +529,6 @@ bool PagedSpace::RefillLinearAllocationAreaFromFreeList(
|
||||
// if it is big enough.
|
||||
FreeLinearAllocationArea();
|
||||
|
||||
if (!is_local_space()) {
|
||||
heap()->StartIncrementalMarkingIfAllocationLimitIsReached(
|
||||
heap()->GCFlagsForIncrementalMarking(),
|
||||
kGCCallbackScheduleIdleGarbageCollection);
|
||||
}
|
||||
|
||||
size_t new_node_size = 0;
|
||||
FreeSpace new_node =
|
||||
free_list_->Allocate(size_in_bytes, &new_node_size, origin);
|
||||
@ -1019,6 +1013,15 @@ AllocationResult PagedSpace::AllocateRawSlow(int size_in_bytes,
|
||||
top_on_previous_step_ ? top() - top_on_previous_step_ : 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
|
||||
AllocationResult result =
|
||||
alignment != kWordAligned
|
||||
|
@ -130,6 +130,7 @@ TEST(ExternalString_ExternalBackingStoreSizeIncreasesMarkCompact) {
|
||||
}
|
||||
|
||||
TEST(ExternalString_ExternalBackingStoreSizeIncreasesAfterExternalization) {
|
||||
ManualGCScope manual_gc_scope;
|
||||
CcTest::InitializeVM();
|
||||
LocalContext env;
|
||||
v8::Isolate* isolate = env->GetIsolate();
|
||||
|
Loading…
Reference in New Issue
Block a user