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

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

Issue 2516303006: [heap] Refactor heap object iteration (Closed)
Patch Set: Add comment Created 4 years 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/mark-compact.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 <list> 8 #include <list>
9 #include <memory> 9 #include <memory>
10 #include <unordered_set> 10 #include <unordered_set>
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 // x64 and ia32 architectures. 810 // x64 and ia32 architectures.
811 static const int kMaxCodePageSize = 512 * MB; 811 static const int kMaxCodePageSize = 512 * MB;
812 812
813 private: 813 private:
814 static inline LargePage* Initialize(Heap* heap, MemoryChunk* chunk, 814 static inline LargePage* Initialize(Heap* heap, MemoryChunk* chunk,
815 Executability executable, Space* owner); 815 Executability executable, Space* owner);
816 816
817 friend class MemoryAllocator; 817 friend class MemoryAllocator;
818 }; 818 };
819 819
820
821 // ---------------------------------------------------------------------------- 820 // ----------------------------------------------------------------------------
822 // Space is the abstract superclass for all allocation spaces. 821 // Space is the abstract superclass for all allocation spaces.
823 class Space : public Malloced { 822 class Space : public Malloced {
824 public: 823 public:
825 Space(Heap* heap, AllocationSpace id, Executability executable) 824 Space(Heap* heap, AllocationSpace id, Executability executable)
826 : allocation_observers_(new List<AllocationObserver*>()), 825 : allocation_observers_(new List<AllocationObserver*>()),
827 allocation_observers_paused_(false), 826 allocation_observers_paused_(false),
828 heap_(heap), 827 heap_(heap),
829 id_(id), 828 id_(id),
830 executable_(executable), 829 executable_(executable),
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
916 AllocationSpace id_; 915 AllocationSpace id_;
917 Executability executable_; 916 Executability executable_;
918 917
919 // Keeps track of committed memory in a space. 918 // Keeps track of committed memory in a space.
920 size_t committed_; 919 size_t committed_;
921 size_t max_committed_; 920 size_t max_committed_;
922 921
923 DISALLOW_COPY_AND_ASSIGN(Space); 922 DISALLOW_COPY_AND_ASSIGN(Space);
924 }; 923 };
925 924
925 // An abstraction of allocation and relocation pointers in a page-structured
926 // space.
927 class AllocationInfo {
928 public:
929 AllocationInfo() : original_top_(nullptr), top_(nullptr), limit_(nullptr) {}
930 AllocationInfo(Address top, Address limit)
931 : original_top_(top), top_(top), limit_(limit) {}
932
933 void Reset(Address top, Address limit) {
934 original_top_ = top;
935 set_top(top);
936 set_limit(limit);
937 }
938
939 Address original_top() {
940 SLOW_DCHECK(top_ == NULL ||
941 (reinterpret_cast<intptr_t>(top_) & kHeapObjectTagMask) == 0);
942 return original_top_;
943 }
944
945 INLINE(void set_top(Address top)) {
946 SLOW_DCHECK(top == NULL ||
947 (reinterpret_cast<intptr_t>(top) & kHeapObjectTagMask) == 0);
948 top_ = top;
949 }
950
951 INLINE(Address top()) const {
952 SLOW_DCHECK(top_ == NULL ||
953 (reinterpret_cast<intptr_t>(top_) & kHeapObjectTagMask) == 0);
954 return top_;
955 }
956
957 Address* top_address() { return &top_; }
958
959 INLINE(void set_limit(Address limit)) { limit_ = limit; }
960
961 INLINE(Address limit()) const { return limit_; }
962
963 Address* limit_address() { return &limit_; }
964
965 #ifdef DEBUG
966 bool VerifyPagedAllocation() {
967 return (Page::FromAllocationAreaAddress(top_) ==
968 Page::FromAllocationAreaAddress(limit_)) &&
969 (top_ <= limit_);
970 }
971 #endif
972
973 private:
974 // The original top address when the allocation info was initialized.
975 Address original_top_;
976 // Current allocation top.
977 Address top_;
978 // Current allocation limit.
979 Address limit_;
980 };
981
982 class SpaceWithInlineAllocationArea : public Space {
983 public:
984 SpaceWithInlineAllocationArea(Heap* heap, AllocationSpace id,
985 Executability executable)
986 : Space(heap, id, executable), allocation_info_(nullptr, nullptr) {}
987
988 Address top() { return allocation_info_.top(); }
989 Address limit() { return allocation_info_.limit(); }
990
991 Address* allocation_top_address() { return allocation_info_.top_address(); }
992
993 Address* allocation_limit_address() {
994 return allocation_info_.limit_address();
995 }
996
997 protected:
998 AllocationInfo allocation_info_;
999 };
926 1000
927 class MemoryChunkValidator { 1001 class MemoryChunkValidator {
928 // Computed offsets should match the compiler generated ones. 1002 // Computed offsets should match the compiler generated ones.
929 STATIC_ASSERT(MemoryChunk::kSizeOffset == offsetof(MemoryChunk, size_)); 1003 STATIC_ASSERT(MemoryChunk::kSizeOffset == offsetof(MemoryChunk, size_));
930 1004
931 // Validate our estimates on the header size. 1005 // Validate our estimates on the header size.
932 STATIC_ASSERT(sizeof(MemoryChunk) <= MemoryChunk::kHeaderSize); 1006 STATIC_ASSERT(sizeof(MemoryChunk) <= MemoryChunk::kHeaderSize);
933 STATIC_ASSERT(sizeof(LargePage) <= MemoryChunk::kHeaderSize); 1007 STATIC_ASSERT(sizeof(LargePage) <= MemoryChunk::kHeaderSize);
934 STATIC_ASSERT(sizeof(Page) <= MemoryChunk::kHeaderSize); 1008 STATIC_ASSERT(sizeof(Page) <= MemoryChunk::kHeaderSize);
935 }; 1009 };
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
1409 private: 1483 private:
1410 PAGE_TYPE* p_; 1484 PAGE_TYPE* p_;
1411 }; 1485 };
1412 1486
1413 typedef PageIteratorImpl<Page> PageIterator; 1487 typedef PageIteratorImpl<Page> PageIterator;
1414 typedef PageIteratorImpl<LargePage> LargePageIterator; 1488 typedef PageIteratorImpl<LargePage> LargePageIterator;
1415 1489
1416 class PageRange { 1490 class PageRange {
1417 public: 1491 public:
1418 typedef PageIterator iterator; 1492 typedef PageIterator iterator;
1493
1494 explicit PageRange(Page* page) : PageRange(page, page->next_page()) {}
1419 PageRange(Page* begin, Page* end) : begin_(begin), end_(end) {} 1495 PageRange(Page* begin, Page* end) : begin_(begin), end_(end) {}
1420 explicit PageRange(Page* page) : PageRange(page, page->next_page()) {} 1496 inline PageRange(Address start, Address limit);
1497
1421 iterator begin() { return iterator(begin_); } 1498 iterator begin() { return iterator(begin_); }
1422 iterator end() { return iterator(end_); } 1499 iterator end() { return iterator(end_); }
1423 1500
1424 private: 1501 private:
1425 Page* begin_; 1502 Page* begin_;
1426 Page* end_; 1503 Page* end_;
1427 }; 1504 };
1428 1505
1429 // ----------------------------------------------------------------------------- 1506 // -----------------------------------------------------------------------------
1430 // Heap object iterator in new/old/map spaces. 1507 // Heap object iterator in new/old/map spaces.
1431 // 1508 //
1432 // A HeapObjectIterator iterates objects from the bottom of the given space 1509 // A HeapObjectIterator iterates objects from the bottom of the given space
1433 // to its top or from the bottom of the given page to its top. 1510 // to its top or from the bottom of the given page to its top.
1434 // 1511 //
1435 // If objects are allocated in the page during iteration the iterator may 1512 // If objects are allocated in the page during iteration the iterator may
1436 // or may not iterate over those objects. The caller must create a new 1513 // or may not iterate over those objects. The caller must create a new
1437 // iterator in order to be sure to visit these new objects. 1514 // iterator in order to be sure to visit these new objects.
1438 class V8_EXPORT_PRIVATE HeapObjectIterator : public ObjectIterator { 1515 class V8_EXPORT_PRIVATE HeapObjectIterator : public ObjectIterator {
1439 public: 1516 public:
1440 // Creates a new object iterator in a given space.
1441 explicit HeapObjectIterator(PagedSpace* space); 1517 explicit HeapObjectIterator(PagedSpace* space);
1518 explicit HeapObjectIterator(NewSpace* space);
1442 explicit HeapObjectIterator(Page* page); 1519 explicit HeapObjectIterator(Page* page);
1443 1520
1444 // Advance to the next object, skipping free spaces and other fillers and 1521 // Advance to the next object, skipping free spaces and other fillers and
1445 // skipping the special garbage section of which there is one per space. 1522 // skipping the special garbage section of which there is one per space.
1446 // Returns nullptr when the iteration has ended. 1523 // Returns nullptr when the iteration has ended.
1447 inline HeapObject* Next() override; 1524 inline HeapObject* Next() override;
1448 1525
1449 private: 1526 private:
1527 inline Page* current_page() { return (*next_page_)->prev_page(); }
1450 // Fast (inlined) path of next(). 1528 // Fast (inlined) path of next().
1451 inline HeapObject* FromCurrentPage(); 1529 inline HeapObject* FromCurrentPage();
1452 1530
1453 // Slow path of next(), goes into the next page. Returns false if the 1531 // Slow path of next(), goes into the next page. Returns false if the
1454 // iteration has ended. 1532 // iteration has ended.
1455 bool AdvanceToNextPage(); 1533 bool AdvanceToNextPage();
1456 1534
1457 Address cur_addr_; // Current iteration point. 1535 Address cur_addr_; // Current iteration point.
1458 Address cur_end_; // End iteration point. 1536 Address cur_end_; // End iteration point.
1459 PagedSpace* space_; 1537 SpaceWithInlineAllocationArea* space_;
1460 PageRange page_range_; 1538 PageRange page_range_;
1461 PageRange::iterator current_page_; 1539 PageRange::iterator next_page_;
1462 }; 1540 };
1463 1541
1464
1465 // -----------------------------------------------------------------------------
1466 // A space has a circular list of pages. The next page can be accessed via
1467 // Page::next_page() call.
1468
1469 // An abstraction of allocation and relocation pointers in a page-structured
1470 // space.
1471 class AllocationInfo {
1472 public:
1473 AllocationInfo() : original_top_(nullptr), top_(nullptr), limit_(nullptr) {}
1474 AllocationInfo(Address top, Address limit)
1475 : original_top_(top), top_(top), limit_(limit) {}
1476
1477 void Reset(Address top, Address limit) {
1478 original_top_ = top;
1479 set_top(top);
1480 set_limit(limit);
1481 }
1482
1483 Address original_top() {
1484 SLOW_DCHECK(top_ == NULL ||
1485 (reinterpret_cast<intptr_t>(top_) & kHeapObjectTagMask) == 0);
1486 return original_top_;
1487 }
1488
1489 INLINE(void set_top(Address top)) {
1490 SLOW_DCHECK(top == NULL ||
1491 (reinterpret_cast<intptr_t>(top) & kHeapObjectTagMask) == 0);
1492 top_ = top;
1493 }
1494
1495 INLINE(Address top()) const {
1496 SLOW_DCHECK(top_ == NULL ||
1497 (reinterpret_cast<intptr_t>(top_) & kHeapObjectTagMask) == 0);
1498 return top_;
1499 }
1500
1501 Address* top_address() { return &top_; }
1502
1503 INLINE(void set_limit(Address limit)) {
1504 limit_ = limit;
1505 }
1506
1507 INLINE(Address limit()) const {
1508 return limit_;
1509 }
1510
1511 Address* limit_address() { return &limit_; }
1512
1513 #ifdef DEBUG
1514 bool VerifyPagedAllocation() {
1515 return (Page::FromAllocationAreaAddress(top_) ==
1516 Page::FromAllocationAreaAddress(limit_)) &&
1517 (top_ <= limit_);
1518 }
1519 #endif
1520
1521 private:
1522 // The original top address when the allocation info was initialized.
1523 Address original_top_;
1524 // Current allocation top.
1525 Address top_;
1526 // Current allocation limit.
1527 Address limit_;
1528 };
1529
1530
1531 // An abstraction of the accounting statistics of a page-structured space. 1542 // An abstraction of the accounting statistics of a page-structured space.
1532 // 1543 //
1533 // The stats are only set by functions that ensure they stay balanced. These 1544 // The stats are only set by functions that ensure they stay balanced. These
1534 // functions increase or decrease one of the non-capacity stats in conjunction 1545 // functions increase or decrease one of the non-capacity stats in conjunction
1535 // with capacity, or else they always balance increases and decreases to the 1546 // with capacity, or else they always balance increases and decreases to the
1536 // non-capacity stats. 1547 // non-capacity stats.
1537 class AllocationStats BASE_EMBEDDED { 1548 class AllocationStats BASE_EMBEDDED {
1538 public: 1549 public:
1539 AllocationStats() { Clear(); } 1550 AllocationStats() { Clear(); }
1540 1551
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1870 1881
1871 private: 1882 private:
1872 LocalAllocationBuffer(Heap* heap, AllocationInfo allocation_info); 1883 LocalAllocationBuffer(Heap* heap, AllocationInfo allocation_info);
1873 1884
1874 void Close(); 1885 void Close();
1875 1886
1876 Heap* heap_; 1887 Heap* heap_;
1877 AllocationInfo allocation_info_; 1888 AllocationInfo allocation_info_;
1878 }; 1889 };
1879 1890
1880 class NewSpacePageRange { 1891 class PagedSpace : public SpaceWithInlineAllocationArea {
1881 public:
1882 typedef PageRange::iterator iterator;
1883 inline NewSpacePageRange(Address start, Address limit);
1884 iterator begin() { return range_.begin(); }
1885 iterator end() { return range_.end(); }
1886
1887 private:
1888 PageRange range_;
1889 };
1890
1891 class PagedSpace : public Space {
1892 public: 1892 public:
1893 typedef PageIterator iterator; 1893 typedef PageIterator iterator;
1894 1894
1895 static const intptr_t kCompactionMemoryWanted = 500 * KB; 1895 static const intptr_t kCompactionMemoryWanted = 500 * KB;
1896 1896
1897 // Creates a space with an id. 1897 // Creates a space with an id.
1898 PagedSpace(Heap* heap, AllocationSpace id, Executability executable); 1898 PagedSpace(Heap* heap, AllocationSpace id, Executability executable);
1899 1899
1900 ~PagedSpace() override { TearDown(); } 1900 ~PagedSpace() override { TearDown(); }
1901 1901
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1959 size_t Size() override { return accounting_stats_.Size(); } 1959 size_t Size() override { return accounting_stats_.Size(); }
1960 1960
1961 // As size, but the bytes in lazily swept pages are estimated and the bytes 1961 // As size, but the bytes in lazily swept pages are estimated and the bytes
1962 // in the current linear allocation area are not included. 1962 // in the current linear allocation area are not included.
1963 size_t SizeOfObjects() override; 1963 size_t SizeOfObjects() override;
1964 1964
1965 // Wasted bytes in this space. These are just the bytes that were thrown away 1965 // Wasted bytes in this space. These are just the bytes that were thrown away
1966 // due to being too small to use for allocation. 1966 // due to being too small to use for allocation.
1967 virtual size_t Waste() { return free_list_.wasted_bytes(); } 1967 virtual size_t Waste() { return free_list_.wasted_bytes(); }
1968 1968
1969 // Returns the allocation pointer in this space.
1970 Address top() { return allocation_info_.top(); }
1971 Address limit() { return allocation_info_.limit(); }
1972
1973 // The allocation top address.
1974 Address* allocation_top_address() { return allocation_info_.top_address(); }
1975
1976 // The allocation limit address.
1977 Address* allocation_limit_address() {
1978 return allocation_info_.limit_address();
1979 }
1980
1981 enum UpdateSkipList { UPDATE_SKIP_LIST, IGNORE_SKIP_LIST }; 1969 enum UpdateSkipList { UPDATE_SKIP_LIST, IGNORE_SKIP_LIST };
1982 1970
1983 // Allocate the requested number of bytes in the space if possible, return a 1971 // Allocate the requested number of bytes in the space if possible, return a
1984 // failure object if not. Only use IGNORE_SKIP_LIST if the skip list is going 1972 // failure object if not. Only use IGNORE_SKIP_LIST if the skip list is going
1985 // to be manually updated later. 1973 // to be manually updated later.
1986 MUST_USE_RESULT inline AllocationResult AllocateRawUnaligned( 1974 MUST_USE_RESULT inline AllocationResult AllocateRawUnaligned(
1987 int size_in_bytes, UpdateSkipList update_skip_list = UPDATE_SKIP_LIST); 1975 int size_in_bytes, UpdateSkipList update_skip_list = UPDATE_SKIP_LIST);
1988 1976
1989 MUST_USE_RESULT inline AllocationResult AllocateRawUnalignedSynchronized( 1977 MUST_USE_RESULT inline AllocationResult AllocateRawUnalignedSynchronized(
1990 int size_in_bytes); 1978 int size_in_bytes);
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2143 2131
2144 // Accounting information for this space. 2132 // Accounting information for this space.
2145 AllocationStats accounting_stats_; 2133 AllocationStats accounting_stats_;
2146 2134
2147 // The dummy page that anchors the double linked list of pages. 2135 // The dummy page that anchors the double linked list of pages.
2148 Page anchor_; 2136 Page anchor_;
2149 2137
2150 // The space's free list. 2138 // The space's free list.
2151 FreeList free_list_; 2139 FreeList free_list_;
2152 2140
2153 // Normal allocation information.
2154 AllocationInfo allocation_info_;
2155
2156 // Mutex guarding any concurrent access to the space. 2141 // Mutex guarding any concurrent access to the space.
2157 base::Mutex space_mutex_; 2142 base::Mutex space_mutex_;
2158 2143
2159 friend class IncrementalMarking; 2144 friend class IncrementalMarking;
2160 friend class MarkCompactCollector; 2145 friend class MarkCompactCollector;
2161 2146
2162 // Used in cctest. 2147 // Used in cctest.
2163 friend class HeapTester; 2148 friend class HeapTester;
2164 }; 2149 };
2165 2150
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
2360 // The end of iteration. 2345 // The end of iteration.
2361 Address limit_; 2346 Address limit_;
2362 }; 2347 };
2363 2348
2364 // ----------------------------------------------------------------------------- 2349 // -----------------------------------------------------------------------------
2365 // The young generation space. 2350 // The young generation space.
2366 // 2351 //
2367 // The new space consists of a contiguous pair of semispaces. It simply 2352 // The new space consists of a contiguous pair of semispaces. It simply
2368 // forwards most functions to the appropriate semispace. 2353 // forwards most functions to the appropriate semispace.
2369 2354
2370 class NewSpace : public Space { 2355 class NewSpace : public SpaceWithInlineAllocationArea {
2371 public: 2356 public:
2372 typedef PageIterator iterator; 2357 typedef PageIterator iterator;
2373 2358
2374 explicit NewSpace(Heap* heap) 2359 explicit NewSpace(Heap* heap)
2375 : Space(heap, NEW_SPACE, NOT_EXECUTABLE), 2360 : SpaceWithInlineAllocationArea(heap, NEW_SPACE, NOT_EXECUTABLE),
2376 to_space_(heap, kToSpace), 2361 to_space_(heap, kToSpace),
2377 from_space_(heap, kFromSpace), 2362 from_space_(heap, kFromSpace),
2378 reservation_(), 2363 reservation_(),
2379 top_on_previous_step_(0), 2364 top_on_previous_step_(0),
2380 allocated_histogram_(nullptr), 2365 allocated_histogram_(nullptr),
2381 promoted_histogram_(nullptr) {} 2366 promoted_histogram_(nullptr) {}
2382 2367
2383 inline bool Contains(HeapObject* o); 2368 inline bool Contains(HeapObject* o);
2384 inline bool ContainsSlow(Address a); 2369 inline bool ContainsSlow(Address a);
2385 inline bool Contains(Object* o); 2370 inline bool Contains(Object* o);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
2501 } 2486 }
2502 2487
2503 bool IsAtMaximumCapacity() { return TotalCapacity() == MaximumCapacity(); } 2488 bool IsAtMaximumCapacity() { return TotalCapacity() == MaximumCapacity(); }
2504 2489
2505 // Returns the initial capacity of a semispace. 2490 // Returns the initial capacity of a semispace.
2506 size_t InitialTotalCapacity() { 2491 size_t InitialTotalCapacity() {
2507 DCHECK(to_space_.minimum_capacity() == from_space_.minimum_capacity()); 2492 DCHECK(to_space_.minimum_capacity() == from_space_.minimum_capacity());
2508 return to_space_.minimum_capacity(); 2493 return to_space_.minimum_capacity();
2509 } 2494 }
2510 2495
2511 // Return the address of the allocation pointer in the active semispace.
2512 Address top() {
2513 DCHECK(to_space_.current_page()->ContainsLimit(allocation_info_.top()));
2514 return allocation_info_.top();
2515 }
2516
2517 // Return the address of the allocation pointer limit in the active semispace.
2518 Address limit() {
2519 DCHECK(to_space_.current_page()->ContainsLimit(allocation_info_.limit()));
2520 return allocation_info_.limit();
2521 }
2522
2523 // Return the address of the first object in the active semispace. 2496 // Return the address of the first object in the active semispace.
2524 Address bottom() { return to_space_.space_start(); } 2497 Address bottom() { return to_space_.space_start(); }
2525 2498
2526 // Get the age mark of the inactive semispace. 2499 // Get the age mark of the inactive semispace.
2527 Address age_mark() { return from_space_.age_mark(); } 2500 Address age_mark() { return from_space_.age_mark(); }
2528 // Set the age mark in the active semispace. 2501 // Set the age mark in the active semispace.
2529 void set_age_mark(Address mark) { to_space_.set_age_mark(mark); } 2502 void set_age_mark(Address mark) { to_space_.set_age_mark(mark); }
2530 2503
2531 // The allocation top and limit address.
2532 Address* allocation_top_address() { return allocation_info_.top_address(); }
2533
2534 // The allocation limit address.
2535 Address* allocation_limit_address() {
2536 return allocation_info_.limit_address();
2537 }
2538
2539 MUST_USE_RESULT INLINE(AllocationResult AllocateRawAligned( 2504 MUST_USE_RESULT INLINE(AllocationResult AllocateRawAligned(
2540 int size_in_bytes, AllocationAlignment alignment)); 2505 int size_in_bytes, AllocationAlignment alignment));
2541 2506
2542 MUST_USE_RESULT INLINE( 2507 MUST_USE_RESULT INLINE(
2543 AllocationResult AllocateRawUnaligned(int size_in_bytes)); 2508 AllocationResult AllocateRawUnaligned(int size_in_bytes));
2544 2509
2545 MUST_USE_RESULT INLINE(AllocationResult AllocateRaw( 2510 MUST_USE_RESULT INLINE(AllocationResult AllocateRaw(
2546 int size_in_bytes, AllocationAlignment alignment)); 2511 int size_in_bytes, AllocationAlignment alignment));
2547 2512
2548 MUST_USE_RESULT inline AllocationResult AllocateRawSynchronized( 2513 MUST_USE_RESULT inline AllocationResult AllocateRawSynchronized(
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
2645 // Update allocation info to match the current to-space page. 2610 // Update allocation info to match the current to-space page.
2646 void UpdateAllocationInfo(); 2611 void UpdateAllocationInfo();
2647 2612
2648 base::Mutex mutex_; 2613 base::Mutex mutex_;
2649 2614
2650 // The semispaces. 2615 // The semispaces.
2651 SemiSpace to_space_; 2616 SemiSpace to_space_;
2652 SemiSpace from_space_; 2617 SemiSpace from_space_;
2653 base::VirtualMemory reservation_; 2618 base::VirtualMemory reservation_;
2654 2619
2655 // Allocation pointer and limit for normal allocation and allocation during
2656 // mark-compact collection.
2657 AllocationInfo allocation_info_;
2658
2659 Address top_on_previous_step_; 2620 Address top_on_previous_step_;
2660 2621
2661 HistogramInfo* allocated_histogram_; 2622 HistogramInfo* allocated_histogram_;
2662 HistogramInfo* promoted_histogram_; 2623 HistogramInfo* promoted_histogram_;
2663 2624
2664 bool EnsureAllocation(int size_in_bytes, AllocationAlignment alignment); 2625 bool EnsureAllocation(int size_in_bytes, AllocationAlignment alignment);
2665 2626
2666 // If we are doing inline allocation in steps, this method performs the 'step' 2627 // If we are doing inline allocation in steps, this method performs the 'step'
2667 // operation. top is the memory address of the bump pointer at the last 2628 // operation. top is the memory address of the bump pointer at the last
2668 // inline allocation (i.e. it determines the numbers of bytes actually 2629 // inline allocation (i.e. it determines the numbers of bytes actually
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
2916 PageIterator old_iterator_; 2877 PageIterator old_iterator_;
2917 PageIterator code_iterator_; 2878 PageIterator code_iterator_;
2918 PageIterator map_iterator_; 2879 PageIterator map_iterator_;
2919 LargePageIterator lo_iterator_; 2880 LargePageIterator lo_iterator_;
2920 }; 2881 };
2921 2882
2922 } // namespace internal 2883 } // namespace internal
2923 } // namespace v8 2884 } // namespace v8
2924 2885
2925 #endif // V8_HEAP_SPACES_H_ 2886 #endif // V8_HEAP_SPACES_H_
OLDNEW
« no previous file with comments | « src/heap/mark-compact.cc ('k') | src/heap/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698