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

Unified Diff: src/heap.cc

Issue 12217106: Don't use TLS for space iterators. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed feedback. Created 7 years, 10 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
« no previous file with comments | « src/heap.h ('k') | src/heap-profiler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index 6637b9af65bd54fefada680625cccff304cf7905..8cef1aea5394f07db103f61e639695339bcb8343 100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -449,7 +449,7 @@ void Heap::GarbageCollectionPrologue() {
intptr_t Heap::SizeOfObjects() {
intptr_t total = 0;
- AllSpaces spaces;
+ AllSpaces spaces(this);
for (Space* space = spaces.next(); space != NULL; space = spaces.next()) {
total += space->SizeOfObjects();
}
@@ -458,7 +458,7 @@ intptr_t Heap::SizeOfObjects() {
void Heap::RepairFreeListsAfterBoot() {
- PagedSpaces spaces;
+ PagedSpaces spaces(this);
for (PagedSpace* space = spaces.next();
space != NULL;
space = spaces.next()) {
@@ -5537,9 +5537,10 @@ bool Heap::IdleGlobalGC() {
void Heap::Print() {
if (!HasBeenSetUp()) return;
isolate()->PrintStack();
- AllSpaces spaces;
- for (Space* space = spaces.next(); space != NULL; space = spaces.next())
+ AllSpaces spaces(this);
+ for (Space* space = spaces.next(); space != NULL; space = spaces.next()) {
space->Print();
+ }
}
@@ -6167,7 +6168,7 @@ void Heap::RecordStats(HeapStats* stats, bool take_snapshot) {
*stats->os_error = OS::GetLastError();
isolate()->memory_allocator()->Available();
if (take_snapshot) {
- HeapIterator iterator;
+ HeapIterator iterator(this);
for (HeapObject* obj = iterator.next();
obj != NULL;
obj = iterator.next()) {
@@ -6412,7 +6413,7 @@ void Heap::TearDown() {
void Heap::Shrink() {
// Try to shrink all paged spaces.
- PagedSpaces spaces;
+ PagedSpaces spaces(this);
for (PagedSpace* space = spaces.next();
space != NULL;
space = spaces.next()) {
@@ -6485,19 +6486,19 @@ void Heap::PrintHandles() {
Space* AllSpaces::next() {
switch (counter_++) {
case NEW_SPACE:
- return HEAP->new_space();
+ return heap_->new_space();
case OLD_POINTER_SPACE:
- return HEAP->old_pointer_space();
+ return heap_->old_pointer_space();
case OLD_DATA_SPACE:
- return HEAP->old_data_space();
+ return heap_->old_data_space();
case CODE_SPACE:
- return HEAP->code_space();
+ return heap_->code_space();
case MAP_SPACE:
- return HEAP->map_space();
+ return heap_->map_space();
case CELL_SPACE:
- return HEAP->cell_space();
+ return heap_->cell_space();
case LO_SPACE:
- return HEAP->lo_space();
+ return heap_->lo_space();
default:
return NULL;
}
@@ -6507,15 +6508,15 @@ Space* AllSpaces::next() {
PagedSpace* PagedSpaces::next() {
switch (counter_++) {
case OLD_POINTER_SPACE:
- return HEAP->old_pointer_space();
+ return heap_->old_pointer_space();
case OLD_DATA_SPACE:
- return HEAP->old_data_space();
+ return heap_->old_data_space();
case CODE_SPACE:
- return HEAP->code_space();
+ return heap_->code_space();
case MAP_SPACE:
- return HEAP->map_space();
+ return heap_->map_space();
case CELL_SPACE:
- return HEAP->cell_space();
+ return heap_->cell_space();
default:
return NULL;
}
@@ -6526,26 +6527,28 @@ PagedSpace* PagedSpaces::next() {
OldSpace* OldSpaces::next() {
switch (counter_++) {
case OLD_POINTER_SPACE:
- return HEAP->old_pointer_space();
+ return heap_->old_pointer_space();
case OLD_DATA_SPACE:
- return HEAP->old_data_space();
+ return heap_->old_data_space();
case CODE_SPACE:
- return HEAP->code_space();
+ return heap_->code_space();
default:
return NULL;
}
}
-SpaceIterator::SpaceIterator()
- : current_space_(FIRST_SPACE),
+SpaceIterator::SpaceIterator(Heap* heap)
+ : heap_(heap),
+ current_space_(FIRST_SPACE),
iterator_(NULL),
size_func_(NULL) {
}
-SpaceIterator::SpaceIterator(HeapObjectCallback size_func)
- : current_space_(FIRST_SPACE),
+SpaceIterator::SpaceIterator(Heap* heap, HeapObjectCallback size_func)
+ : heap_(heap),
+ current_space_(FIRST_SPACE),
iterator_(NULL),
size_func_(size_func) {
}
@@ -6585,25 +6588,26 @@ ObjectIterator* SpaceIterator::CreateIterator() {
switch (current_space_) {
case NEW_SPACE:
- iterator_ = new SemiSpaceIterator(HEAP->new_space(), size_func_);
+ iterator_ = new SemiSpaceIterator(heap_->new_space(), size_func_);
break;
case OLD_POINTER_SPACE:
- iterator_ = new HeapObjectIterator(HEAP->old_pointer_space(), size_func_);
+ iterator_ =
+ new HeapObjectIterator(heap_->old_pointer_space(), size_func_);
break;
case OLD_DATA_SPACE:
- iterator_ = new HeapObjectIterator(HEAP->old_data_space(), size_func_);
+ iterator_ = new HeapObjectIterator(heap_->old_data_space(), size_func_);
break;
case CODE_SPACE:
- iterator_ = new HeapObjectIterator(HEAP->code_space(), size_func_);
+ iterator_ = new HeapObjectIterator(heap_->code_space(), size_func_);
break;
case MAP_SPACE:
- iterator_ = new HeapObjectIterator(HEAP->map_space(), size_func_);
+ iterator_ = new HeapObjectIterator(heap_->map_space(), size_func_);
break;
case CELL_SPACE:
- iterator_ = new HeapObjectIterator(HEAP->cell_space(), size_func_);
+ iterator_ = new HeapObjectIterator(heap_->cell_space(), size_func_);
break;
case LO_SPACE:
- iterator_ = new LargeObjectIterator(HEAP->lo_space(), size_func_);
+ iterator_ = new LargeObjectIterator(heap_->lo_space(), size_func_);
break;
}
@@ -6674,15 +6678,18 @@ class UnreachableObjectsFilter : public HeapObjectsFilter {
};
-HeapIterator::HeapIterator()
- : filtering_(HeapIterator::kNoFiltering),
+HeapIterator::HeapIterator(Heap* heap)
+ : heap_(heap),
+ filtering_(HeapIterator::kNoFiltering),
filter_(NULL) {
Init();
}
-HeapIterator::HeapIterator(HeapIterator::HeapObjectsFiltering filtering)
- : filtering_(filtering),
+HeapIterator::HeapIterator(Heap* heap,
+ HeapIterator::HeapObjectsFiltering filtering)
+ : heap_(heap),
+ filtering_(filtering),
filter_(NULL) {
Init();
}
@@ -6695,7 +6702,7 @@ HeapIterator::~HeapIterator() {
void HeapIterator::Init() {
// Start the iteration.
- space_iterator_ = new SpaceIterator;
+ space_iterator_ = new SpaceIterator(heap_);
switch (filtering_) {
case kFilterUnreachable:
filter_ = new UnreachableObjectsFilter;
@@ -6960,9 +6967,9 @@ void Heap::TracePathToGlobal() {
#endif
-static intptr_t CountTotalHolesSize() {
+static intptr_t CountTotalHolesSize(Heap* heap) {
intptr_t holes_size = 0;
- OldSpaces spaces;
+ OldSpaces spaces(heap);
for (OldSpace* space = spaces.next();
space != NULL;
space = spaces.next()) {
@@ -6998,7 +7005,7 @@ GCTracer::GCTracer(Heap* heap,
scopes_[i] = 0;
}
- in_free_list_or_wasted_before_gc_ = CountTotalHolesSize();
+ in_free_list_or_wasted_before_gc_ = CountTotalHolesSize(heap);
allocated_since_last_gc_ =
heap_->SizeOfObjects() - heap_->alive_after_last_gc_;
@@ -7125,7 +7132,7 @@ GCTracer::~GCTracer() {
PrintF("total_size_after=%" V8_PTR_PREFIX "d ", heap_->SizeOfObjects());
PrintF("holes_size_before=%" V8_PTR_PREFIX "d ",
in_free_list_or_wasted_before_gc_);
- PrintF("holes_size_after=%" V8_PTR_PREFIX "d ", CountTotalHolesSize());
+ PrintF("holes_size_after=%" V8_PTR_PREFIX "d ", CountTotalHolesSize(heap_));
PrintF("allocated=%" V8_PTR_PREFIX "d ", allocated_since_last_gc_);
PrintF("promoted=%" V8_PTR_PREFIX "d ", promoted_objects_size_);
« no previous file with comments | « src/heap.h ('k') | src/heap-profiler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698