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" |
(...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1054 RawObject** begin = reinterpret_cast<RawObject**>(result); | 1054 RawObject** begin = reinterpret_cast<RawObject**>(result); |
1055 RawObject** end = reinterpret_cast<RawObject**>(result + size); | 1055 RawObject** end = reinterpret_cast<RawObject**>(result + size); |
1056 for (RawObject** current = begin; current < end; ++current) { | 1056 for (RawObject** current = begin; current < end; ++current) { |
1057 ASSERT(!(*current)->IsHeapObject()); | 1057 ASSERT(!(*current)->IsHeapObject()); |
1058 } | 1058 } |
1059 #endif | 1059 #endif |
1060 return result; | 1060 return result; |
1061 } | 1061 } |
1062 | 1062 |
1063 | 1063 |
1064 void PageSpace::SetupInstructionsSnapshotPage(void* pointer, uword size) { | 1064 void PageSpace::SetupInstructionsSnapshotPage(void* pointer, |
1065 uword size, | |
1066 bool is_executable) { | |
1065 // Setup a HeapPage so precompiled Instructions can be traversed. | 1067 // Setup a HeapPage so precompiled Instructions can be traversed. |
1066 // Instructions are contiguous at [pointer, pointer + size). HeapPage | 1068 // Instructions are contiguous at [pointer, pointer + size). HeapPage |
1067 // expects to find objects at [memory->start() + ObjectStartOffset, | 1069 // expects to find objects at [memory->start() + ObjectStartOffset, |
1068 // memory->end()). | 1070 // memory->end()). |
1069 uword offset = HeapPage::ObjectStartOffset(); | 1071 uword offset = HeapPage::ObjectStartOffset(); |
1070 pointer = reinterpret_cast<void*>(reinterpret_cast<uword>(pointer) - offset); | 1072 pointer = reinterpret_cast<void*>(reinterpret_cast<uword>(pointer) - offset); |
1071 size += offset; | 1073 size += offset; |
1072 | 1074 |
1073 ASSERT(Utils::IsAligned(pointer, OS::PreferredCodeAlignment())); | |
1074 | |
1075 VirtualMemory* memory = VirtualMemory::ForInstructionsSnapshot(pointer, size); | 1075 VirtualMemory* memory = VirtualMemory::ForInstructionsSnapshot(pointer, size); |
rmacnak
2016/01/15 00:57:01
rename to VirtualMemory::ForExternalPage
Florian Schneider
2016/01/15 15:56:01
Done.
| |
1076 ASSERT(memory != NULL); | 1076 ASSERT(memory != NULL); |
1077 HeapPage* page = reinterpret_cast<HeapPage*>(malloc(sizeof(HeapPage))); | 1077 HeapPage* page = reinterpret_cast<HeapPage*>(malloc(sizeof(HeapPage))); |
1078 page->memory_ = memory; | 1078 page->memory_ = memory; |
1079 page->next_ = NULL; | 1079 page->next_ = NULL; |
1080 page->object_end_ = memory->end(); | 1080 page->object_end_ = memory->end(); |
1081 page->executable_ = true; | |
1082 | 1081 |
1083 MutexLocker ml(pages_lock_); | 1082 MutexLocker ml(pages_lock_); |
1084 if (exec_pages_ == NULL) { | 1083 HeapPage** first, **tail; |
1085 exec_pages_ = page; | 1084 if (is_executable) { |
1085 ASSERT(Utils::IsAligned(pointer, OS::PreferredCodeAlignment())); | |
1086 page->executable_ = true; | |
1087 first = &exec_pages_; | |
1088 tail = &exec_pages_tail_; | |
1086 } else { | 1089 } else { |
1087 exec_pages_tail_->set_next(page); | 1090 first = &pages_; |
1091 tail = &pages_tail_; | |
1088 } | 1092 } |
1089 exec_pages_tail_ = page; | 1093 if (*first == NULL) { |
1094 *first = page; | |
1095 } else { | |
1096 (*tail)->set_next(page); | |
1097 } | |
1098 (*tail) = page; | |
1090 } | 1099 } |
1091 | 1100 |
1092 | 1101 |
1093 PageSpaceController::PageSpaceController(Heap* heap, | 1102 PageSpaceController::PageSpaceController(Heap* heap, |
1094 int heap_growth_ratio, | 1103 int heap_growth_ratio, |
1095 int heap_growth_max, | 1104 int heap_growth_max, |
1096 int garbage_collection_time_ratio) | 1105 int garbage_collection_time_ratio) |
1097 : heap_(heap), | 1106 : heap_(heap), |
1098 is_enabled_(false), | 1107 is_enabled_(false), |
1099 grow_heap_(heap_growth_max / 2), | 1108 grow_heap_(heap_growth_max / 2), |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1215 return 0; | 1224 return 0; |
1216 } else { | 1225 } else { |
1217 ASSERT(total_time >= gc_time); | 1226 ASSERT(total_time >= gc_time); |
1218 int result = static_cast<int>((static_cast<double>(gc_time) / | 1227 int result = static_cast<int>((static_cast<double>(gc_time) / |
1219 static_cast<double>(total_time)) * 100); | 1228 static_cast<double>(total_time)) * 100); |
1220 return result; | 1229 return result; |
1221 } | 1230 } |
1222 } | 1231 } |
1223 | 1232 |
1224 } // namespace dart | 1233 } // namespace dart |
OLD | NEW |