summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/sweeper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/sweeper.cc')
-rw-r--r--deps/v8/src/heap/sweeper.cc32
1 files changed, 13 insertions, 19 deletions
diff --git a/deps/v8/src/heap/sweeper.cc b/deps/v8/src/heap/sweeper.cc
index c3c6b58835..11be775485 100644
--- a/deps/v8/src/heap/sweeper.cc
+++ b/deps/v8/src/heap/sweeper.cc
@@ -4,7 +4,6 @@
#include "src/heap/sweeper.h"
-#include "src/base/template-utils.h"
#include "src/execution/vm-state-inl.h"
#include "src/heap/array-buffer-tracker-inl.h"
#include "src/heap/gc-tracer.h"
@@ -181,7 +180,7 @@ void Sweeper::StartSweeperTasks() {
ForAllSweepingSpaces([this](AllocationSpace space) {
DCHECK(IsValidSweepingSpace(space));
num_sweeping_tasks_++;
- auto task = base::make_unique<SweeperTask>(
+ auto task = std::make_unique<SweeperTask>(
heap_->isolate(), this, &pending_sweeper_tasks_semaphore_,
&num_sweeping_tasks_, space);
DCHECK_LT(num_tasks_, kMaxSweeperTasks);
@@ -321,8 +320,8 @@ int Sweeper::RawSweep(
ClearFreedMemoryMode::kClearFreedMemory);
}
if (should_reduce_memory_) p->DiscardUnusedMemory(free_start, size);
- RememberedSet<OLD_TO_NEW>::RemoveRange(p, free_start, free_end,
- SlotSet::KEEP_EMPTY_BUCKETS);
+ RememberedSetSweeping::RemoveRange(p, free_start, free_end,
+ SlotSet::KEEP_EMPTY_BUCKETS);
RememberedSet<OLD_TO_OLD>::RemoveRange(p, free_start, free_end,
SlotSet::KEEP_EMPTY_BUCKETS);
if (non_empty_typed_slots) {
@@ -355,8 +354,8 @@ int Sweeper::RawSweep(
ClearFreedMemoryMode::kClearFreedMemory);
}
if (should_reduce_memory_) p->DiscardUnusedMemory(free_start, size);
- RememberedSet<OLD_TO_NEW>::RemoveRange(p, free_start, p->area_end(),
- SlotSet::KEEP_EMPTY_BUCKETS);
+ RememberedSetSweeping::RemoveRange(p, free_start, p->area_end(),
+ SlotSet::KEEP_EMPTY_BUCKETS);
RememberedSet<OLD_TO_OLD>::RemoveRange(p, free_start, p->area_end(),
SlotSet::KEEP_EMPTY_BUCKETS);
if (non_empty_typed_slots) {
@@ -404,6 +403,10 @@ void Sweeper::SweepSpaceFromTask(AllocationSpace identity) {
Page* page = nullptr;
while (!stop_sweeper_tasks_ &&
((page = GetSweepingPageSafe(identity)) != nullptr)) {
+ // Typed slot sets are only recorded on code pages. Code pages
+ // are not swept concurrently to the application to ensure W^X.
+ DCHECK(!page->typed_slot_set<OLD_TO_NEW>() &&
+ !page->typed_slot_set<OLD_TO_OLD>());
ParallelSweepPage(page, identity);
}
}
@@ -462,16 +465,6 @@ int Sweeper::ParallelSweepPage(
max_freed = RawSweep(page, REBUILD_FREE_LIST, free_space_mode,
invalidated_slots_in_free_space);
DCHECK(page->SweepingDone());
-
- // After finishing sweeping of a page we clean up its remembered set.
- TypedSlotSet* typed_slot_set = page->typed_slot_set<OLD_TO_NEW>();
- if (typed_slot_set) {
- typed_slot_set->FreeToBeFreedChunks();
- }
- SlotSet* slot_set = page->slot_set<OLD_TO_NEW>();
- if (slot_set) {
- slot_set->FreeToBeFreedBuckets();
- }
}
{
@@ -488,7 +481,7 @@ void Sweeper::ScheduleIncrementalSweepingTask() {
auto taskrunner =
V8::GetCurrentPlatform()->GetForegroundTaskRunner(isolate);
taskrunner->PostTask(
- base::make_unique<IncrementalSweeperTask>(heap_->isolate(), this));
+ std::make_unique<IncrementalSweeperTask>(heap_->isolate(), this));
}
}
@@ -517,6 +510,7 @@ void Sweeper::PrepareToBeSweptPage(AllocationSpace space, Page* page) {
DCHECK(!category->is_linked(page->owner()->free_list()));
});
#endif // DEBUG
+ page->MoveOldToNewRememberedSetForSweeping();
page->set_concurrent_sweeping_state(Page::kSweepingPending);
heap_->paged_space(space)->IncreaseAllocatedBytes(
marking_state_->live_bytes(page), page);
@@ -596,8 +590,8 @@ void Sweeper::StartIterabilityTasks() {
DCHECK(!iterability_task_started_);
if (FLAG_concurrent_sweeping && !iterability_list_.empty()) {
- auto task = base::make_unique<IterabilityTask>(
- heap_->isolate(), this, &iterability_task_semaphore_);
+ auto task = std::make_unique<IterabilityTask>(heap_->isolate(), this,
+ &iterability_task_semaphore_);
iterability_task_id_ = task->id();
iterability_task_started_ = true;
V8::GetCurrentPlatform()->CallOnWorkerThread(std::move(task));