OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/heap/spaces.h" | 5 #include "src/heap/spaces.h" |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/base/platform/platform.h" | 8 #include "src/base/platform/platform.h" |
9 #include "src/full-codegen/full-codegen.h" | 9 #include "src/full-codegen/full-codegen.h" |
10 #include "src/heap/slot-set.h" | 10 #include "src/heap/slot-set.h" |
(...skipping 1120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1131 Address cur = obj->address(); | 1131 Address cur = obj->address(); |
1132 Address next = cur + obj->Size(); | 1132 Address next = cur + obj->Size(); |
1133 if ((cur <= addr) && (addr < next)) return obj; | 1133 if ((cur <= addr) && (addr < next)) return obj; |
1134 } | 1134 } |
1135 | 1135 |
1136 UNREACHABLE(); | 1136 UNREACHABLE(); |
1137 return Smi::FromInt(0); | 1137 return Smi::FromInt(0); |
1138 } | 1138 } |
1139 | 1139 |
1140 | 1140 |
1141 bool PagedSpace::CanExpand(size_t size) { | |
1142 DCHECK(heap()->mark_compact_collector()->is_compacting() || | |
1143 Capacity() <= heap()->MaxOldGenerationSize()); | |
1144 | |
1145 // Are we going to exceed capacity for this space? At this point we can be | |
1146 // way over the maximum size because of AlwaysAllocate scopes and large | |
1147 // objects. | |
1148 if (!heap()->CanExpandOldGeneration(static_cast<int>(size))) return false; | |
1149 | |
1150 return true; | |
1151 } | |
1152 | |
1153 | |
1154 bool PagedSpace::Expand() { | 1141 bool PagedSpace::Expand() { |
1155 intptr_t size = AreaSize(); | 1142 int size = AreaSize(); |
1156 if (snapshotable() && !HasPages()) { | 1143 if (snapshotable() && !HasPages()) { |
1157 size = Snapshot::SizeOfFirstPage(heap()->isolate(), identity()); | 1144 size = Snapshot::SizeOfFirstPage(heap()->isolate(), identity()); |
1158 } | 1145 } |
1159 | 1146 |
1160 if (!CanExpand(size)) return false; | 1147 if (!heap()->CanExpandOldGeneration(size)) return false; |
1161 | 1148 |
1162 Page* p = heap()->isolate()->memory_allocator()->AllocatePage(size, this, | 1149 Page* p = heap()->isolate()->memory_allocator()->AllocatePage(size, this, |
1163 executable()); | 1150 executable()); |
1164 if (p == NULL) return false; | 1151 if (p == NULL) return false; |
1165 | 1152 |
1166 AccountCommitted(static_cast<intptr_t>(p->size())); | 1153 AccountCommitted(static_cast<intptr_t>(p->size())); |
1167 | 1154 |
1168 // Pages created during bootstrapping may contain immortal immovable objects. | 1155 // Pages created during bootstrapping may contain immortal immovable objects. |
1169 if (!heap()->deserialization_complete()) p->MarkNeverEvacuate(); | 1156 if (!heap()->deserialization_complete()) p->MarkNeverEvacuate(); |
1170 | 1157 |
(...skipping 1991 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3162 object->ShortPrint(); | 3149 object->ShortPrint(); |
3163 PrintF("\n"); | 3150 PrintF("\n"); |
3164 } | 3151 } |
3165 printf(" --------------------------------------\n"); | 3152 printf(" --------------------------------------\n"); |
3166 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 3153 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
3167 } | 3154 } |
3168 | 3155 |
3169 #endif // DEBUG | 3156 #endif // DEBUG |
3170 } // namespace internal | 3157 } // namespace internal |
3171 } // namespace v8 | 3158 } // namespace v8 |
OLD | NEW |