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

Unified Diff: src/heap/heap.cc

Issue 2314783002: [heap] Removes spaces.h include from heap.h (Closed)
Patch Set: Move data structures used in debug mode Created 4 years, 3 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/heap.h ('k') | src/heap/heap-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/heap.cc
diff --git a/src/heap/heap.cc b/src/heap/heap.cc
index abf87aaf31f97c01a440e196d1e74e27fb3f9644..ea3d6ff382f0eb38fe7b8920a17a0ad2760ac553 100644
--- a/src/heap/heap.cc
+++ b/src/heap/heap.cc
@@ -96,7 +96,7 @@ Heap::Heap()
contexts_disposed_(0),
number_of_disposed_maps_(0),
global_ic_age_(0),
- new_space_(this),
+ new_space_(nullptr),
old_space_(NULL),
code_space_(NULL),
map_space_(NULL),
@@ -189,7 +189,7 @@ Heap::Heap()
intptr_t Heap::Capacity() {
if (!HasBeenSetUp()) return 0;
- return new_space_.Capacity() + OldGenerationCapacity();
+ return new_space_->Capacity() + OldGenerationCapacity();
}
intptr_t Heap::OldGenerationCapacity() {
@@ -211,14 +211,14 @@ intptr_t Heap::CommittedOldGenerationMemory() {
intptr_t Heap::CommittedMemory() {
if (!HasBeenSetUp()) return 0;
- return new_space_.CommittedMemory() + CommittedOldGenerationMemory();
+ return new_space_->CommittedMemory() + CommittedOldGenerationMemory();
}
size_t Heap::CommittedPhysicalMemory() {
if (!HasBeenSetUp()) return 0;
- return new_space_.CommittedPhysicalMemory() +
+ return new_space_->CommittedPhysicalMemory() +
old_space_->CommittedPhysicalMemory() +
code_space_->CommittedPhysicalMemory() +
map_space_->CommittedPhysicalMemory() +
@@ -300,7 +300,7 @@ GarbageCollector Heap::SelectGarbageCollector(AllocationSpace space,
// and does not count available bytes already in the old space or code
// space. Undercounting is safe---we may get an unrequested full GC when
// a scavenge would have succeeded.
- if (memory_allocator()->MaxAvailable() <= new_space_.Size()) {
+ if (memory_allocator()->MaxAvailable() <= new_space_->Size()) {
isolate_->counters()
->gc_compactor_caused_by_oldspace_exhaustion()
->Increment();
@@ -321,18 +321,18 @@ void Heap::ReportStatisticsBeforeGC() {
// compiled --log-gc is set. The following logic is used to avoid
// double logging.
#ifdef DEBUG
- if (FLAG_heap_stats || FLAG_log_gc) new_space_.CollectStatistics();
+ if (FLAG_heap_stats || FLAG_log_gc) new_space_->CollectStatistics();
if (FLAG_heap_stats) {
ReportHeapStatistics("Before GC");
} else if (FLAG_log_gc) {
- new_space_.ReportStatistics();
+ new_space_->ReportStatistics();
}
- if (FLAG_heap_stats || FLAG_log_gc) new_space_.ClearHistograms();
+ if (FLAG_heap_stats || FLAG_log_gc) new_space_->ClearHistograms();
#else
if (FLAG_log_gc) {
- new_space_.CollectStatistics();
- new_space_.ReportStatistics();
- new_space_.ClearHistograms();
+ new_space_->CollectStatistics();
+ new_space_->ReportStatistics();
+ new_space_->ClearHistograms();
}
#endif // DEBUG
}
@@ -349,8 +349,8 @@ void Heap::PrintShortHeapStatistics() {
", available: %6" V8PRIdPTR
" KB"
", committed: %6" V8PRIdPTR " KB\n",
- new_space_.Size() / KB, new_space_.Available() / KB,
- new_space_.CommittedMemory() / KB);
+ new_space_->Size() / KB, new_space_->Available() / KB,
+ new_space_->CommittedMemory() / KB);
PrintIsolate(isolate_, "Old space, used: %6" V8PRIdPTR
" KB"
", available: %6" V8PRIdPTR
@@ -399,13 +399,13 @@ void Heap::ReportStatisticsAfterGC() {
// NewSpace statistics are logged exactly once when --log-gc is turned on.
#if defined(DEBUG)
if (FLAG_heap_stats) {
- new_space_.CollectStatistics();
+ new_space_->CollectStatistics();
ReportHeapStatistics("After GC");
} else if (FLAG_log_gc) {
- new_space_.ReportStatistics();
+ new_space_->ReportStatistics();
}
#else
- if (FLAG_log_gc) new_space_.ReportStatistics();
+ if (FLAG_log_gc) new_space_->ReportStatistics();
#endif // DEBUG
for (int i = 0; i < static_cast<int>(v8::Isolate::kUseCounterFeatureCount);
++i) {
@@ -423,7 +423,7 @@ void Heap::IncrementDeferredCount(v8::Isolate::UseCounterFeature feature) {
deferred_counters_[feature]++;
}
-bool Heap::UncommitFromSpace() { return new_space_.UncommitFromSpace(); }
+bool Heap::UncommitFromSpace() { return new_space_->UncommitFromSpace(); }
void Heap::GarbageCollectionPrologue() {
{
@@ -455,7 +455,7 @@ void Heap::GarbageCollectionPrologue() {
ReportStatisticsBeforeGC();
#endif // DEBUG
- if (new_space_.IsAtMaximumCapacity()) {
+ if (new_space_->IsAtMaximumCapacity()) {
maximum_size_scavenges_++;
} else {
maximum_size_scavenges_ = 0;
@@ -898,7 +898,7 @@ void Heap::CollectAllAvailableGarbage(const char* gc_reason) {
}
}
set_current_gc_flags(kNoGCFlags);
- new_space_.Shrink();
+ new_space_->Shrink();
UncommitFromSpace();
}
@@ -949,7 +949,7 @@ void Heap::EnsureFillerObjectAtTop() {
// evacuation of a non-full new space (or if we are on the last page) there
// may be uninitialized memory behind top. We fill the remainder of the page
// with a filler.
- Address to_top = new_space_.top();
+ Address to_top = new_space_->top();
Page* page = Page::FromAddress(to_top - kPointerSize);
if (page->Contains(to_top)) {
int remaining_in_page = static_cast<int>(page->area_end() - to_top);
@@ -1231,7 +1231,7 @@ bool Heap::ReserveSpace(Reservation* reservations, List<Address>* maps) {
void Heap::EnsureFromSpaceIsCommitted() {
- if (new_space_.CommitFromSpaceIfNeeded()) return;
+ if (new_space_->CommitFromSpaceIfNeeded()) return;
// Committing memory to from space failed.
// Memory is exhausted and we will die.
@@ -1506,18 +1506,18 @@ void Heap::MarkCompactPrologue() {
void Heap::CheckNewSpaceExpansionCriteria() {
if (FLAG_experimental_new_space_growth_heuristic) {
- if (new_space_.TotalCapacity() < new_space_.MaximumCapacity() &&
- survived_last_scavenge_ * 100 / new_space_.TotalCapacity() >= 10) {
+ if (new_space_->TotalCapacity() < new_space_->MaximumCapacity() &&
+ survived_last_scavenge_ * 100 / new_space_->TotalCapacity() >= 10) {
// Grow the size of new space if there is room to grow, and more than 10%
// have survived the last scavenge.
- new_space_.Grow();
+ new_space_->Grow();
survived_since_last_expansion_ = 0;
}
- } else if (new_space_.TotalCapacity() < new_space_.MaximumCapacity() &&
- survived_since_last_expansion_ > new_space_.TotalCapacity()) {
+ } else if (new_space_->TotalCapacity() < new_space_->MaximumCapacity() &&
+ survived_since_last_expansion_ > new_space_->TotalCapacity()) {
// Grow the size of new space if there is room to grow, and enough data
// has survived scavenge since the last expansion.
- new_space_.Grow();
+ new_space_->Grow();
survived_since_last_expansion_ = 0;
}
}
@@ -1640,8 +1640,8 @@ void Heap::Scavenge() {
// Flip the semispaces. After flipping, to space is empty, from space has
// live objects.
- new_space_.Flip();
- new_space_.ResetAllocationInfo();
+ new_space_->Flip();
+ new_space_->ResetAllocationInfo();
// We need to sweep newly copied objects which can be either in the
// to space or promoted to the old generation. For to-space
@@ -1660,7 +1660,7 @@ void Heap::Scavenge() {
// for the addresses of promoted objects: every object promoted
// frees up its size in bytes from the top of the new space, and
// objects are at least one pointer in size.
- Address new_space_front = new_space_.ToSpaceStart();
+ Address new_space_front = new_space_->ToSpaceStart();
promotion_queue_.Initialize();
PromotionMode promotion_mode = CurrentPromotionMode();
@@ -1757,16 +1757,17 @@ void Heap::Scavenge() {
ScavengeWeakObjectRetainer weak_object_retainer(this);
ProcessYoungWeakReferences(&weak_object_retainer);
- DCHECK(new_space_front == new_space_.top());
+ DCHECK(new_space_front == new_space_->top());
// Set age mark.
- new_space_.set_age_mark(new_space_.top());
+ new_space_->set_age_mark(new_space_->top());
ArrayBufferTracker::FreeDeadInNewSpace(this);
// Update how much has survived scavenge.
- IncrementYoungSurvivorsCounter(static_cast<int>(
- (PromotedSpaceSizeOfObjects() - survived_watermark) + new_space_.Size()));
+ IncrementYoungSurvivorsCounter(
+ static_cast<int>((PromotedSpaceSizeOfObjects() - survived_watermark) +
+ new_space_->Size()));
LOG(isolate_, ResourceEvent("scavenge", "end"));
@@ -1930,11 +1931,11 @@ Address Heap::DoScavenge(ObjectVisitor* scavenge_visitor,
Address new_space_front,
PromotionMode promotion_mode) {
do {
- SemiSpace::AssertValidRange(new_space_front, new_space_.top());
+ SemiSpace::AssertValidRange(new_space_front, new_space_->top());
// The addresses new_space_front and new_space_.top() define a
// queue of unprocessed copied objects. Process them until the
// queue is empty.
- while (new_space_front != new_space_.top()) {
+ while (new_space_front != new_space_->top()) {
if (!Page::IsAlignedToPageSize(new_space_front)) {
HeapObject* object = HeapObject::FromAddress(new_space_front);
if (promotion_mode == PROMOTE_MARKED) {
@@ -1973,7 +1974,7 @@ Address Heap::DoScavenge(ObjectVisitor* scavenge_visitor,
// Take another spin if there are now unswept objects in new space
// (there are currently no more unswept promoted objects).
- } while (new_space_front != new_space_.top());
+ } while (new_space_front != new_space_->top());
return new_space_front;
}
@@ -4191,7 +4192,7 @@ void Heap::ReduceNewSpaceSize() {
if (ShouldReduceMemory() ||
((allocation_throughput != 0) &&
(allocation_throughput < kLowAllocationThroughput))) {
- new_space_.Shrink();
+ new_space_->Shrink();
UncommitFromSpace();
}
}
@@ -4555,7 +4556,7 @@ void Heap::ReportHeapStatistics(const char* title) {
PrintF("Heap statistics : ");
memory_allocator()->ReportStatistics();
PrintF("To space : ");
- new_space_.ReportStatistics();
+ new_space_->ReportStatistics();
PrintF("Old space : ");
old_space_->ReportStatistics();
PrintF("Code space : ");
@@ -4574,7 +4575,7 @@ bool Heap::Contains(HeapObject* value) {
return false;
}
return HasBeenSetUp() &&
- (new_space_.ToSpaceContains(value) || old_space_->Contains(value) ||
+ (new_space_->ToSpaceContains(value) || old_space_->Contains(value) ||
code_space_->Contains(value) || map_space_->Contains(value) ||
lo_space_->Contains(value));
}
@@ -4584,7 +4585,7 @@ bool Heap::ContainsSlow(Address addr) {
return false;
}
return HasBeenSetUp() &&
- (new_space_.ToSpaceContainsSlow(addr) ||
+ (new_space_->ToSpaceContainsSlow(addr) ||
old_space_->ContainsSlow(addr) || code_space_->ContainsSlow(addr) ||
map_space_->ContainsSlow(addr) || lo_space_->ContainsSlow(addr));
}
@@ -4597,7 +4598,7 @@ bool Heap::InSpace(HeapObject* value, AllocationSpace space) {
switch (space) {
case NEW_SPACE:
- return new_space_.ToSpaceContains(value);
+ return new_space_->ToSpaceContains(value);
case OLD_SPACE:
return old_space_->Contains(value);
case CODE_SPACE:
@@ -4619,7 +4620,7 @@ bool Heap::InSpaceSlow(Address addr, AllocationSpace space) {
switch (space) {
case NEW_SPACE:
- return new_space_.ToSpaceContainsSlow(addr);
+ return new_space_->ToSpaceContainsSlow(addr);
case OLD_SPACE:
return old_space_->ContainsSlow(addr);
case CODE_SPACE:
@@ -4682,7 +4683,7 @@ void Heap::Verify() {
VerifySmisVisitor smis_visitor;
IterateSmiRoots(&smis_visitor);
- new_space_.Verify();
+ new_space_->Verify();
old_space_->Verify(&visitor);
map_space_->Verify(&visitor);
@@ -4701,9 +4702,9 @@ void Heap::Verify() {
void Heap::ZapFromSpace() {
- if (!new_space_.IsFromSpaceCommitted()) return;
- for (Page* page : NewSpacePageRange(new_space_.FromSpaceStart(),
- new_space_.FromSpaceEnd())) {
+ if (!new_space_->IsFromSpaceCommitted()) return;
+ for (Page* page : NewSpacePageRange(new_space_->FromSpaceStart(),
+ new_space_->FromSpaceEnd())) {
for (Address cursor = page->area_start(), limit = page->area_end();
cursor < limit; cursor += kPointerSize) {
Memory::Address_at(cursor) = kFromSpaceZapValue;
@@ -5088,8 +5089,8 @@ bool Heap::ConfigureHeapDefault() { return ConfigureHeap(0, 0, 0, 0); }
void Heap::RecordStats(HeapStats* stats, bool take_snapshot) {
*stats->start_marker = HeapStats::kStartMarker;
*stats->end_marker = HeapStats::kEndMarker;
- *stats->new_space_size = new_space_.SizeAsInt();
- *stats->new_space_capacity = new_space_.Capacity();
+ *stats->new_space_size = new_space_->SizeAsInt();
+ *stats->new_space_capacity = new_space_->Capacity();
*stats->old_space_size = old_space_->SizeOfObjects();
*stats->old_space_capacity = old_space_->Capacity();
*stats->code_space_size = code_space_->SizeOfObjects();
@@ -5211,7 +5212,7 @@ intptr_t Heap::CalculateOldGenerationAllocationLimit(double factor,
CHECK(old_gen_size > 0);
intptr_t limit = static_cast<intptr_t>(old_gen_size * factor);
limit = Max(limit, old_gen_size + MinimumAllocationLimitGrowingStep());
- limit += new_space_.Capacity();
+ limit += new_space_->Capacity();
intptr_t halfway_to_the_max = (old_gen_size + max_old_generation_size_) / 2;
return Min(limit, halfway_to_the_max);
}
@@ -5352,8 +5353,11 @@ bool Heap::SetUp() {
// Initialize incremental marking.
incremental_marking_ = new IncrementalMarking(this);
+ new_space_ = new NewSpace(this);
+ if (new_space_ == nullptr) return false;
+
// Set up new space.
- if (!new_space_.SetUp(initial_semispace_size_, max_semi_space_size_)) {
+ if (!new_space_->SetUp(initial_semispace_size_, max_semi_space_size_)) {
return false;
}
new_space_top_after_last_gc_ = new_space()->top();
@@ -5538,7 +5542,7 @@ void Heap::TearDown() {
PrintF("maximum_committed_by_heap=%" V8PRIdPTR " ",
MaximumCommittedMemory());
PrintF("maximum_committed_by_new_space=%" V8PRIdPTR " ",
- new_space_.MaximumCommittedMemory());
+ new_space_->MaximumCommittedMemory());
PrintF("maximum_committed_by_old_space=%" V8PRIdPTR " ",
old_space_->MaximumCommittedMemory());
PrintF("maximum_committed_by_code_space=%" V8PRIdPTR " ",
@@ -5599,7 +5603,9 @@ void Heap::TearDown() {
delete tracer_;
tracer_ = nullptr;
- new_space_.TearDown();
+ new_space_->TearDown();
+ delete new_space_;
+ new_space_ = nullptr;
if (old_space_ != NULL) {
delete old_space_;
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/heap-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698