| Index: src/heap/spaces.h
|
| diff --git a/src/heap/spaces.h b/src/heap/spaces.h
|
| index eb1184bbfbc2f5dd2b0ebfa79274aacc079bef32..3674551a13bc9310ede67754bd715b20d8f320a3 100644
|
| --- a/src/heap/spaces.h
|
| +++ b/src/heap/spaces.h
|
| @@ -1940,10 +1940,8 @@ class PagedSpace : public Space {
|
|
|
| // Checks whether an object/address is in this space.
|
| inline bool Contains(Address a);
|
| - inline bool Contains(HeapObject* o);
|
| - // Unlike Contains() methods it is safe to call this one even for addresses
|
| - // of unmapped memory.
|
| - bool ContainsSafe(Address addr);
|
| + inline bool Contains(Object* o);
|
| + bool ContainsSlow(Address addr);
|
|
|
| // Given an address occupied by a live object, return that object if it is
|
| // in this space, or a Smi if it is not. The implementation iterates over
|
| @@ -2319,17 +2317,17 @@ class SemiSpace : public Space {
|
| minimum_capacity_(0),
|
| start_(nullptr),
|
| age_mark_(nullptr),
|
| - address_mask_(0),
|
| - object_mask_(0),
|
| - object_expected_(0),
|
| committed_(false),
|
| id_(semispace),
|
| anchor_(this),
|
| current_page_(nullptr) {}
|
|
|
| + inline bool Contains(HeapObject* o);
|
| + inline bool Contains(Object* o);
|
| + inline bool ContainsSlow(Address a);
|
| +
|
| // Creates a space in the young generation. The constructor does not
|
| - // allocate memory from the OS. A SemiSpace is given a contiguous chunk of
|
| - // memory of size {initial_capacity} when set up.
|
| + // allocate memory from the OS.
|
| void SetUp(Address start, int initial_capacity, int maximum_capacity);
|
|
|
| // Tear down the space. Heap memory was not allocated by the space, so it
|
| @@ -2378,19 +2376,6 @@ class SemiSpace : public Space {
|
| Address age_mark() { return age_mark_; }
|
| void set_age_mark(Address mark);
|
|
|
| - // True if the address is in the address range of this semispace (not
|
| - // necessarily below the allocation pointer).
|
| - bool Contains(Address a) {
|
| - return (reinterpret_cast<uintptr_t>(a) & address_mask_) ==
|
| - reinterpret_cast<uintptr_t>(start_);
|
| - }
|
| -
|
| - // True if the object is a heap object in the address range of this
|
| - // semispace (not necessarily below the allocation pointer).
|
| - bool Contains(Object* o) {
|
| - return (reinterpret_cast<uintptr_t>(o) & object_mask_) == object_expected_;
|
| - }
|
| -
|
| bool is_committed() { return committed_; }
|
| bool Commit();
|
| bool Uncommit();
|
| @@ -2449,9 +2434,8 @@ class SemiSpace : public Space {
|
| current_capacity_ = new_capacity;
|
| }
|
|
|
| - // Flips the semispace between being from-space and to-space. Copies the flags
|
| - // into the masked positions on all pages in the space.
|
| - void FlipPages(intptr_t flags, intptr_t flag_mask);
|
| + // Copies the flags into the masked positions on all pages in the space.
|
| + void FixPagesFlags(intptr_t flags, intptr_t flag_mask);
|
|
|
| // The currently committed space capacity.
|
| int current_capacity_;
|
| @@ -2467,11 +2451,6 @@ class SemiSpace : public Space {
|
| // Used to govern object promotion during mark-compact collection.
|
| Address age_mark_;
|
|
|
| - // Masks and comparison values to test for containment in this semispace.
|
| - uintptr_t address_mask_;
|
| - uintptr_t object_mask_;
|
| - uintptr_t object_expected_;
|
| -
|
| bool committed_;
|
| SemiSpaceId id_;
|
|
|
| @@ -2553,6 +2532,10 @@ class NewSpace : public Space {
|
| top_on_previous_step_(0),
|
| inline_allocation_observers_paused_(false) {}
|
|
|
| + inline bool Contains(HeapObject* o);
|
| + inline bool ContainsSlow(Address a);
|
| + inline bool Contains(Object* o);
|
| +
|
| // Sets up the new space using the given chunk.
|
| bool SetUp(int reserved_semispace_size_, int max_semi_space_size);
|
|
|
| @@ -2575,18 +2558,6 @@ class NewSpace : public Space {
|
| // Shrink the capacity of the semispaces.
|
| void Shrink();
|
|
|
| - // True if the address or object lies in the address range of either
|
| - // semispace (not necessarily below the allocation pointer).
|
| - bool Contains(Address a) {
|
| - return (reinterpret_cast<uintptr_t>(a) & address_mask_) ==
|
| - reinterpret_cast<uintptr_t>(start_);
|
| - }
|
| -
|
| - bool Contains(Object* o) {
|
| - Address a = reinterpret_cast<Address>(o);
|
| - return (reinterpret_cast<uintptr_t>(a) & object_mask_) == object_expected_;
|
| - }
|
| -
|
| // Return the allocated bytes in the active semispace.
|
| intptr_t Size() override {
|
| return pages_used_ * NewSpacePage::kAreaSize +
|
| @@ -2685,18 +2656,6 @@ class NewSpace : public Space {
|
| // The start address of the space and a bit mask. Anding an address in the
|
| // new space with the mask will result in the start address.
|
| Address start() { return start_; }
|
| - uintptr_t mask() { return address_mask_; }
|
| -
|
| - INLINE(uint32_t AddressToMarkbitIndex(Address addr)) {
|
| - DCHECK(Contains(addr));
|
| - DCHECK(IsAligned(OffsetFrom(addr), kPointerSize) ||
|
| - IsAligned(OffsetFrom(addr) - 1, kPointerSize));
|
| - return static_cast<uint32_t>(addr - start_) >> kPointerSizeLog2;
|
| - }
|
| -
|
| - INLINE(Address MarkbitIndexToAddress(uint32_t index)) {
|
| - return reinterpret_cast<Address>(index << kPointerSizeLog2);
|
| - }
|
|
|
| // The allocation top and limit address.
|
| Address* allocation_top_address() { return allocation_info_.top_address(); }
|
| @@ -2749,18 +2708,10 @@ class NewSpace : public Space {
|
| Address ToSpaceStart() { return to_space_.space_start(); }
|
| Address ToSpaceEnd() { return to_space_.space_end(); }
|
|
|
| - inline bool ToSpaceContains(Address address) {
|
| - return to_space_.Contains(address);
|
| - }
|
| - inline bool FromSpaceContains(Address address) {
|
| - return from_space_.Contains(address);
|
| - }
|
| -
|
| - // True if the object is a heap object in the address range of the
|
| - // respective semispace (not necessarily below the allocation pointer of the
|
| - // semispace).
|
| - inline bool ToSpaceContains(Object* o) { return to_space_.Contains(o); }
|
| - inline bool FromSpaceContains(Object* o) { return from_space_.Contains(o); }
|
| + inline bool ToSpaceContainsSlow(Address a);
|
| + inline bool FromSpaceContainsSlow(Address a);
|
| + inline bool ToSpaceContains(Object* o);
|
| + inline bool FromSpaceContains(Object* o);
|
|
|
| // Try to switch the active semispace to a new, empty, page.
|
| // Returns false if this isn't possible or reasonable (i.e., there
|
| @@ -2824,9 +2775,6 @@ class NewSpace : public Space {
|
|
|
| // Start address and bit mask for containment testing.
|
| Address start_;
|
| - uintptr_t address_mask_;
|
| - uintptr_t object_mask_;
|
| - uintptr_t object_expected_;
|
|
|
| // Allocation pointer and limit for normal allocation and allocation during
|
| // mark-compact collection.
|
| @@ -3039,7 +2987,9 @@ class LargeObjectSpace : public Space {
|
|
|
| // Checks whether a heap object is in this space; O(1).
|
| bool Contains(HeapObject* obj);
|
| - bool Contains(Address address);
|
| + // Checks whether an address is in the object area in this space. Iterates
|
| + // all objects in the space. May be slow.
|
| + bool ContainsSlow(Address addr) { return FindObject(addr)->IsHeapObject(); }
|
|
|
| // Checks whether the space is empty.
|
| bool IsEmpty() { return first_page_ == NULL; }
|
| @@ -3055,9 +3005,6 @@ class LargeObjectSpace : public Space {
|
| void ReportStatistics();
|
| void CollectCodeStatistics();
|
| #endif
|
| - // Checks whether an address is in the object area in this space. It
|
| - // iterates all objects in the space. May be slow.
|
| - bool SlowContains(Address addr) { return FindObject(addr)->IsHeapObject(); }
|
|
|
| private:
|
| // The head of the linked list of large object chunks.
|
|
|