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

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

Issue 652543007: Add support for a target new space size (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 2 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 | Annotate | Revision Log
« 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/base/atomicops.h" 9 #include "src/base/atomicops.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 2057 matching lines...) Expand 10 before | Expand all | Expand 10 after
2068 // Constructor. 2068 // Constructor.
2069 SemiSpace(Heap* heap, SemiSpaceId semispace) 2069 SemiSpace(Heap* heap, SemiSpaceId semispace)
2070 : Space(heap, NEW_SPACE, NOT_EXECUTABLE), 2070 : Space(heap, NEW_SPACE, NOT_EXECUTABLE),
2071 start_(NULL), 2071 start_(NULL),
2072 age_mark_(NULL), 2072 age_mark_(NULL),
2073 id_(semispace), 2073 id_(semispace),
2074 anchor_(this), 2074 anchor_(this),
2075 current_page_(NULL) {} 2075 current_page_(NULL) {}
2076 2076
2077 // Sets up the semispace using the given chunk. 2077 // Sets up the semispace using the given chunk.
2078 void SetUp(Address start, int initial_capacity, int maximum_capacity); 2078 void SetUp(Address start, int initial_capacity, int target_capacity,
2079 int maximum_capacity);
2079 2080
2080 // Tear down the space. Heap memory was not allocated by the space, so it 2081 // Tear down the space. Heap memory was not allocated by the space, so it
2081 // is not deallocated here. 2082 // is not deallocated here.
2082 void TearDown(); 2083 void TearDown();
2083 2084
2084 // True if the space has been set up but not torn down. 2085 // True if the space has been set up but not torn down.
2085 bool HasBeenSetUp() { return start_ != NULL; } 2086 bool HasBeenSetUp() { return start_ != NULL; }
2086 2087
2087 // Grow the semispace to the new capacity. The new capacity 2088 // Grow the semispace to the new capacity. The new capacity
2088 // requested must be larger than the current capacity and less than 2089 // requested must be larger than the current capacity and less than
2089 // the maximum capacity. 2090 // the maximum capacity.
2090 bool GrowTo(int new_capacity); 2091 bool GrowTo(int new_capacity);
2091 2092
2092 // Shrinks the semispace to the new capacity. The new capacity 2093 // Shrinks the semispace to the new capacity. The new capacity
2093 // requested must be more than the amount of used memory in the 2094 // requested must be more than the amount of used memory in the
2094 // semispace and less than the current capacity. 2095 // semispace and less than the current capacity.
2095 bool ShrinkTo(int new_capacity); 2096 bool ShrinkTo(int new_capacity);
2096 2097
2098 // Sets the total capacity. Only possible when the space is not committed.
2099 bool SetTotalCapacity(int new_capacity);
2100
2097 // Returns the start address of the first page of the space. 2101 // Returns the start address of the first page of the space.
2098 Address space_start() { 2102 Address space_start() {
2099 DCHECK(anchor_.next_page() != &anchor_); 2103 DCHECK(anchor_.next_page() != &anchor_);
2100 return anchor_.next_page()->area_start(); 2104 return anchor_.next_page()->area_start();
2101 } 2105 }
2102 2106
2103 // Returns the start address of the current page of the space. 2107 // Returns the start address of the current page of the space.
2104 Address page_low() { return current_page_->area_start(); } 2108 Address page_low() { return current_page_->area_start(); }
2105 2109
2106 // Returns one past the end address of the space. 2110 // Returns one past the end address of the space.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2161 // in the linked page order, or it must be earlier on the same page. 2165 // in the linked page order, or it must be earlier on the same page.
2162 static void AssertValidRange(Address from, Address to); 2166 static void AssertValidRange(Address from, Address to);
2163 #else 2167 #else
2164 // Do nothing. 2168 // Do nothing.
2165 inline static void AssertValidRange(Address from, Address to) {} 2169 inline static void AssertValidRange(Address from, Address to) {}
2166 #endif 2170 #endif
2167 2171
2168 // Returns the current total capacity of the semispace. 2172 // Returns the current total capacity of the semispace.
2169 int TotalCapacity() { return total_capacity_; } 2173 int TotalCapacity() { return total_capacity_; }
2170 2174
2175 // Returns the target for total capacity of the semispace.
2176 int TargetCapacity() { return target_capacity_; }
2177
2171 // Returns the maximum total capacity of the semispace. 2178 // Returns the maximum total capacity of the semispace.
2172 int MaximumTotalCapacity() { return maximum_total_capacity_; } 2179 int MaximumTotalCapacity() { return maximum_total_capacity_; }
2173 2180
2174 // Returns the initial capacity of the semispace. 2181 // Returns the initial capacity of the semispace.
2175 int InitialTotalCapacity() { return initial_total_capacity_; } 2182 int InitialTotalCapacity() { return initial_total_capacity_; }
2176 2183
2177 SemiSpaceId id() { return id_; } 2184 SemiSpaceId id() { return id_; }
2178 2185
2179 static void Swap(SemiSpace* from, SemiSpace* to); 2186 static void Swap(SemiSpace* from, SemiSpace* to);
2180 2187
2181 // Returns the maximum amount of memory ever committed by the semi space. 2188 // Returns the maximum amount of memory ever committed by the semi space.
2182 size_t MaximumCommittedMemory() { return maximum_committed_; } 2189 size_t MaximumCommittedMemory() { return maximum_committed_; }
2183 2190
2184 // Approximate amount of physical memory committed for this space. 2191 // Approximate amount of physical memory committed for this space.
2185 size_t CommittedPhysicalMemory(); 2192 size_t CommittedPhysicalMemory();
2186 2193
2187 private: 2194 private:
2188 // Flips the semispace between being from-space and to-space. 2195 // Flips the semispace between being from-space and to-space.
2189 // Copies the flags into the masked positions on all pages in the space. 2196 // Copies the flags into the masked positions on all pages in the space.
2190 void FlipPages(intptr_t flags, intptr_t flag_mask); 2197 void FlipPages(intptr_t flags, intptr_t flag_mask);
2191 2198
2192 // Updates Capacity and MaximumCommitted based on new capacity. 2199 // Updates Capacity and MaximumCommitted based on new capacity.
2193 void SetCapacity(int new_capacity); 2200 void SetCapacity(int new_capacity);
2194 2201
2195 NewSpacePage* anchor() { return &anchor_; } 2202 NewSpacePage* anchor() { return &anchor_; }
2196 2203
2197 // The current and maximum total capacity of the space. 2204 // The current and maximum total capacity of the space.
2198 int total_capacity_; 2205 int total_capacity_;
2206 int target_capacity_;
2199 int maximum_total_capacity_; 2207 int maximum_total_capacity_;
2200 int initial_total_capacity_; 2208 int initial_total_capacity_;
2201 2209
2202 intptr_t maximum_committed_; 2210 intptr_t maximum_committed_;
2203 2211
2204 // The start address of the space. 2212 // The start address of the space.
2205 Address start_; 2213 Address start_;
2206 // Used to govern object promotion during mark-compact collection. 2214 // Used to govern object promotion during mark-compact collection.
2207 Address age_mark_; 2215 Address age_mark_;
2208 2216
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
2334 return to_space_.HasBeenSetUp() && from_space_.HasBeenSetUp(); 2342 return to_space_.HasBeenSetUp() && from_space_.HasBeenSetUp();
2335 } 2343 }
2336 2344
2337 // Flip the pair of spaces. 2345 // Flip the pair of spaces.
2338 void Flip(); 2346 void Flip();
2339 2347
2340 // Grow the capacity of the semispaces. Assumes that they are not at 2348 // Grow the capacity of the semispaces. Assumes that they are not at
2341 // their maximum capacity. 2349 // their maximum capacity.
2342 void Grow(); 2350 void Grow();
2343 2351
2352 // Grow the capacity of the semispaces by one page.
2353 bool GrowOnePage();
2354
2344 // Shrink the capacity of the semispaces. 2355 // Shrink the capacity of the semispaces.
2345 void Shrink(); 2356 void Shrink();
2346 2357
2347 // True if the address or object lies in the address range of either 2358 // True if the address or object lies in the address range of either
2348 // semispace (not necessarily below the allocation pointer). 2359 // semispace (not necessarily below the allocation pointer).
2349 bool Contains(Address a) { 2360 bool Contains(Address a) {
2350 return (reinterpret_cast<uintptr_t>(a) & address_mask_) == 2361 return (reinterpret_cast<uintptr_t>(a) & address_mask_) ==
2351 reinterpret_cast<uintptr_t>(start_); 2362 reinterpret_cast<uintptr_t>(start_);
2352 } 2363 }
2353 2364
(...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
2883 count = 0; 2894 count = 0;
2884 } 2895 }
2885 // Must be small, since an iteration is used for lookup. 2896 // Must be small, since an iteration is used for lookup.
2886 static const int kMaxComments = 64; 2897 static const int kMaxComments = 64;
2887 }; 2898 };
2888 #endif 2899 #endif
2889 } 2900 }
2890 } // namespace v8::internal 2901 } // namespace v8::internal
2891 2902
2892 #endif // V8_HEAP_SPACES_H_ 2903 #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