summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/slot-set.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/slot-set.cc')
-rw-r--r--deps/v8/src/heap/slot-set.cc32
1 files changed, 9 insertions, 23 deletions
diff --git a/deps/v8/src/heap/slot-set.cc b/deps/v8/src/heap/slot-set.cc
index 12cf6bab5a..92540574a0 100644
--- a/deps/v8/src/heap/slot-set.cc
+++ b/deps/v8/src/heap/slot-set.cc
@@ -11,7 +11,6 @@ TypedSlots::~TypedSlots() {
Chunk* chunk = head_;
while (chunk != nullptr) {
Chunk* next = chunk->next;
- delete[] chunk->buffer;
delete chunk;
chunk = next;
}
@@ -22,9 +21,8 @@ TypedSlots::~TypedSlots() {
void TypedSlots::Insert(SlotType type, uint32_t offset) {
TypedSlot slot = {TypeField::encode(type) | OffsetField::encode(offset)};
Chunk* chunk = EnsureChunk();
- DCHECK_LT(chunk->count, chunk->capacity);
- chunk->buffer[chunk->count] = slot;
- ++chunk->count;
+ DCHECK_LT(chunk->buffer.size(), chunk->buffer.capacity());
+ chunk->buffer.push_back(slot);
}
void TypedSlots::Merge(TypedSlots* other) {
@@ -46,37 +44,25 @@ TypedSlots::Chunk* TypedSlots::EnsureChunk() {
if (!head_) {
head_ = tail_ = NewChunk(nullptr, kInitialBufferSize);
}
- if (head_->count == head_->capacity) {
- head_ = NewChunk(head_, NextCapacity(head_->capacity));
+ if (head_->buffer.size() == head_->buffer.capacity()) {
+ head_ = NewChunk(head_, NextCapacity(head_->buffer.capacity()));
}
return head_;
}
-TypedSlots::Chunk* TypedSlots::NewChunk(Chunk* next, int capacity) {
+TypedSlots::Chunk* TypedSlots::NewChunk(Chunk* next, size_t capacity) {
Chunk* chunk = new Chunk;
chunk->next = next;
- chunk->buffer = new TypedSlot[capacity];
- chunk->capacity = capacity;
- chunk->count = 0;
+ chunk->buffer.reserve(capacity);
+ DCHECK_EQ(chunk->buffer.capacity(), capacity);
return chunk;
}
-TypedSlotSet::~TypedSlotSet() { FreeToBeFreedChunks(); }
-
-void TypedSlotSet::FreeToBeFreedChunks() {
- base::MutexGuard guard(&to_be_freed_chunks_mutex_);
- std::stack<std::unique_ptr<Chunk>> empty;
- to_be_freed_chunks_.swap(empty);
-}
-
void TypedSlotSet::ClearInvalidSlots(
const std::map<uint32_t, uint32_t>& invalid_ranges) {
Chunk* chunk = LoadHead();
while (chunk != nullptr) {
- TypedSlot* buffer = chunk->buffer;
- int count = chunk->count;
- for (int i = 0; i < count; i++) {
- TypedSlot slot = LoadTypedSlot(buffer + i);
+ for (TypedSlot& slot : chunk->buffer) {
SlotType type = TypeField::decode(slot.type_and_offset);
if (type == CLEARED_SLOT) continue;
uint32_t offset = OffsetField::decode(slot.type_and_offset);
@@ -88,7 +74,7 @@ void TypedSlotSet::ClearInvalidSlots(
upper_bound--;
DCHECK_LE(upper_bound->first, offset);
if (upper_bound->second > offset) {
- ClearTypedSlot(buffer + i);
+ slot = ClearedTypedSlot();
}
}
chunk = LoadNext(chunk);