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

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

Issue 2530383003: [heap] Reland: Use store buffer for writes coming from mutator. (Closed)
Patch Set: add more no barriers Created 4 years, 1 month 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
« no previous file with comments | « src/heap/heap-inl.h ('k') | src/heap/store-buffer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/store-buffer.h
diff --git a/src/heap/store-buffer.h b/src/heap/store-buffer.h
index 1c985816413a11bd38f0d8c0b1f18edc0a55728d..09faf4dcbddba9c94eddf50e24a05ffb777e570c 100644
--- a/src/heap/store-buffer.h
+++ b/src/heap/store-buffer.h
@@ -10,6 +10,7 @@
#include "src/base/platform/platform.h"
#include "src/cancelable-task.h"
#include "src/globals.h"
+#include "src/heap/remembered-set.h"
#include "src/heap/slot-set.h"
namespace v8 {
@@ -28,7 +29,7 @@ class StoreBuffer {
static const int kStoreBuffers = 2;
static const intptr_t kDeletionTag = 1;
- static void StoreBufferOverflow(Isolate* isolate);
+ V8_EXPORT_PRIVATE static void StoreBufferOverflow(Isolate* isolate);
explicit StoreBuffer(Heap* heap);
void SetUp();
@@ -64,6 +65,23 @@ class StoreBuffer {
// the more efficient Remove method will be called in this case.
void DeleteEntry(Address start, Address end = nullptr);
+ void InsertEntry(Address slot) {
+ // Insertions coming from the GC are directly inserted into the remembered
+ // set. Insertions coming from the runtime are added to the store buffer to
+ // allow concurrent processing.
+ if (heap_->gc_state() == Heap::NOT_IN_GC) {
+ if (top_ + sizeof(Address) > limit_[current_]) {
+ StoreBufferOverflow(heap_->isolate());
+ }
+ *top_ = slot;
+ top_++;
+ } else {
+ // In GC the store buffer has to be empty at any time.
+ DCHECK(Empty());
+ RememberedSet<OLD_TO_NEW>::Insert(Page::FromAddress(slot), slot);
+ }
+ }
+
// Used by the concurrent processing thread to transfer entries from the
// store buffer to the remembered set.
void ConcurrentlyProcessStoreBuffer();
« no previous file with comments | « src/heap/heap-inl.h ('k') | src/heap/store-buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698