Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(474)

Unified Diff: src/heap/store-buffer-inl.h

Issue 1608583002: New page local store buffer. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/heap/store-buffer-inl.h
diff --git a/src/heap/store-buffer-inl.h b/src/heap/store-buffer-inl.h
index e11ad87087ccf039b6076a76d3a408a66a85d6fa..30dd4342c7c1b7ceaa47587107013b4d06448286 100644
--- a/src/heap/store-buffer-inl.h
+++ b/src/heap/store-buffer-inl.h
@@ -12,42 +12,39 @@
namespace v8 {
namespace internal {
-void StoreBuffer::Mark(Address addr) {
- DCHECK(!heap_->code_space()->Contains(addr));
- Address* top = reinterpret_cast<Address*>(heap_->store_buffer_top());
- *top++ = addr;
- heap_->set_store_buffer_top(reinterpret_cast<Smi*>(top));
- if ((reinterpret_cast<uintptr_t>(top) & kStoreBufferOverflowBit) != 0) {
- DCHECK(top == limit_);
- Compact();
+uint32_t StoreBuffer::SlotAddressToOffset(Address addr, SlotSet** slots) {
Michael Lippautz 2016/01/22 08:03:49 Maybe rename to AddressToSlotSetAndOffset, as it's
ulan 2016/01/28 19:07:22 Done.
+ MemoryChunk* chunk = MemoryChunk::FromAddress(addr);
+ Space* owner = chunk->owner();
+ if (owner == NULL) {
Michael Lippautz 2016/01/22 08:03:49 nullptr
ulan 2016/01/28 19:07:22 Done.
+ chunk = heap_->lo_space()->FindPage(addr);
+ }
+ uintptr_t offset = addr - chunk->address();
+ if (chunk->old_to_new_slots() == nullptr) {
+ chunk->AllocateOldToNewSlots();
+ }
+ if (offset < Page::kPageSize) {
+ *slots = chunk->old_to_new_slots();
} else {
- DCHECK(top < limit_);
+ *slots = &chunk->old_to_new_slots()[offset / Page::kPageSize];
+ offset = offset % Page::kPageSize;
}
+ return static_cast<uint32_t>(offset);
}
-inline void StoreBuffer::MarkSynchronized(Address addr) {
- base::LockGuard<base::Mutex> lock_guard(&mutex_);
- Mark(addr);
+void StoreBuffer::Mark(Address addr) {
+ SlotSet* slots;
+ uint32_t offset;
+ offset = SlotAddressToOffset(addr, &slots);
+ slots->Insert(offset);
}
-void StoreBuffer::EnterDirectlyIntoStoreBuffer(Address addr) {
- if (store_buffer_rebuilding_enabled_) {
- SLOW_DCHECK(!heap_->code_space()->Contains(addr) &&
- !heap_->new_space()->Contains(addr));
- Address* top = old_top_;
- *top++ = addr;
- old_top_ = top;
- old_buffer_is_sorted_ = false;
- old_buffer_is_filtered_ = false;
- if (top >= old_limit_) {
- DCHECK(callback_ != NULL);
- (*callback_)(heap_, MemoryChunk::FromAnyPointerAddress(heap_, addr),
- kStoreBufferFullEvent);
- }
- }
+void StoreBuffer::MarkSynchronized(Address addr) {
+ base::LockGuard<base::Mutex> lock_guard(&mutex_);
+ Mark(addr);
}
+
} // namespace internal
} // namespace v8

Powered by Google App Engine
This is Rietveld 408576698