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

Side by Side Diff: src/heap/spaces-inl.h

Issue 1853783002: [heap] Non-contiguous young generation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Another round of cleanup/reorganization/adding comments. Created 4 years, 8 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 unified diff | Download patch
OLDNEW
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 #ifndef V8_HEAP_SPACES_INL_H_ 5 #ifndef V8_HEAP_SPACES_INL_H_
6 #define V8_HEAP_SPACES_INL_H_ 6 #define V8_HEAP_SPACES_INL_H_
7 7
8 #include "src/heap/incremental-marking.h" 8 #include "src/heap/incremental-marking.h"
9 #include "src/heap/spaces.h" 9 #include "src/heap/spaces.h"
10 #include "src/isolate.h" 10 #include "src/isolate.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 LargePage* result = next_page_; 162 LargePage* result = next_page_;
163 if (next_page_ != nullptr) { 163 if (next_page_ != nullptr) {
164 next_page_ = next_page_->next_page(); 164 next_page_ = next_page_->next_page();
165 } 165 }
166 return result; 166 return result;
167 } 167 }
168 168
169 // ----------------------------------------------------------------------------- 169 // -----------------------------------------------------------------------------
170 // MemoryAllocator 170 // MemoryAllocator
171 171
172 template <typename PageType, MemoryAllocator::AllocationMode mode,
173 typename SpaceType>
174 inline PageType* MemoryAllocator::AllocatePage(intptr_t size, SpaceType* owner,
175 Executability executable) {
176 MemoryChunk* chunk = nullptr;
177 if (mode == kPooled) {
178 chunk = AllocatePagePooled(owner, executable);
179 }
180 if (chunk == nullptr) {
181 chunk = AllocateChunk(size, size, executable, owner);
182 }
183 if (chunk == nullptr) return nullptr;
184 return PageType::Initialize(isolate_->heap(), chunk, executable, owner);
185 }
186
172 #ifdef ENABLE_HEAP_PROTECTION 187 #ifdef ENABLE_HEAP_PROTECTION
173 188
174 void MemoryAllocator::Protect(Address start, size_t size) { 189 void MemoryAllocator::Protect(Address start, size_t size) {
175 base::OS::Protect(start, size); 190 base::OS::Protect(start, size);
176 } 191 }
177 192
178 193
179 void MemoryAllocator::Unprotect(Address start, size_t size, 194 void MemoryAllocator::Unprotect(Address start, size_t size,
180 Executability executable) { 195 Executability executable) {
181 base::OS::Unprotect(start, size, executable); 196 base::OS::Unprotect(start, size, executable);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 bool NewSpace::FromSpaceContains(Object* o) { return from_space_.Contains(o); } 259 bool NewSpace::FromSpaceContains(Object* o) { return from_space_.Contains(o); }
245 260
246 // -------------------------------------------------------------------------- 261 // --------------------------------------------------------------------------
247 // AllocationResult 262 // AllocationResult
248 263
249 AllocationSpace AllocationResult::RetrySpace() { 264 AllocationSpace AllocationResult::RetrySpace() {
250 DCHECK(IsRetry()); 265 DCHECK(IsRetry());
251 return static_cast<AllocationSpace>(Smi::cast(object_)->value()); 266 return static_cast<AllocationSpace>(Smi::cast(object_)->value());
252 } 267 }
253 268
269 NewSpacePage* NewSpacePage::Initialize(Heap* heap, MemoryChunk* chunk,
270 Executability executable,
271 SemiSpace* owner) {
272 DCHECK_EQ(executable, Executability::NOT_EXECUTABLE);
273 bool in_to_space = (owner->id() != kFromSpace);
274 chunk->SetFlag(in_to_space ? MemoryChunk::IN_TO_SPACE
275 : MemoryChunk::IN_FROM_SPACE);
276 DCHECK(!chunk->IsFlagSet(in_to_space ? MemoryChunk::IN_FROM_SPACE
277 : MemoryChunk::IN_TO_SPACE));
278 NewSpacePage* page = static_cast<NewSpacePage*>(chunk);
279 heap->incremental_marking()->SetNewSpacePageFlags(page);
280 return page;
281 }
254 282
255 // -------------------------------------------------------------------------- 283 // --------------------------------------------------------------------------
256 // PagedSpace 284 // PagedSpace
257 285
258 Page* Page::Initialize(Heap* heap, MemoryChunk* chunk, Executability executable, 286 Page* Page::Initialize(Heap* heap, MemoryChunk* chunk, Executability executable,
259 PagedSpace* owner) { 287 PagedSpace* owner) {
260 Page* page = reinterpret_cast<Page*>(chunk); 288 Page* page = reinterpret_cast<Page*>(chunk);
261 page->mutex_ = new base::Mutex(); 289 page->mutex_ = new base::Mutex();
262 DCHECK(page->area_size() <= kAllocatableMemory); 290 DCHECK(page->area_size() <= kAllocatableMemory);
263 DCHECK(chunk->owner() == owner); 291 DCHECK(chunk->owner() == owner);
292
264 owner->IncreaseCapacity(page->area_size()); 293 owner->IncreaseCapacity(page->area_size());
265 heap->incremental_marking()->SetOldSpacePageFlags(chunk); 294 heap->incremental_marking()->SetOldSpacePageFlags(chunk);
266 295
267 // Make sure that categories are initialized before freeing the area. 296 // Make sure that categories are initialized before freeing the area.
268 page->InitializeFreeListCategories(); 297 page->InitializeFreeListCategories();
269 owner->Free(page->area_start(), page->area_size()); 298 owner->Free(page->area_start(), page->area_size());
270 299
271 return page; 300 return page;
272 } 301 }
273 302
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 other->allocation_info_.Reset(nullptr, nullptr); 719 other->allocation_info_.Reset(nullptr, nullptr);
691 return true; 720 return true;
692 } 721 }
693 return false; 722 return false;
694 } 723 }
695 724
696 } // namespace internal 725 } // namespace internal
697 } // namespace v8 726 } // namespace v8
698 727
699 #endif // V8_HEAP_SPACES_INL_H_ 728 #endif // V8_HEAP_SPACES_INL_H_
OLDNEW
« src/heap/spaces.cc ('K') | « src/heap/spaces.cc ('k') | test/cctest/heap/test-heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698