Index: src/heap/spaces.h |
diff --git a/src/heap/spaces.h b/src/heap/spaces.h |
index c9bf31e7778999175f8a9aed549988ecfa503d6c..ef9a455e868de87d3362fe54a3ec9d18360b97a8 100644 |
--- a/src/heap/spaces.h |
+++ b/src/heap/spaces.h |
@@ -869,17 +869,17 @@ class Space : public Malloced { |
virtual size_t MaximumCommittedMemory() { return max_committed_; } |
// Returns allocated size. |
- virtual intptr_t Size() = 0; |
+ virtual size_t Size() = 0; |
// Returns size of objects. Can differ from the allocated size |
// (e.g. see LargeObjectSpace). |
- virtual intptr_t SizeOfObjects() { return Size(); } |
+ virtual size_t SizeOfObjects() { return Size(); } |
// Approximate amount of physical memory committed for this space. |
virtual size_t CommittedPhysicalMemory() = 0; |
// Return the available bytes without growing. |
- virtual intptr_t Available() = 0; |
+ virtual size_t Available() = 0; |
virtual int RoundSizeDownToObjectAlignment(int size) { |
if (id_ == CODE_SPACE) { |
@@ -1213,8 +1213,8 @@ class MemoryAllocator { |
// Initializes its internal bookkeeping structures. |
// Max capacity of the total space and executable memory limit. |
- bool SetUp(intptr_t max_capacity, intptr_t capacity_executable, |
- intptr_t code_range_size); |
+ bool SetUp(size_t max_capacity, size_t capacity_executable, |
+ size_t code_range_size); |
void TearDown(); |
@@ -1927,7 +1927,7 @@ class PagedSpace : public Space { |
void PrepareForMarkCompact(); |
// Current capacity without growing (Size() + Available()). |
- intptr_t Capacity() { return accounting_stats_.Capacity(); } |
+ size_t Capacity() { return accounting_stats_.Capacity(); } |
// Approximate amount of physical memory committed for this space. |
size_t CommittedPhysicalMemory() override; |
@@ -1949,21 +1949,21 @@ class PagedSpace : public Space { |
// The bytes in the linear allocation area are not included in this total |
// because updating the stats would slow down allocation. New pages are |
// immediately added to the free list so they show up here. |
- intptr_t Available() override { return free_list_.Available(); } |
+ size_t Available() override { return free_list_.Available(); } |
// Allocated bytes in this space. Garbage bytes that were not found due to |
// concurrent sweeping are counted as being allocated! The bytes in the |
// current linear allocation area (between top and limit) are also counted |
// here. |
- intptr_t Size() override { return accounting_stats_.Size(); } |
+ size_t Size() override { return accounting_stats_.Size(); } |
// As size, but the bytes in lazily swept pages are estimated and the bytes |
// in the current linear allocation area are not included. |
- intptr_t SizeOfObjects() override; |
+ size_t SizeOfObjects() override; |
// Wasted bytes in this space. These are just the bytes that were thrown away |
// due to being too small to use for allocation. |
- virtual intptr_t Waste() { return free_list_.wasted_bytes(); } |
+ virtual size_t Waste() { return free_list_.wasted_bytes(); } |
// Returns the allocation pointer in this space. |
Address top() { return allocation_info_.top(); } |
@@ -2190,7 +2190,7 @@ class SemiSpace : public Space { |
inline bool Contains(Object* o); |
inline bool ContainsSlow(Address a); |
- void SetUp(int initial_capacity, int maximum_capacity); |
+ void SetUp(size_t initial_capacity, size_t maximum_capacity); |
void TearDown(); |
bool HasBeenSetUp() { return maximum_capacity_ != 0; } |
@@ -2200,12 +2200,12 @@ class SemiSpace : public Space { |
// Grow the semispace to the new capacity. The new capacity requested must |
// be larger than the current capacity and less than the maximum capacity. |
- bool GrowTo(int new_capacity); |
+ bool GrowTo(size_t new_capacity); |
// Shrinks the semispace to the new capacity. The new capacity requested |
// must be more than the amount of used memory in the semispace and less |
// than the current capacity. |
- bool ShrinkTo(int new_capacity); |
+ bool ShrinkTo(size_t new_capacity); |
bool EnsureCurrentCapacity(); |
@@ -2253,13 +2253,13 @@ class SemiSpace : public Space { |
void set_age_mark(Address mark); |
// Returns the current capacity of the semispace. |
- int current_capacity() { return current_capacity_; } |
+ size_t current_capacity() { return current_capacity_; } |
// Returns the maximum capacity of the semispace. |
- int maximum_capacity() { return maximum_capacity_; } |
+ size_t maximum_capacity() { return maximum_capacity_; } |
// Returns the initial capacity of the semispace. |
- int minimum_capacity() { return minimum_capacity_; } |
+ size_t minimum_capacity() { return minimum_capacity_; } |
SemiSpaceId id() { return id_; } |
@@ -2269,14 +2269,14 @@ class SemiSpace : public Space { |
// If we don't have these here then SemiSpace will be abstract. However |
// they should never be called: |
- intptr_t Size() override { |
+ size_t Size() override { |
UNREACHABLE(); |
return 0; |
} |
- intptr_t SizeOfObjects() override { return Size(); } |
+ size_t SizeOfObjects() override { return Size(); } |
- intptr_t Available() override { |
+ size_t Available() override { |
UNREACHABLE(); |
return 0; |
} |
@@ -2305,20 +2305,22 @@ class SemiSpace : public Space { |
void RewindPages(Page* start, int num_pages); |
inline Page* anchor() { return &anchor_; } |
- inline int max_pages() { return current_capacity_ / Page::kPageSize; } |
+ inline int max_pages() { |
+ return static_cast<int>(current_capacity_ / Page::kPageSize); |
+ } |
// 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_; |
+ size_t current_capacity_; |
// The maximum capacity that can be used by this space. A space cannot grow |
// beyond that size. |
- int maximum_capacity_; |
+ size_t maximum_capacity_; |
// The minimum capacity for the space. A space cannot shrink below this size. |
- int minimum_capacity_; |
+ size_t minimum_capacity_; |
// Used to govern object promotion during mark-compact collection. |
Address age_mark_; |
@@ -2379,7 +2381,7 @@ class NewSpace : public Space { |
inline bool ContainsSlow(Address a); |
inline bool Contains(Object* o); |
- bool SetUp(int initial_semispace_capacity, int max_semispace_capacity); |
+ bool SetUp(size_t initial_semispace_capacity, size_t max_semispace_capacity); |
// Tears down the space. Heap memory was not allocated by the space, so it |
// is not deallocated here. |
@@ -2401,15 +2403,16 @@ class NewSpace : public Space { |
void Shrink(); |
// Return the allocated bytes in the active semispace. |
- intptr_t Size() override { |
+ size_t Size() override { |
+ DCHECK_GE(top(), to_space_.page_low()); |
return to_space_.pages_used() * Page::kAllocatableMemory + |
- static_cast<int>(top() - to_space_.page_low()); |
+ static_cast<size_t>(top() - to_space_.page_low()); |
} |
- intptr_t SizeOfObjects() override { return Size(); } |
+ size_t SizeOfObjects() override { return Size(); } |
// Return the allocatable capacity of a semispace. |
- intptr_t Capacity() { |
+ size_t Capacity() { |
SLOW_DCHECK(to_space_.current_capacity() == from_space_.current_capacity()); |
return (to_space_.current_capacity() / Page::kPageSize) * |
Page::kAllocatableMemory; |
@@ -2417,7 +2420,7 @@ class NewSpace : public Space { |
// Return the current size of a semispace, allocatable and non-allocatable |
// memory. |
- intptr_t TotalCapacity() { |
+ size_t TotalCapacity() { |
DCHECK(to_space_.current_capacity() == from_space_.current_capacity()); |
return to_space_.current_capacity(); |
} |
@@ -2437,7 +2440,10 @@ class NewSpace : public Space { |
size_t CommittedPhysicalMemory() override; |
// Return the available bytes without growing. |
- intptr_t Available() override { return Capacity() - Size(); } |
+ size_t Available() override { |
+ DCHECK_GE(Capacity(), Size()); |
+ return Capacity() - Size(); |
+ } |
size_t AllocatedSinceLastGC() { |
bool seen_age_mark = false; |
@@ -2463,17 +2469,18 @@ class NewSpace : public Space { |
// Top was reset at some point, invalidating this metric. |
return 0; |
} |
- intptr_t allocated = age_mark_page->area_end() - age_mark; |
+ DCHECK_GE(age_mark_page->area_end(), age_mark); |
+ size_t allocated = age_mark_page->area_end() - age_mark; |
DCHECK_EQ(current_page, age_mark_page); |
current_page = age_mark_page->next_page(); |
while (current_page != last_page) { |
allocated += Page::kAllocatableMemory; |
current_page = current_page->next_page(); |
} |
+ DCHECK_GE(top(), current_page->area_start()); |
allocated += top() - current_page->area_start(); |
- DCHECK_LE(0, allocated); |
DCHECK_LE(allocated, Size()); |
- return static_cast<size_t>(allocated); |
+ return allocated; |
} |
void MovePageFromSpaceToSpace(Page* page) { |
@@ -2485,7 +2492,7 @@ class NewSpace : public Space { |
bool Rebalance(); |
// Return the maximum capacity of a semispace. |
- int MaximumCapacity() { |
+ size_t MaximumCapacity() { |
DCHECK(to_space_.maximum_capacity() == from_space_.maximum_capacity()); |
return to_space_.maximum_capacity(); |
} |
@@ -2493,7 +2500,7 @@ class NewSpace : public Space { |
bool IsAtMaximumCapacity() { return TotalCapacity() == MaximumCapacity(); } |
// Returns the initial capacity of a semispace. |
- int InitialTotalCapacity() { |
+ size_t InitialTotalCapacity() { |
DCHECK(to_space_.minimum_capacity() == from_space_.minimum_capacity()); |
return to_space_.minimum_capacity(); |
} |
@@ -2785,7 +2792,7 @@ class LargeObjectSpace : public Space { |
// Releases internal resources, frees objects in this space. |
void TearDown(); |
- static intptr_t ObjectSizeFor(intptr_t chunk_size) { |
+ static size_t ObjectSizeFor(size_t chunk_size) { |
if (chunk_size <= (Page::kPageSize + Page::kObjectStartOffset)) return 0; |
return chunk_size - Page::kPageSize - Page::kObjectStartOffset; |
} |
@@ -2796,11 +2803,11 @@ class LargeObjectSpace : public Space { |
AllocateRaw(int object_size, Executability executable); |
// Available bytes for objects in this space. |
- inline intptr_t Available() override; |
+ inline size_t Available() override; |
- intptr_t Size() override { return size_; } |
+ size_t Size() override { return size_; } |
- intptr_t SizeOfObjects() override { return objects_size_; } |
+ size_t SizeOfObjects() override { return objects_size_; } |
// Approximate amount of physical memory committed for this space. |
size_t CommittedPhysicalMemory() override; |
@@ -2858,9 +2865,9 @@ class LargeObjectSpace : public Space { |
private: |
// The head of the linked list of large object chunks. |
LargePage* first_page_; |
- intptr_t size_; // allocated bytes |
+ size_t size_; // allocated bytes |
int page_count_; // number of chunks |
- intptr_t objects_size_; // size of objects |
+ size_t objects_size_; // size of objects |
// Map MemoryChunk::kAlignment-aligned chunks to large pages covering them |
base::HashMap chunk_map_; |