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 #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 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 1617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1628 | 1628 |
1629 | 1629 |
1630 // ----------------------------------------------------------------------------- | 1630 // ----------------------------------------------------------------------------- |
1631 // A space has a circular list of pages. The next page can be accessed via | 1631 // A space has a circular list of pages. The next page can be accessed via |
1632 // Page::next_page() call. | 1632 // Page::next_page() call. |
1633 | 1633 |
1634 // An abstraction of allocation and relocation pointers in a page-structured | 1634 // An abstraction of allocation and relocation pointers in a page-structured |
1635 // space. | 1635 // space. |
1636 class AllocationInfo { | 1636 class AllocationInfo { |
1637 public: | 1637 public: |
1638 AllocationInfo() { Reset(nullptr, nullptr); } | 1638 AllocationInfo() : top_(nullptr), limit_(nullptr) {} |
1639 AllocationInfo(Address top, Address limit) { Reset(top, limit); } | 1639 AllocationInfo(Address top, Address limit) : top_(top), limit_(limit) {} |
1640 | 1640 |
1641 void Reset(Address top, Address limit) { | 1641 void Reset(Address top, Address limit) { |
1642 set_top(top); | 1642 set_top(top); |
1643 set_limit(limit); | 1643 set_limit(limit); |
1644 } | 1644 } |
1645 | 1645 |
1646 inline void set_top(Address top) { | 1646 INLINE(void set_top(Address top)) { |
1647 SLOW_DCHECK((reinterpret_cast<intptr_t>(top) & kHeapObjectTagMask) == 0); | 1647 SLOW_DCHECK(top == NULL || |
1648 top_ = reinterpret_cast<intptr_t>(top) + kHeapObjectTag; | 1648 (reinterpret_cast<intptr_t>(top) & kHeapObjectTagMask) == 0); |
| 1649 top_ = top; |
1649 } | 1650 } |
1650 | 1651 |
1651 inline Address top() const { | 1652 INLINE(Address top()) const { |
1652 SLOW_DCHECK((top_ & kHeapObjectTagMask) == kHeapObjectTag); | 1653 SLOW_DCHECK(top_ == NULL || |
1653 return reinterpret_cast<Address>(top_ - kHeapObjectTag); | 1654 (reinterpret_cast<intptr_t>(top_) & kHeapObjectTagMask) == 0); |
| 1655 return top_; |
1654 } | 1656 } |
1655 | 1657 |
1656 Address* top_address() { return reinterpret_cast<Address*>(&top_); } | 1658 Address* top_address() { return &top_; } |
1657 | 1659 |
1658 inline void set_limit(Address limit) { | 1660 INLINE(void set_limit(Address limit)) { |
1659 limit_ = reinterpret_cast<intptr_t>(limit); | 1661 limit_ = limit; |
1660 } | 1662 } |
1661 | 1663 |
1662 inline Address limit() const { return reinterpret_cast<Address>(limit_); } | 1664 INLINE(Address limit()) const { |
| 1665 return limit_; |
| 1666 } |
1663 | 1667 |
1664 Address* limit_address() { return reinterpret_cast<Address*>(&limit_); } | 1668 Address* limit_address() { return &limit_; } |
| 1669 |
| 1670 #ifdef DEBUG |
| 1671 bool VerifyPagedAllocation() { |
| 1672 return (Page::FromAllocationAreaAddress(top_) == |
| 1673 Page::FromAllocationAreaAddress(limit_)) && |
| 1674 (top_ <= limit_); |
| 1675 } |
| 1676 #endif |
1665 | 1677 |
1666 private: | 1678 private: |
1667 // Current tagged allocation top. | 1679 // Current allocation top. |
1668 intptr_t top_; | 1680 Address top_; |
1669 // Current untagged allocation limit. | 1681 // Current allocation limit. |
1670 intptr_t limit_; | 1682 Address limit_; |
1671 }; | 1683 }; |
1672 | 1684 |
1673 | 1685 |
1674 // An abstraction of the accounting statistics of a page-structured space. | 1686 // An abstraction of the accounting statistics of a page-structured space. |
1675 // | 1687 // |
1676 // The stats are only set by functions that ensure they stay balanced. These | 1688 // The stats are only set by functions that ensure they stay balanced. These |
1677 // functions increase or decrease one of the non-capacity stats in conjunction | 1689 // functions increase or decrease one of the non-capacity stats in conjunction |
1678 // with capacity, or else they always balance increases and decreases to the | 1690 // with capacity, or else they always balance increases and decreases to the |
1679 // non-capacity stats. | 1691 // non-capacity stats. |
1680 class AllocationStats BASE_EMBEDDED { | 1692 class AllocationStats BASE_EMBEDDED { |
(...skipping 1448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3129 count = 0; | 3141 count = 0; |
3130 } | 3142 } |
3131 // Must be small, since an iteration is used for lookup. | 3143 // Must be small, since an iteration is used for lookup. |
3132 static const int kMaxComments = 64; | 3144 static const int kMaxComments = 64; |
3133 }; | 3145 }; |
3134 #endif | 3146 #endif |
3135 } // namespace internal | 3147 } // namespace internal |
3136 } // namespace v8 | 3148 } // namespace v8 |
3137 | 3149 |
3138 #endif // V8_HEAP_SPACES_H_ | 3150 #endif // V8_HEAP_SPACES_H_ |
OLD | NEW |