Index: runtime/vm/pages.cc |
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc |
index 344ec189fda260cf983116c78fe00604c7a3f5ad..afda7bb609034de169be4c345c4cee8e6d894b72 100644 |
--- a/runtime/vm/pages.cc |
+++ b/runtime/vm/pages.cc |
@@ -78,7 +78,6 @@ HeapPage* HeapPage::Initialize(VirtualMemory* memory, |
return result; |
} |
- |
HeapPage* HeapPage::Allocate(intptr_t size_in_words, |
PageType type, |
const char* name) { |
@@ -95,7 +94,6 @@ HeapPage* HeapPage::Allocate(intptr_t size_in_words, |
return result; |
} |
- |
void HeapPage::Deallocate() { |
bool image_page = is_image_page(); |
@@ -114,7 +112,6 @@ void HeapPage::Deallocate() { |
} |
} |
- |
void HeapPage::VisitObjects(ObjectVisitor* visitor) const { |
NoSafepointScope no_safepoint; |
uword obj_addr = object_start(); |
@@ -127,7 +124,6 @@ void HeapPage::VisitObjects(ObjectVisitor* visitor) const { |
ASSERT(obj_addr == end_addr); |
} |
- |
void HeapPage::VisitObjectPointers(ObjectPointerVisitor* visitor) const { |
NoSafepointScope no_safepoint; |
uword obj_addr = object_start(); |
@@ -139,7 +135,6 @@ void HeapPage::VisitObjectPointers(ObjectPointerVisitor* visitor) const { |
ASSERT(obj_addr == end_addr); |
} |
- |
RawObject* HeapPage::FindObject(FindObjectVisitor* visitor) const { |
uword obj_addr = object_start(); |
uword end_addr = object_end(); |
@@ -158,7 +153,6 @@ RawObject* HeapPage::FindObject(FindObjectVisitor* visitor) const { |
return Object::null(); |
} |
- |
void HeapPage::WriteProtect(bool read_only) { |
ASSERT(!is_image_page()); |
@@ -176,7 +170,6 @@ void HeapPage::WriteProtect(bool read_only) { |
ASSERT(status); |
} |
- |
PageSpace::PageSpace(Heap* heap, |
intptr_t max_capacity_in_words, |
intptr_t max_external_in_words) |
@@ -208,7 +201,6 @@ PageSpace::PageSpace(Heap* heap, |
UpdateMaxUsed(); |
} |
- |
PageSpace::~PageSpace() { |
{ |
MonitorLocker ml(tasks_lock()); |
@@ -223,14 +215,12 @@ PageSpace::~PageSpace() { |
delete tasks_lock_; |
} |
- |
intptr_t PageSpace::LargePageSizeInWordsFor(intptr_t size) { |
intptr_t page_size = Utils::RoundUp(size + HeapPage::ObjectStartOffset(), |
VirtualMemory::PageSize()); |
return page_size >> kWordSizeLog2; |
} |
- |
HeapPage* PageSpace::AllocatePage(HeapPage::PageType type) { |
const bool is_exec = (type == HeapPage::kExecutable); |
const intptr_t kVmNameSize = 128; |
@@ -273,7 +263,6 @@ HeapPage* PageSpace::AllocatePage(HeapPage::PageType type) { |
return page; |
} |
- |
HeapPage* PageSpace::AllocateLargePage(intptr_t size, HeapPage::PageType type) { |
const bool is_exec = (type == HeapPage::kExecutable); |
const intptr_t page_size_in_words = LargePageSizeInWordsFor(size); |
@@ -294,7 +283,6 @@ HeapPage* PageSpace::AllocateLargePage(intptr_t size, HeapPage::PageType type) { |
return page; |
} |
- |
void PageSpace::TruncateLargePage(HeapPage* page, |
intptr_t new_object_size_in_bytes) { |
const intptr_t old_object_size_in_bytes = |
@@ -311,7 +299,6 @@ void PageSpace::TruncateLargePage(HeapPage* page, |
} |
} |
- |
void PageSpace::FreePage(HeapPage* page, HeapPage* previous_page) { |
bool is_exec = (page->type() == HeapPage::kExecutable); |
{ |
@@ -343,7 +330,6 @@ void PageSpace::FreePage(HeapPage* page, HeapPage* previous_page) { |
page->Deallocate(); |
} |
- |
void PageSpace::FreeLargePage(HeapPage* page, HeapPage* previous_page) { |
IncreaseCapacityInWords(-(page->memory_->size() >> kWordSizeLog2)); |
// Remove the page from the list. |
@@ -355,7 +341,6 @@ void PageSpace::FreeLargePage(HeapPage* page, HeapPage* previous_page) { |
page->Deallocate(); |
} |
- |
void PageSpace::FreePages(HeapPage* pages) { |
HeapPage* page = pages; |
while (page != NULL) { |
@@ -365,7 +350,6 @@ void PageSpace::FreePages(HeapPage* pages) { |
} |
} |
- |
uword PageSpace::TryAllocateInFreshPage(intptr_t size, |
HeapPage::PageType type, |
GrowthPolicy growth_policy, |
@@ -402,7 +386,6 @@ uword PageSpace::TryAllocateInFreshPage(intptr_t size, |
return result; |
} |
- |
uword PageSpace::TryAllocateInternal(intptr_t size, |
HeapPage::PageType type, |
GrowthPolicy growth_policy, |
@@ -450,30 +433,25 @@ uword PageSpace::TryAllocateInternal(intptr_t size, |
return result; |
} |
- |
void PageSpace::AcquireDataLock() { |
freelist_[HeapPage::kData].mutex()->Lock(); |
} |
- |
void PageSpace::ReleaseDataLock() { |
freelist_[HeapPage::kData].mutex()->Unlock(); |
} |
- |
void PageSpace::AllocateExternal(intptr_t size) { |
intptr_t size_in_words = size >> kWordSizeLog2; |
AtomicOperations::IncrementBy(&(usage_.external_in_words), size_in_words); |
// TODO(koda): Control growth. |
} |
- |
void PageSpace::FreeExternal(intptr_t size) { |
intptr_t size_in_words = size >> kWordSizeLog2; |
AtomicOperations::DecrementBy(&(usage_.external_in_words), size_in_words); |
} |
- |
// Provides exclusive access to all pages, and ensures they are walkable. |
class ExclusivePageIterator : ValueObject { |
public: |
@@ -502,7 +480,6 @@ class ExclusivePageIterator : ValueObject { |
HeapPage* page_; |
}; |
- |
// Provides exclusive access to code pages, and ensures they are walkable. |
// NOTE: This does not iterate over large pages which can contain code. |
class ExclusiveCodePageIterator : ValueObject { |
@@ -526,7 +503,6 @@ class ExclusiveCodePageIterator : ValueObject { |
HeapPage* page_; |
}; |
- |
// Provides exclusive access to large pages, and ensures they are walkable. |
class ExclusiveLargePageIterator : ValueObject { |
public: |
@@ -549,7 +525,6 @@ class ExclusiveLargePageIterator : ValueObject { |
HeapPage* page_; |
}; |
- |
void PageSpace::MakeIterable() const { |
// Assert not called from concurrent sweeper task. |
// TODO(koda): Use thread/task identity when implemented. |
@@ -559,7 +534,6 @@ void PageSpace::MakeIterable() const { |
} |
} |
- |
void PageSpace::AbandonBumpAllocation() { |
if (bump_top_ < bump_end_) { |
freelist_[HeapPage::kData].Free(bump_top_, bump_end_ - bump_top_); |
@@ -568,7 +542,6 @@ void PageSpace::AbandonBumpAllocation() { |
} |
} |
- |
void PageSpace::UpdateMaxCapacityLocked() { |
if (heap_ == NULL) { |
// Some unit tests. |
@@ -581,7 +554,6 @@ void PageSpace::UpdateMaxCapacityLocked() { |
static_cast<int64_t>(usage_.capacity_in_words) * kWordSize); |
} |
- |
void PageSpace::UpdateMaxUsed() { |
if (heap_ == NULL) { |
// Some unit tests. |
@@ -593,7 +565,6 @@ void PageSpace::UpdateMaxUsed() { |
isolate->GetHeapOldUsedMaxMetric()->SetValue(UsedInWords() * kWordSize); |
} |
- |
bool PageSpace::Contains(uword addr) const { |
for (ExclusivePageIterator it(this); !it.Done(); it.Advance()) { |
if (it.page()->Contains(addr)) { |
@@ -603,7 +574,6 @@ bool PageSpace::Contains(uword addr) const { |
return false; |
} |
- |
bool PageSpace::Contains(uword addr, HeapPage::PageType type) const { |
if (type == HeapPage::kExecutable) { |
// Fast path executable pages. |
@@ -628,7 +598,6 @@ bool PageSpace::Contains(uword addr, HeapPage::PageType type) const { |
return false; |
} |
- |
bool PageSpace::DataContains(uword addr) const { |
for (ExclusivePageIterator it(this); !it.Done(); it.Advance()) { |
if ((it.page()->type() != HeapPage::kExecutable) && |
@@ -639,7 +608,6 @@ bool PageSpace::DataContains(uword addr) const { |
return false; |
} |
- |
void PageSpace::AddRegionsToObjectSet(ObjectSet* set) const { |
ASSERT((pages_ != NULL) || (exec_pages_ != NULL) || (large_pages_ != NULL)); |
for (ExclusivePageIterator it(this); !it.Done(); it.Advance()) { |
@@ -647,14 +615,12 @@ void PageSpace::AddRegionsToObjectSet(ObjectSet* set) const { |
} |
} |
- |
void PageSpace::VisitObjects(ObjectVisitor* visitor) const { |
for (ExclusivePageIterator it(this); !it.Done(); it.Advance()) { |
it.page()->VisitObjects(visitor); |
} |
} |
- |
void PageSpace::VisitObjectsNoImagePages(ObjectVisitor* visitor) const { |
for (ExclusivePageIterator it(this); !it.Done(); it.Advance()) { |
if (!it.page()->is_image_page()) { |
@@ -663,7 +629,6 @@ void PageSpace::VisitObjectsNoImagePages(ObjectVisitor* visitor) const { |
} |
} |
- |
void PageSpace::VisitObjectsImagePages(ObjectVisitor* visitor) const { |
for (ExclusivePageIterator it(this); !it.Done(); it.Advance()) { |
if (it.page()->is_image_page()) { |
@@ -672,14 +637,12 @@ void PageSpace::VisitObjectsImagePages(ObjectVisitor* visitor) const { |
} |
} |
- |
void PageSpace::VisitObjectPointers(ObjectPointerVisitor* visitor) const { |
for (ExclusivePageIterator it(this); !it.Done(); it.Advance()) { |
it.page()->VisitObjectPointers(visitor); |
} |
} |
- |
RawObject* PageSpace::FindObject(FindObjectVisitor* visitor, |
HeapPage::PageType type) const { |
if (type == HeapPage::kExecutable) { |
@@ -713,7 +676,6 @@ RawObject* PageSpace::FindObject(FindObjectVisitor* visitor, |
return Object::null(); |
} |
- |
void PageSpace::WriteProtect(bool read_only) { |
if (read_only) { |
// Avoid MakeIterable trying to write to the heap. |
@@ -726,7 +688,6 @@ void PageSpace::WriteProtect(bool read_only) { |
} |
} |
- |
#ifndef PRODUCT |
void PageSpace::PrintToJSONObject(JSONObject* object) const { |
if (!FLAG_support_service) { |
@@ -756,7 +717,6 @@ void PageSpace::PrintToJSONObject(JSONObject* object) const { |
} |
} |
- |
class HeapMapAsJSONVisitor : public ObjectVisitor { |
public: |
explicit HeapMapAsJSONVisitor(JSONArray* array) : array_(array) {} |
@@ -769,7 +729,6 @@ class HeapMapAsJSONVisitor : public ObjectVisitor { |
JSONArray* array_; |
}; |
- |
void PageSpace::PrintHeapMapToJSONStream(Isolate* isolate, |
JSONStream* stream) const { |
if (!FLAG_support_service) { |
@@ -813,7 +772,6 @@ void PageSpace::PrintHeapMapToJSONStream(Isolate* isolate, |
} |
#endif // PRODUCT |
- |
bool PageSpace::ShouldCollectCode() { |
// Try to collect code if enough time has passed since the last attempt. |
const int64_t start = OS::GetCurrentMonotonicMicros(); |
@@ -831,7 +789,6 @@ bool PageSpace::ShouldCollectCode() { |
return false; |
} |
- |
void PageSpace::WriteProtectCode(bool read_only) { |
if (FLAG_write_protect_code) { |
MutexLocker ml(pages_lock_); |
@@ -855,7 +812,6 @@ void PageSpace::WriteProtectCode(bool read_only) { |
} |
} |
- |
void PageSpace::MarkSweep(bool invoke_api_callbacks) { |
Thread* thread = Thread::Current(); |
Isolate* isolate = heap_->isolate(); |
@@ -1036,7 +992,6 @@ void PageSpace::MarkSweep(bool invoke_api_callbacks) { |
} |
} |
- |
uword PageSpace::TryAllocateDataBumpInternal(intptr_t size, |
GrowthPolicy growth_policy, |
bool is_locked) { |
@@ -1088,19 +1043,16 @@ uword PageSpace::TryAllocateDataBumpInternal(intptr_t size, |
return result; |
} |
- |
uword PageSpace::TryAllocateDataBump(intptr_t size, |
GrowthPolicy growth_policy) { |
return TryAllocateDataBumpInternal(size, growth_policy, false); |
} |
- |
uword PageSpace::TryAllocateDataBumpLocked(intptr_t size, |
GrowthPolicy growth_policy) { |
return TryAllocateDataBumpInternal(size, growth_policy, true); |
} |
- |
uword PageSpace::TryAllocatePromoLocked(intptr_t size, |
GrowthPolicy growth_policy) { |
FreeList* freelist = &freelist_[HeapPage::kData]; |
@@ -1115,7 +1067,6 @@ uword PageSpace::TryAllocatePromoLocked(intptr_t size, |
return TryAllocateDataLocked(size, growth_policy); |
} |
- |
void PageSpace::SetupImagePage(void* pointer, uword size, bool is_executable) { |
// Setup a HeapPage so precompiled Instructions can be traversed. |
// Instructions are contiguous at [pointer, pointer + size). HeapPage |
@@ -1158,7 +1109,6 @@ void PageSpace::SetupImagePage(void* pointer, uword size, bool is_executable) { |
(*tail) = page; |
} |
- |
PageSpaceController::PageSpaceController(Heap* heap, |
int heap_growth_ratio, |
int heap_growth_max, |
@@ -1172,10 +1122,8 @@ PageSpaceController::PageSpaceController(Heap* heap, |
garbage_collection_time_ratio_(garbage_collection_time_ratio), |
last_code_collection_in_us_(OS::GetCurrentMonotonicMicros()) {} |
- |
PageSpaceController::~PageSpaceController() {} |
- |
bool PageSpaceController::NeedsGarbageCollection(SpaceUsage after) const { |
if (!is_enabled_) { |
return false; |
@@ -1212,7 +1160,6 @@ bool PageSpaceController::NeedsGarbageCollection(SpaceUsage after) const { |
return needs_gc; |
} |
- |
void PageSpaceController::EvaluateGarbageCollection(SpaceUsage before, |
SpaceUsage after, |
int64_t start, |
@@ -1296,7 +1243,6 @@ void PageSpaceController::EvaluateGarbageCollection(SpaceUsage before, |
last_usage_ = after; |
} |
- |
void PageSpaceGarbageCollectionHistory::AddGarbageCollectionTime(int64_t start, |
int64_t end) { |
Entry entry; |
@@ -1305,7 +1251,6 @@ void PageSpaceGarbageCollectionHistory::AddGarbageCollectionTime(int64_t start, |
history_.Add(entry); |
} |
- |
int PageSpaceGarbageCollectionHistory::GarbageCollectionTimeFraction() { |
int64_t gc_time = 0; |
int64_t total_time = 0; |