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

Reland "[heap] Move start of incremental marking in allocation"

This is a reland of d6a14abe

Test wasn't written with incremental/concurrent marking in mind, so
simply disabling it for this particular unittest.

Original change's description:
> [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}

Bug: v8:10315
Change-Id: I2a665400d9a784b1557474a051839d5c8b45e9e2
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2292241Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#68818}
parent 62e06b39
...@@ -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();
......
...@@ -726,6 +726,7 @@ TEST_F(RuntimeCallStatsTest, CallbackFunction) { ...@@ -726,6 +726,7 @@ TEST_F(RuntimeCallStatsTest, CallbackFunction) {
TEST_F(RuntimeCallStatsTest, ApiGetter) { TEST_F(RuntimeCallStatsTest, ApiGetter) {
FLAG_allow_natives_syntax = true; FLAG_allow_natives_syntax = true;
FLAG_incremental_marking = false;
RuntimeCallCounter* callback_counter = RuntimeCallCounter* callback_counter =
stats()->GetCounter(RuntimeCallCounterId::kFunctionCallback); stats()->GetCounter(RuntimeCallCounterId::kFunctionCallback);
......
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