summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/invalidated-slots.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/invalidated-slots.cc')
-rw-r--r--deps/v8/src/heap/invalidated-slots.cc49
1 files changed, 13 insertions, 36 deletions
diff --git a/deps/v8/src/heap/invalidated-slots.cc b/deps/v8/src/heap/invalidated-slots.cc
index 8fa1518d68..9f29af218b 100644
--- a/deps/v8/src/heap/invalidated-slots.cc
+++ b/deps/v8/src/heap/invalidated-slots.cc
@@ -3,52 +3,35 @@
// found in the LICENSE file.
#include "src/heap/invalidated-slots.h"
+#include "src/heap/invalidated-slots-inl.h"
#include "src/heap/spaces.h"
+#include "src/objects/objects-inl.h"
namespace v8 {
namespace internal {
InvalidatedSlotsFilter InvalidatedSlotsFilter::OldToOld(MemoryChunk* chunk) {
- // The sweeper removes invalid slots and makes free space available for
- // allocation. Slots for new objects can be recorded in the free space.
- // Note that we cannot simply check for SweepingDone because pages in large
- // object space are not swept but have SweepingDone() == true.
- bool slots_in_free_space_are_valid =
- chunk->SweepingDone() && chunk->InOldSpace();
- return InvalidatedSlotsFilter(chunk, chunk->invalidated_slots<OLD_TO_OLD>(),
- slots_in_free_space_are_valid);
+ return InvalidatedSlotsFilter(chunk, chunk->invalidated_slots<OLD_TO_OLD>());
}
InvalidatedSlotsFilter InvalidatedSlotsFilter::OldToNew(MemoryChunk* chunk) {
- // Always treat these slots as valid for old-to-new for now. Invalid
- // old-to-new slots are always cleared.
- bool slots_in_free_space_are_valid = true;
- return InvalidatedSlotsFilter(chunk, chunk->invalidated_slots<OLD_TO_NEW>(),
- slots_in_free_space_are_valid);
+ return InvalidatedSlotsFilter(chunk, chunk->invalidated_slots<OLD_TO_NEW>());
}
InvalidatedSlotsFilter::InvalidatedSlotsFilter(
- MemoryChunk* chunk, InvalidatedSlots* invalidated_slots,
- bool slots_in_free_space_are_valid) {
- // Adjust slots_in_free_space_are_valid_ if more spaces are added.
- DCHECK_IMPLIES(invalidated_slots != nullptr,
- chunk->InOldSpace() || chunk->InLargeObjectSpace());
-
- slots_in_free_space_are_valid_ = slots_in_free_space_are_valid;
+ MemoryChunk* chunk, InvalidatedSlots* invalidated_slots) {
invalidated_slots = invalidated_slots ? invalidated_slots : &empty_;
iterator_ = invalidated_slots->begin();
iterator_end_ = invalidated_slots->end();
sentinel_ = chunk->area_end();
- if (iterator_ != iterator_end_) {
- invalidated_start_ = iterator_->first.address();
- invalidated_end_ = invalidated_start_ + iterator_->second;
- } else {
- invalidated_start_ = sentinel_;
- invalidated_end_ = sentinel_;
- }
- // These values will be lazily set when needed.
- invalidated_object_size_ = 0;
+
+ // Invoke NextInvalidatedObject twice, to initialize
+ // invalidated_start_ to the first invalidated object and
+ // next_invalidated_object_ to the second one.
+ NextInvalidatedObject();
+ NextInvalidatedObject();
+
#ifdef DEBUG
last_slot_ = chunk->area_start();
#endif
@@ -69,13 +52,7 @@ InvalidatedSlotsCleanup::InvalidatedSlotsCleanup(
iterator_end_ = invalidated_slots_->end();
sentinel_ = chunk->area_end();
- if (iterator_ != iterator_end_) {
- invalidated_start_ = iterator_->first.address();
- invalidated_end_ = invalidated_start_ + iterator_->second;
- } else {
- invalidated_start_ = sentinel_;
- invalidated_end_ = sentinel_;
- }
+ NextInvalidatedObject();
#ifdef DEBUG
last_free_ = chunk->area_start();