| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/pages.h" | 5 #include "vm/pages.h" |
| 6 | 6 |
| 7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
| 8 #include "vm/compiler_stats.h" | 8 #include "vm/compiler_stats.h" |
| 9 #include "vm/gc_marker.h" | 9 #include "vm/gc_marker.h" |
| 10 #include "vm/gc_sweeper.h" | 10 #include "vm/gc_sweeper.h" |
| 11 #include "vm/lockers.h" | 11 #include "vm/lockers.h" |
| 12 #include "vm/object.h" | 12 #include "vm/object.h" |
| 13 #include "vm/os_thread.h" | 13 #include "vm/os_thread.h" |
| 14 #include "vm/safepoint.h" | 14 #include "vm/safepoint.h" |
| 15 #include "vm/verified_memory.h" | |
| 16 #include "vm/virtual_memory.h" | 15 #include "vm/virtual_memory.h" |
| 17 | 16 |
| 18 namespace dart { | 17 namespace dart { |
| 19 | 18 |
| 20 DEFINE_FLAG(int, heap_growth_rate, 0, | 19 DEFINE_FLAG(int, heap_growth_rate, 0, |
| 21 "The max number of pages the heap can grow at a time"); | 20 "The max number of pages the heap can grow at a time"); |
| 22 DEFINE_FLAG(int, old_gen_growth_space_ratio, 20, | 21 DEFINE_FLAG(int, old_gen_growth_space_ratio, 20, |
| 23 "The desired maximum percentage of free space after old gen GC"); | 22 "The desired maximum percentage of free space after old gen GC"); |
| 24 DEFINE_FLAG(int, old_gen_growth_time_ratio, 3, | 23 DEFINE_FLAG(int, old_gen_growth_time_ratio, 3, |
| 25 "The desired maximum percentage of time spent in old gen GC"); | 24 "The desired maximum percentage of time spent in old gen GC"); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 50 ASSERT(result != NULL); | 49 ASSERT(result != NULL); |
| 51 result->memory_ = memory; | 50 result->memory_ = memory; |
| 52 result->next_ = NULL; | 51 result->next_ = NULL; |
| 53 result->type_ = type; | 52 result->type_ = type; |
| 54 return result; | 53 return result; |
| 55 } | 54 } |
| 56 | 55 |
| 57 | 56 |
| 58 HeapPage* HeapPage::Allocate(intptr_t size_in_words, PageType type) { | 57 HeapPage* HeapPage::Allocate(intptr_t size_in_words, PageType type) { |
| 59 VirtualMemory* memory = | 58 VirtualMemory* memory = |
| 60 VerifiedMemory::Reserve(size_in_words << kWordSizeLog2); | 59 VirtualMemory::Reserve(size_in_words << kWordSizeLog2); |
| 61 if (memory == NULL) { | 60 if (memory == NULL) { |
| 62 return NULL; | 61 return NULL; |
| 63 } | 62 } |
| 64 HeapPage* result = Initialize(memory, type); | 63 HeapPage* result = Initialize(memory, type); |
| 65 if (result == NULL) { | 64 if (result == NULL) { |
| 66 delete memory; // Release reservation to OS. | 65 delete memory; // Release reservation to OS. |
| 67 return NULL; | 66 return NULL; |
| 68 } | 67 } |
| 69 return result; | 68 return result; |
| 70 } | 69 } |
| (...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1048 AtomicOperations::IncrementBy(&(usage_.used_in_words), | 1047 AtomicOperations::IncrementBy(&(usage_.used_in_words), |
| 1049 (size >> kWordSizeLog2)); | 1048 (size >> kWordSizeLog2)); |
| 1050 return result; | 1049 return result; |
| 1051 } | 1050 } |
| 1052 result = TryAllocateDataBumpLocked(size, growth_policy); | 1051 result = TryAllocateDataBumpLocked(size, growth_policy); |
| 1053 if (result != 0) return result; | 1052 if (result != 0) return result; |
| 1054 return TryAllocateDataLocked(size, growth_policy); | 1053 return TryAllocateDataLocked(size, growth_policy); |
| 1055 } | 1054 } |
| 1056 | 1055 |
| 1057 | 1056 |
| 1058 uword PageSpace::TryAllocateSmiInitializedLocked(intptr_t size, | |
| 1059 GrowthPolicy growth_policy) { | |
| 1060 uword result = TryAllocateDataBumpLocked(size, growth_policy); | |
| 1061 if (collections() != 0) { | |
| 1062 FATAL1("%" Pd " GCs before TryAllocateSmiInitializedLocked", collections()); | |
| 1063 } | |
| 1064 #if defined(DEBUG) | |
| 1065 RawObject** begin = reinterpret_cast<RawObject**>(result); | |
| 1066 RawObject** end = reinterpret_cast<RawObject**>(result + size); | |
| 1067 for (RawObject** current = begin; current < end; ++current) { | |
| 1068 ASSERT(!(*current)->IsHeapObject()); | |
| 1069 } | |
| 1070 #endif | |
| 1071 return result; | |
| 1072 } | |
| 1073 | |
| 1074 | |
| 1075 void PageSpace::SetupExternalPage(void* pointer, | 1057 void PageSpace::SetupExternalPage(void* pointer, |
| 1076 uword size, | 1058 uword size, |
| 1077 bool is_executable) { | 1059 bool is_executable) { |
| 1078 // Setup a HeapPage so precompiled Instructions can be traversed. | 1060 // Setup a HeapPage so precompiled Instructions can be traversed. |
| 1079 // Instructions are contiguous at [pointer, pointer + size). HeapPage | 1061 // Instructions are contiguous at [pointer, pointer + size). HeapPage |
| 1080 // expects to find objects at [memory->start() + ObjectStartOffset, | 1062 // expects to find objects at [memory->start() + ObjectStartOffset, |
| 1081 // memory->end()). | 1063 // memory->end()). |
| 1082 uword offset = HeapPage::ObjectStartOffset(); | 1064 uword offset = HeapPage::ObjectStartOffset(); |
| 1083 pointer = reinterpret_cast<void*>(reinterpret_cast<uword>(pointer) - offset); | 1065 pointer = reinterpret_cast<void*>(reinterpret_cast<uword>(pointer) - offset); |
| 1084 size += offset; | 1066 size += offset; |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1236 return 0; | 1218 return 0; |
| 1237 } else { | 1219 } else { |
| 1238 ASSERT(total_time >= gc_time); | 1220 ASSERT(total_time >= gc_time); |
| 1239 int result = static_cast<int>((static_cast<double>(gc_time) / | 1221 int result = static_cast<int>((static_cast<double>(gc_time) / |
| 1240 static_cast<double>(total_time)) * 100); | 1222 static_cast<double>(total_time)) * 100); |
| 1241 return result; | 1223 return result; |
| 1242 } | 1224 } |
| 1243 } | 1225 } |
| 1244 | 1226 |
| 1245 } // namespace dart | 1227 } // namespace dart |
| OLD | NEW |