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

Unified Diff: src/spaces.h

Issue 7326012: Split single slots buffer into per page slots buffers. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/gc
Patch Set: Created 9 years, 5 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
« src/mark-compact.cc ('K') | « src/mark-compact.cc ('k') | src/spaces.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/spaces.h
diff --git a/src/spaces.h b/src/spaces.h
index 2f90b3460d843dca7c16b150f4e35c995a3c625f..e71796084024e5f67cc7641e008fcda742be01db 100644
--- a/src/spaces.h
+++ b/src/spaces.h
@@ -291,6 +291,8 @@ class Bitmap {
};
+class SlotsBuffer;
+
// MemoryChunk represents a memory region owned by a specific space.
// It is divided into the header and the body. Chunk start is always
// 1MB aligned. Start of the body is aligned so it can accomodate
@@ -375,7 +377,8 @@ class MemoryChunk {
NEW_SPACE_BELOW_AGE_MARK,
CONTAINS_ONLY_DATA,
EVACUATION_CANDIDATE,
- EVACUATED,
+ RESCAN_ON_EVACUATION,
+ WAS_SWEPT,
NUM_MEMORY_CHUNK_FLAGS
};
@@ -389,8 +392,11 @@ class MemoryChunk {
static const int kEvacuationCandidateMask =
1 << EVACUATION_CANDIDATE;
- static const int kEvacuationCandidateOrNewSpaceMask =
- (1 << EVACUATION_CANDIDATE) | (1 << IN_FROM_SPACE) | (1 << IN_TO_SPACE);
+ static const int kSkipEvacuationSlotsRecordingMask =
+ (1 << EVACUATION_CANDIDATE) |
+ (1 << RESCAN_ON_EVACUATION) |
+ (1 << IN_FROM_SPACE) |
+ (1 << IN_TO_SPACE);
void SetFlag(int flag) {
@@ -445,7 +451,9 @@ class MemoryChunk {
kPointerSize + kPointerSize + kPointerSize + kPointerSize +
kPointerSize + kPointerSize + kIntSize;
- static const size_t kHeaderSize = kLiveBytesOffset + kIntSize;
+ static const size_t kSlotsBufferOffset = kLiveBytesOffset + kIntSize;
+
+ static const size_t kHeaderSize = kSlotsBufferOffset + kPointerSize;
static const int kBodyOffset =
CODE_POINTER_ALIGN(MAP_POINTER_ALIGN(kHeaderSize + Bitmap::kSize));
@@ -510,6 +518,31 @@ class MemoryChunk {
static const int kFlagsOffset = kPointerSize * 3;
+ bool IsEvacuationCandidate() { return IsFlagSet(EVACUATION_CANDIDATE); }
+
+ bool ShouldSkipEvacuationSlotRecording() {
+ return (flags_ & kSkipEvacuationSlotsRecordingMask) != 0;
+ }
+
+ inline SlotsBuffer* slots_buffer() {
+ return slots_buffer_;
+ }
+
+ inline SlotsBuffer** slots_buffer_address() {
+ return &slots_buffer_;
+ }
+
+ void MarkEvacuationCandidate() {
+ ASSERT(slots_buffer_ == NULL);
+ SetFlag(EVACUATION_CANDIDATE);
+ }
+
+ void ClearEvacuationCandidate() {
+ ASSERT(slots_buffer_ == NULL);
+ ClearFlag(EVACUATION_CANDIDATE);
+ }
+
+
protected:
MemoryChunk* next_chunk_;
MemoryChunk* prev_chunk_;
@@ -525,6 +558,7 @@ class MemoryChunk {
int store_buffer_counter_;
// Count of bytes marked black on page.
int live_byte_count_;
+ SlotsBuffer* slots_buffer_;
static MemoryChunk* Initialize(Heap* heap,
Address base,
@@ -623,21 +657,11 @@ class Page : public MemoryChunk {
void InitializeAsAnchor(PagedSpace* owner);
- bool IsEvacuationCandidate() { return IsFlagSet(EVACUATION_CANDIDATE); }
-
- bool IsEvacuationCandidateOrNewSpace() {
- return (flags_ & kEvacuationCandidateOrNewSpaceMask) != 0;
- }
-
- void MarkEvacuationCandidate() { SetFlag(EVACUATION_CANDIDATE); }
-
- void ClearEvacuationCandidate() { ClearFlag(EVACUATION_CANDIDATE); }
-
- bool WasEvacuated() { return IsFlagSet(EVACUATED); }
+ bool WasSwept() { return IsFlagSet(WAS_SWEPT); }
- void MarkEvacuated() { SetFlag(EVACUATED); }
+ void MarkSwept() { SetFlag(WAS_SWEPT); }
- void ClearEvacuated() { ClearFlag(EVACUATED); }
+ void ClearSwept() { ClearFlag(WAS_SWEPT); }
friend class MemoryAllocator;
};
@@ -1925,7 +1949,8 @@ class NewSpace : public Space {
explicit NewSpace(Heap* heap)
: Space(heap, NEW_SPACE, NOT_EXECUTABLE),
to_space_(heap, kToSpace),
- from_space_(heap, kFromSpace) {}
+ from_space_(heap, kFromSpace),
+ inline_allocation_limit_step_(0) {}
// Sets up the new space using the given chunk.
bool Setup(int max_semispace_size);
« src/mark-compact.cc ('K') | « src/mark-compact.cc ('k') | src/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698