Reviewers: Michael Starzinger,
Description:
Clean up StoreBuffer::EnsureSpace.
BUG=
Please review this at https://codereview.chromium.org/16690006/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/heap.cc
M src/store-buffer.h
M src/store-buffer.cc
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index
2817fcba58264f29d0d6d087cca965507d3b7662..a5d44c20dab4353c2a1923d850c47bc3ba36f9f3
100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -1212,7 +1212,7 @@ void StoreBufferRebuilder::Callback(MemoryChunk*
page, StoreBufferEvent event) {
// Store Buffer overflowed while scanning promoted objects. These
are not
// in any particular page, though they are likely to be clustered by
the
// allocation routines.
- store_buffer_->EnsureSpace(StoreBuffer::kStoreBufferSize);
+ store_buffer_->EnsureSpace(StoreBuffer::kStoreBufferSize / 2);
} else {
// Store Buffer overflowed while scanning a particular old space
page for
// pointers to new space.
Index: src/store-buffer.cc
diff --git a/src/store-buffer.cc b/src/store-buffer.cc
index
c650f57ccc73a1b336bd991f6acbc69d6e1f083d..fd6366a727229923919f553441beda726a224192
100644
--- a/src/store-buffer.cc
+++ b/src/store-buffer.cc
@@ -142,6 +142,11 @@ void StoreBuffer::Uniq() {
}
+bool StoreBuffer::SpaceAvailable(intptr_t space_needed) {
+ return old_limit_ - old_top_ >= space_needed;
+}
+
+
void StoreBuffer::EnsureSpace(intptr_t space_needed) {
while (old_limit_ - old_top_ < space_needed &&
old_limit_ < old_reserved_limit_) {
@@ -152,7 +157,7 @@ void StoreBuffer::EnsureSpace(intptr_t space_needed) {
old_limit_ += grow;
}
- if (old_limit_ - old_top_ >= space_needed) return;
+ if (SpaceAvailable(space_needed)) return;
if (old_buffer_is_filtered_) return;
ASSERT(may_move_store_buffer_entries_);
@@ -171,9 +176,7 @@ void StoreBuffer::EnsureSpace(intptr_t space_needed) {
Filter(MemoryChunk::SCAN_ON_SCAVENGE);
}
- // If filtering out the entries from scan_on_scavenge pages got us down
to
- // less than half full, then we are satisfied with that.
- if (old_limit_ - old_top_ > old_top_ - old_start_) return;
+ if (SpaceAvailable(space_needed)) return;
// Sample 1 entry in 97 and filter out the pages where we estimate that
more
// than 1 in 8 pointers are to new space.
@@ -192,7 +195,7 @@ void StoreBuffer::EnsureSpace(intptr_t space_needed) {
ExemptPopularPages(samples[i].prime_sample_step, samples[i].threshold);
// As a last resort we mark all pages as being exempt from the store
buffer.
ASSERT(i != (kSampleFinenesses - 1) || old_top_ == old_start_);
- if (old_limit_ - old_top_ > old_top_ - old_start_) return;
+ if (SpaceAvailable(space_needed)) return;
}
UNREACHABLE();
}
@@ -294,7 +297,7 @@ bool StoreBuffer::PrepareForIteration() {
void StoreBuffer::Clean() {
ClearFilteringHashSets();
Uniq(); // Also removes things that no longer point to new space.
- CheckForFullBuffer();
+ EnsureSpace(kStoreBufferSize / 2);
}
@@ -687,12 +690,6 @@ void StoreBuffer::Compact() {
ASSERT(old_top_ <= old_limit_);
}
heap_->isolate()->counters()->store_buffer_compactions()->Increment();
- CheckForFullBuffer();
-}
-
-
-void StoreBuffer::CheckForFullBuffer() {
- EnsureSpace(kStoreBufferSize * 2);
}
} } // namespace v8::internal
Index: src/store-buffer.h
diff --git a/src/store-buffer.h b/src/store-buffer.h
index
514534a1ed72c5af95827ffd3926ad90f497e976..c1052fa1a108c9bfce430674d784e2734fae15d4
100644
--- a/src/store-buffer.h
+++ b/src/store-buffer.h
@@ -111,6 +111,7 @@ class StoreBuffer {
// been promoted. Rebuilds the store buffer completely if it overflowed.
void SortUniq();
+ bool SpaceAvailable(intptr_t space_needed);
void EnsureSpace(intptr_t space_needed);
void Verify();
@@ -160,7 +161,6 @@ class StoreBuffer {
void ClearFilteringHashSets();
- void CheckForFullBuffer();
void Uniq();
void ExemptPopularPages(int prime_sample_step, int threshold);
@@ -223,7 +223,6 @@ class StoreBufferRebuildScope {
~StoreBufferRebuildScope() {
store_buffer_->callback_ = stored_callback_;
store_buffer_->store_buffer_rebuilding_enabled_ = stored_state_;
- store_buffer_->CheckForFullBuffer();
}
private:
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.