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

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

Issue 1862653002: Move MemoryAllocator and CodeRange into Heap (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase 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
« no previous file with comments | « src/heap/heap.cc ('k') | src/heap/spaces.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_H_ 5 #ifndef V8_HEAP_SPACES_H_
6 #define V8_HEAP_SPACES_H_ 6 #define V8_HEAP_SPACES_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/atomic-utils.h" 9 #include "src/atomic-utils.h"
10 #include "src/base/atomicops.h" 10 #include "src/base/atomicops.h"
(...skipping 1239 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 public: 1250 public:
1251 enum AllocationMode { 1251 enum AllocationMode {
1252 kRegular, 1252 kRegular,
1253 kPooled, 1253 kPooled,
1254 }; 1254 };
1255 1255
1256 explicit MemoryAllocator(Isolate* isolate); 1256 explicit MemoryAllocator(Isolate* isolate);
1257 1257
1258 // Initializes its internal bookkeeping structures. 1258 // Initializes its internal bookkeeping structures.
1259 // Max capacity of the total space and executable memory limit. 1259 // Max capacity of the total space and executable memory limit.
1260 bool SetUp(intptr_t max_capacity, intptr_t capacity_executable); 1260 bool SetUp(intptr_t max_capacity, intptr_t capacity_executable,
1261 intptr_t code_range_size);
1261 1262
1262 void TearDown(); 1263 void TearDown();
1263 1264
1264 // Allocates either Page or NewSpacePage from the allocator. AllocationMode 1265 // Allocates either Page or NewSpacePage from the allocator. AllocationMode
1265 // is used to indicate whether pooled allocation, which only works for 1266 // is used to indicate whether pooled allocation, which only works for
1266 // MemoryChunk::kPageSize, should be tried first. 1267 // MemoryChunk::kPageSize, should be tried first.
1267 template <typename PageType, MemoryAllocator::AllocationMode mode = kRegular, 1268 template <typename PageType, MemoryAllocator::AllocationMode mode = kRegular,
1268 typename SpaceType> 1269 typename SpaceType>
1269 PageType* AllocatePage(intptr_t size, SpaceType* owner, 1270 PageType* AllocatePage(intptr_t size, SpaceType* owner,
1270 Executability executable); 1271 Executability executable);
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 static int PageAreaSize(AllocationSpace space) { 1377 static int PageAreaSize(AllocationSpace space) {
1377 DCHECK_NE(LO_SPACE, space); 1378 DCHECK_NE(LO_SPACE, space);
1378 return (space == CODE_SPACE) ? CodePageAreaSize() 1379 return (space == CODE_SPACE) ? CodePageAreaSize()
1379 : Page::kAllocatableMemory; 1380 : Page::kAllocatableMemory;
1380 } 1381 }
1381 1382
1382 MUST_USE_RESULT bool CommitExecutableMemory(base::VirtualMemory* vm, 1383 MUST_USE_RESULT bool CommitExecutableMemory(base::VirtualMemory* vm,
1383 Address start, size_t commit_size, 1384 Address start, size_t commit_size,
1384 size_t reserved_size); 1385 size_t reserved_size);
1385 1386
1387 CodeRange* code_range() { return code_range_; }
1388
1386 private: 1389 private:
1387 // See AllocatePage for public interface. Note that currently we only support 1390 // See AllocatePage for public interface. Note that currently we only support
1388 // pools for NOT_EXECUTABLE pages of size MemoryChunk::kPageSize. 1391 // pools for NOT_EXECUTABLE pages of size MemoryChunk::kPageSize.
1389 template <typename SpaceType> 1392 template <typename SpaceType>
1390 MemoryChunk* AllocatePagePooled(SpaceType* owner); 1393 MemoryChunk* AllocatePagePooled(SpaceType* owner);
1391 1394
1392 // Free that chunk into the pool. 1395 // Free that chunk into the pool.
1393 void FreePooled(MemoryChunk* chunk); 1396 void FreePooled(MemoryChunk* chunk);
1394 1397
1395 Isolate* isolate_; 1398 Isolate* isolate_;
1396 1399
1400 CodeRange* code_range_;
1401
1397 // Maximum space size in bytes. 1402 // Maximum space size in bytes.
1398 intptr_t capacity_; 1403 intptr_t capacity_;
1399 // Maximum subset of capacity_ that can be executable 1404 // Maximum subset of capacity_ that can be executable
1400 intptr_t capacity_executable_; 1405 intptr_t capacity_executable_;
1401 1406
1402 // Allocated space size in bytes. 1407 // Allocated space size in bytes.
1403 AtomicNumber<intptr_t> size_; 1408 AtomicNumber<intptr_t> size_;
1404 // Allocated executable space size in bytes. 1409 // Allocated executable space size in bytes.
1405 AtomicNumber<intptr_t> size_executable_; 1410 AtomicNumber<intptr_t> size_executable_;
1406 1411
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1440 do { 1445 do {
1441 ptr = lowest_ever_allocated_.Value(); 1446 ptr = lowest_ever_allocated_.Value();
1442 } while ((low < ptr) && !lowest_ever_allocated_.TrySetValue(ptr, low)); 1447 } while ((low < ptr) && !lowest_ever_allocated_.TrySetValue(ptr, low));
1443 do { 1448 do {
1444 ptr = highest_ever_allocated_.Value(); 1449 ptr = highest_ever_allocated_.Value();
1445 } while ((high > ptr) && !highest_ever_allocated_.TrySetValue(ptr, high)); 1450 } while ((high > ptr) && !highest_ever_allocated_.TrySetValue(ptr, high));
1446 } 1451 }
1447 1452
1448 List<MemoryChunk*> chunk_pool_; 1453 List<MemoryChunk*> chunk_pool_;
1449 1454
1455 friend class TestCodeRangeScope;
1456
1450 DISALLOW_IMPLICIT_CONSTRUCTORS(MemoryAllocator); 1457 DISALLOW_IMPLICIT_CONSTRUCTORS(MemoryAllocator);
1451 }; 1458 };
1452 1459
1453 1460
1454 // ----------------------------------------------------------------------------- 1461 // -----------------------------------------------------------------------------
1455 // Interface for heap object iterator to be implemented by all object space 1462 // Interface for heap object iterator to be implemented by all object space
1456 // object iterators. 1463 // object iterators.
1457 // 1464 //
1458 // NOTE: The space specific object iterators also implements the own next() 1465 // NOTE: The space specific object iterators also implements the own next()
1459 // method which is used to avoid using virtual functions 1466 // method which is used to avoid using virtual functions
(...skipping 1646 matching lines...) Expand 10 before | Expand all | Expand 10 after
3106 count = 0; 3113 count = 0;
3107 } 3114 }
3108 // Must be small, since an iteration is used for lookup. 3115 // Must be small, since an iteration is used for lookup.
3109 static const int kMaxComments = 64; 3116 static const int kMaxComments = 64;
3110 }; 3117 };
3111 #endif 3118 #endif
3112 } // namespace internal 3119 } // namespace internal
3113 } // namespace v8 3120 } // namespace v8
3114 3121
3115 #endif // V8_HEAP_SPACES_H_ 3122 #endif // V8_HEAP_SPACES_H_
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | src/heap/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698