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

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

Issue 2088223002: [heap] Modernize all *Page iterators to be proper C++ iterators (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Unify w/ LargePageIterator Created 4 years, 6 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
« no previous file with comments | « src/heap/remembered-set.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 9
10 #include "src/allocation.h" 10 #include "src/allocation.h"
(...skipping 1602 matching lines...) Expand 10 before | Expand all | Expand 10 after
1613 // iteration has ended. 1613 // iteration has ended.
1614 bool AdvanceToNextPage(); 1614 bool AdvanceToNextPage();
1615 1615
1616 // Initializes fields. 1616 // Initializes fields.
1617 inline void Initialize(PagedSpace* owner, Address start, Address end, 1617 inline void Initialize(PagedSpace* owner, Address start, Address end,
1618 PageMode mode); 1618 PageMode mode);
1619 }; 1619 };
1620 1620
1621 1621
1622 // ----------------------------------------------------------------------------- 1622 // -----------------------------------------------------------------------------
1623 // A PageIterator iterates the pages in a paged space.
1624
1625 class PageIterator BASE_EMBEDDED {
1626 public:
1627 explicit inline PageIterator(PagedSpace* space);
1628
1629 inline bool has_next();
1630 inline Page* next();
1631
1632 private:
1633 PagedSpace* space_;
1634 Page* prev_page_; // Previous page returned.
1635 // Next page that will be returned. Cached here so that we can use this
1636 // iterator for operations that deallocate pages.
1637 Page* next_page_;
1638 };
1639
1640
1641 // -----------------------------------------------------------------------------
1642 // A space has a circular list of pages. The next page can be accessed via 1623 // A space has a circular list of pages. The next page can be accessed via
1643 // Page::next_page() call. 1624 // Page::next_page() call.
1644 1625
1645 // An abstraction of allocation and relocation pointers in a page-structured 1626 // An abstraction of allocation and relocation pointers in a page-structured
1646 // space. 1627 // space.
1647 class AllocationInfo { 1628 class AllocationInfo {
1648 public: 1629 public:
1649 AllocationInfo() : top_(nullptr), limit_(nullptr) {} 1630 AllocationInfo() : top_(nullptr), limit_(nullptr) {}
1650 AllocationInfo(Address top, Address limit) : top_(top), limit_(limit) {} 1631 AllocationInfo(Address top, Address limit) : top_(top), limit_(limit) {}
1651 1632
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
2079 2060
2080 private: 2061 private:
2081 LocalAllocationBuffer(Heap* heap, AllocationInfo allocation_info); 2062 LocalAllocationBuffer(Heap* heap, AllocationInfo allocation_info);
2082 2063
2083 void Close(); 2064 void Close();
2084 2065
2085 Heap* heap_; 2066 Heap* heap_;
2086 AllocationInfo allocation_info_; 2067 AllocationInfo allocation_info_;
2087 }; 2068 };
2088 2069
2070 template <class PAGE_TYPE>
2071 class PageIteratorImpl
2072 : public std::iterator<std::forward_iterator_tag, PAGE_TYPE> {
2073 public:
2074 explicit PageIteratorImpl(PAGE_TYPE* p) : p_(p) {}
2075 PageIteratorImpl(const PageIteratorImpl<PAGE_TYPE>& other) : p_(other.p_) {}
2076 PAGE_TYPE* operator*() { return p_; }
2077 bool operator==(const PageIteratorImpl<PAGE_TYPE>& rhs) {
2078 return rhs.p_ == p_;
2079 }
2080 bool operator!=(const PageIteratorImpl<PAGE_TYPE>& rhs) {
2081 return rhs.p_ != p_;
2082 }
2083 inline PageIteratorImpl<PAGE_TYPE>& operator++();
2084 inline PageIteratorImpl<PAGE_TYPE> operator++(int);
2085
2086 private:
2087 PAGE_TYPE* p_;
2088 };
2089
2090 typedef PageIteratorImpl<Page> PageIterator;
2091 typedef PageIteratorImpl<LargePage> LargePageIterator;
2092
2093 class NewSpacePageRange {
2094 public:
2095 typedef PageIterator iterator;
2096
2097 inline NewSpacePageRange(Address start, Address limit);
2098
2099 iterator begin() { return iterator(Page::FromAddress(start_)); }
2100 iterator end() {
2101 return iterator(Page::FromAllocationAreaAddress(limit_)->next_page());
2102 }
2103
2104 private:
2105 Address start_;
2106 Address limit_;
2107 };
2108
2089 class PagedSpace : public Space { 2109 class PagedSpace : public Space {
2090 public: 2110 public:
2111 typedef PageIterator iterator;
2112
2091 static const intptr_t kCompactionMemoryWanted = 500 * KB; 2113 static const intptr_t kCompactionMemoryWanted = 500 * KB;
2092 2114
2093 // Creates a space with an id. 2115 // Creates a space with an id.
2094 PagedSpace(Heap* heap, AllocationSpace id, Executability executable); 2116 PagedSpace(Heap* heap, AllocationSpace id, Executability executable);
2095 2117
2096 ~PagedSpace() override { TearDown(); } 2118 ~PagedSpace() override { TearDown(); }
2097 2119
2098 // Set up the space using the given address range of virtual memory (from 2120 // Set up the space using the given address range of virtual memory (from
2099 // the memory allocator's initial chunk) if possible. If the block of 2121 // the memory allocator's initial chunk) if possible. If the block of
2100 // addresses is not big enough to contain a single page-aligned page, a 2122 // addresses is not big enough to contain a single page-aligned page, a
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
2289 // sweeper. 2311 // sweeper.
2290 virtual void RefillFreeList(); 2312 virtual void RefillFreeList();
2291 2313
2292 FreeList* free_list() { return &free_list_; } 2314 FreeList* free_list() { return &free_list_; }
2293 2315
2294 base::Mutex* mutex() { return &space_mutex_; } 2316 base::Mutex* mutex() { return &space_mutex_; }
2295 2317
2296 inline void UnlinkFreeListCategories(Page* page); 2318 inline void UnlinkFreeListCategories(Page* page);
2297 inline intptr_t RelinkFreeListCategories(Page* page); 2319 inline intptr_t RelinkFreeListCategories(Page* page);
2298 2320
2321 iterator begin() { return iterator(anchor_.next_page()); }
2322 iterator end() { return iterator(&anchor_); }
2323
2299 protected: 2324 protected:
2300 // PagedSpaces that should be included in snapshots have different, i.e., 2325 // PagedSpaces that should be included in snapshots have different, i.e.,
2301 // smaller, initial pages. 2326 // smaller, initial pages.
2302 virtual bool snapshotable() { return true; } 2327 virtual bool snapshotable() { return true; }
2303 2328
2304 bool HasPages() { return anchor_.next_page() != &anchor_; } 2329 bool HasPages() { return anchor_.next_page() != &anchor_; }
2305 2330
2306 // Cleans up the space, frees all pages in this space except those belonging 2331 // Cleans up the space, frees all pages in this space except those belonging
2307 // to the initial chunk, uncommits addresses in the initial chunk. 2332 // to the initial chunk, uncommits addresses in the initial chunk.
2308 void TearDown(); 2333 void TearDown();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2343 FreeList free_list_; 2368 FreeList free_list_;
2344 2369
2345 // Normal allocation information. 2370 // Normal allocation information.
2346 AllocationInfo allocation_info_; 2371 AllocationInfo allocation_info_;
2347 2372
2348 // Mutex guarding any concurrent access to the space. 2373 // Mutex guarding any concurrent access to the space.
2349 base::Mutex space_mutex_; 2374 base::Mutex space_mutex_;
2350 2375
2351 friend class IncrementalMarking; 2376 friend class IncrementalMarking;
2352 friend class MarkCompactCollector; 2377 friend class MarkCompactCollector;
2353 friend class PageIterator;
2354 2378
2355 // Used in cctest. 2379 // Used in cctest.
2356 friend class HeapTester; 2380 friend class HeapTester;
2357 }; 2381 };
2358 2382
2359 2383
2360 class NumberAndSizeInfo BASE_EMBEDDED { 2384 class NumberAndSizeInfo BASE_EMBEDDED {
2361 public: 2385 public:
2362 NumberAndSizeInfo() : number_(0), bytes_(0) {} 2386 NumberAndSizeInfo() : number_(0), bytes_(0) {}
2363 2387
(...skipping 30 matching lines...) Expand all
2394 enum SemiSpaceId { kFromSpace = 0, kToSpace = 1 }; 2418 enum SemiSpaceId { kFromSpace = 0, kToSpace = 1 };
2395 2419
2396 // ----------------------------------------------------------------------------- 2420 // -----------------------------------------------------------------------------
2397 // SemiSpace in young generation 2421 // SemiSpace in young generation
2398 // 2422 //
2399 // A SemiSpace is a contiguous chunk of memory holding page-like memory chunks. 2423 // A SemiSpace is a contiguous chunk of memory holding page-like memory chunks.
2400 // The mark-compact collector uses the memory of the first page in the from 2424 // The mark-compact collector uses the memory of the first page in the from
2401 // space as a marking stack when tracing live objects. 2425 // space as a marking stack when tracing live objects.
2402 class SemiSpace : public Space { 2426 class SemiSpace : public Space {
2403 public: 2427 public:
2428 typedef PageIterator iterator;
2429
2404 static void Swap(SemiSpace* from, SemiSpace* to); 2430 static void Swap(SemiSpace* from, SemiSpace* to);
2405 2431
2406 SemiSpace(Heap* heap, SemiSpaceId semispace) 2432 SemiSpace(Heap* heap, SemiSpaceId semispace)
2407 : Space(heap, NEW_SPACE, NOT_EXECUTABLE), 2433 : Space(heap, NEW_SPACE, NOT_EXECUTABLE),
2408 current_capacity_(0), 2434 current_capacity_(0),
2409 maximum_capacity_(0), 2435 maximum_capacity_(0),
2410 minimum_capacity_(0), 2436 minimum_capacity_(0),
2411 age_mark_(nullptr), 2437 age_mark_(nullptr),
2412 committed_(false), 2438 committed_(false),
2413 id_(semispace), 2439 id_(semispace),
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
2518 static void AssertValidRange(Address from, Address to); 2544 static void AssertValidRange(Address from, Address to);
2519 #else 2545 #else
2520 // Do nothing. 2546 // Do nothing.
2521 inline static void AssertValidRange(Address from, Address to) {} 2547 inline static void AssertValidRange(Address from, Address to) {}
2522 #endif 2548 #endif
2523 2549
2524 #ifdef VERIFY_HEAP 2550 #ifdef VERIFY_HEAP
2525 virtual void Verify(); 2551 virtual void Verify();
2526 #endif 2552 #endif
2527 2553
2554 iterator begin() { return iterator(anchor_.next_page()); }
2555 iterator end() { return iterator(anchor()); }
2556
2528 private: 2557 private:
2529 void RewindPages(Page* start, int num_pages); 2558 void RewindPages(Page* start, int num_pages);
2530 2559
2531 inline Page* anchor() { return &anchor_; } 2560 inline Page* anchor() { return &anchor_; }
2532 inline int max_pages() { return current_capacity_ / Page::kPageSize; } 2561 inline int max_pages() { return current_capacity_ / Page::kPageSize; }
2533 2562
2534 // Copies the flags into the masked positions on all pages in the space. 2563 // Copies the flags into the masked positions on all pages in the space.
2535 void FixPagesFlags(intptr_t flags, intptr_t flag_mask); 2564 void FixPagesFlags(intptr_t flags, intptr_t flag_mask);
2536 2565
2537 // The currently committed space capacity. 2566 // The currently committed space capacity.
(...skipping 10 matching lines...) Expand all
2548 Address age_mark_; 2577 Address age_mark_;
2549 2578
2550 bool committed_; 2579 bool committed_;
2551 SemiSpaceId id_; 2580 SemiSpaceId id_;
2552 2581
2553 Page anchor_; 2582 Page anchor_;
2554 Page* current_page_; 2583 Page* current_page_;
2555 int pages_used_; 2584 int pages_used_;
2556 2585
2557 friend class NewSpace; 2586 friend class NewSpace;
2558 friend class NewSpacePageIterator;
2559 friend class SemiSpaceIterator; 2587 friend class SemiSpaceIterator;
2560 }; 2588 };
2561 2589
2562 2590
2563 // A SemiSpaceIterator is an ObjectIterator that iterates over the active 2591 // A SemiSpaceIterator is an ObjectIterator that iterates over the active
2564 // semispace of the heap's new space. It iterates over the objects in the 2592 // semispace of the heap's new space. It iterates over the objects in the
2565 // semispace from a given start address (defaulting to the bottom of the 2593 // semispace from a given start address (defaulting to the bottom of the
2566 // semispace) to the top of the semispace. New objects allocated after the 2594 // semispace) to the top of the semispace. New objects allocated after the
2567 // iterator is created are not iterated. 2595 // iterator is created are not iterated.
2568 class SemiSpaceIterator : public ObjectIterator { 2596 class SemiSpaceIterator : public ObjectIterator {
2569 public: 2597 public:
2570 // Create an iterator over the allocated objects in the given to-space. 2598 // Create an iterator over the allocated objects in the given to-space.
2571 explicit SemiSpaceIterator(NewSpace* space); 2599 explicit SemiSpaceIterator(NewSpace* space);
2572 2600
2573 inline HeapObject* Next(); 2601 inline HeapObject* Next();
2574 2602
2575 // Implementation of the ObjectIterator functions. 2603 // Implementation of the ObjectIterator functions.
2576 inline HeapObject* next_object() override; 2604 inline HeapObject* next_object() override;
2577 2605
2578 private: 2606 private:
2579 void Initialize(Address start, Address end); 2607 void Initialize(Address start, Address end);
2580 2608
2581 // The current iteration point. 2609 // The current iteration point.
2582 Address current_; 2610 Address current_;
2583 // The end of iteration. 2611 // The end of iteration.
2584 Address limit_; 2612 Address limit_;
2585 }; 2613 };
2586 2614
2587
2588 // -----------------------------------------------------------------------------
2589 // A PageIterator iterates the pages in a semi-space.
2590 class NewSpacePageIterator BASE_EMBEDDED {
2591 public:
2592 // Make an iterator that runs over all pages in to-space.
2593 explicit inline NewSpacePageIterator(NewSpace* space);
2594
2595 // Make an iterator that runs over all pages in the given semispace,
2596 // even those not used in allocation.
2597 explicit inline NewSpacePageIterator(SemiSpace* space);
2598
2599 // Make iterator that iterates from the page containing start
2600 // to the page that contains limit in the same semispace.
2601 inline NewSpacePageIterator(Address start, Address limit);
2602
2603 inline bool has_next();
2604 inline Page* next();
2605
2606 private:
2607 Page* prev_page_; // Previous page returned.
2608 // Next page that will be returned. Cached here so that we can use this
2609 // iterator for operations that deallocate pages.
2610 Page* next_page_;
2611 // Last page returned.
2612 Page* last_page_;
2613 };
2614
2615
2616 // ----------------------------------------------------------------------------- 2615 // -----------------------------------------------------------------------------
2617 // The young generation space. 2616 // The young generation space.
2618 // 2617 //
2619 // The new space consists of a contiguous pair of semispaces. It simply 2618 // The new space consists of a contiguous pair of semispaces. It simply
2620 // forwards most functions to the appropriate semispace. 2619 // forwards most functions to the appropriate semispace.
2621 2620
2622 class NewSpace : public Space { 2621 class NewSpace : public Space {
2623 public: 2622 public:
2623 typedef PageIterator iterator;
2624
2624 explicit NewSpace(Heap* heap) 2625 explicit NewSpace(Heap* heap)
2625 : Space(heap, NEW_SPACE, NOT_EXECUTABLE), 2626 : Space(heap, NEW_SPACE, NOT_EXECUTABLE),
2626 to_space_(heap, kToSpace), 2627 to_space_(heap, kToSpace),
2627 from_space_(heap, kFromSpace), 2628 from_space_(heap, kFromSpace),
2628 reservation_(), 2629 reservation_(),
2629 top_on_previous_step_(0), 2630 top_on_previous_step_(0),
2630 allocated_histogram_(nullptr), 2631 allocated_histogram_(nullptr),
2631 promoted_histogram_(nullptr) {} 2632 promoted_histogram_(nullptr) {}
2632 2633
2633 inline bool Contains(HeapObject* o); 2634 inline bool Contains(HeapObject* o);
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
2877 return from_space_.Uncommit(); 2878 return from_space_.Uncommit();
2878 } 2879 }
2879 2880
2880 bool IsFromSpaceCommitted() { return from_space_.is_committed(); } 2881 bool IsFromSpaceCommitted() { return from_space_.is_committed(); }
2881 2882
2882 SemiSpace* active_space() { return &to_space_; } 2883 SemiSpace* active_space() { return &to_space_; }
2883 2884
2884 void PauseAllocationObservers() override; 2885 void PauseAllocationObservers() override;
2885 void ResumeAllocationObservers() override; 2886 void ResumeAllocationObservers() override;
2886 2887
2888 iterator begin() { return to_space_.begin(); }
2889 iterator end() { return to_space_.end(); }
2890
2887 private: 2891 private:
2888 // Update allocation info to match the current to-space page. 2892 // Update allocation info to match the current to-space page.
2889 void UpdateAllocationInfo(); 2893 void UpdateAllocationInfo();
2890 2894
2891 base::Mutex mutex_; 2895 base::Mutex mutex_;
2892 2896
2893 // The semispaces. 2897 // The semispaces.
2894 SemiSpace to_space_; 2898 SemiSpace to_space_;
2895 SemiSpace from_space_; 2899 SemiSpace from_space_;
2896 base::VirtualMemory reservation_; 2900 base::VirtualMemory reservation_;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
3020 3024
3021 // ----------------------------------------------------------------------------- 3025 // -----------------------------------------------------------------------------
3022 // Large objects ( > Page::kMaxRegularHeapObjectSize ) are allocated and 3026 // Large objects ( > Page::kMaxRegularHeapObjectSize ) are allocated and
3023 // managed by the large object space. A large object is allocated from OS 3027 // managed by the large object space. A large object is allocated from OS
3024 // heap with extra padding bytes (Page::kPageSize + Page::kObjectStartOffset). 3028 // heap with extra padding bytes (Page::kPageSize + Page::kObjectStartOffset).
3025 // A large object always starts at Page::kObjectStartOffset to a page. 3029 // A large object always starts at Page::kObjectStartOffset to a page.
3026 // Large objects do not move during garbage collections. 3030 // Large objects do not move during garbage collections.
3027 3031
3028 class LargeObjectSpace : public Space { 3032 class LargeObjectSpace : public Space {
3029 public: 3033 public:
3034 typedef LargePageIterator iterator;
3035
3030 LargeObjectSpace(Heap* heap, AllocationSpace id); 3036 LargeObjectSpace(Heap* heap, AllocationSpace id);
3031 virtual ~LargeObjectSpace(); 3037 virtual ~LargeObjectSpace();
3032 3038
3033 // Initializes internal data structures. 3039 // Initializes internal data structures.
3034 bool SetUp(); 3040 bool SetUp();
3035 3041
3036 // Releases internal resources, frees objects in this space. 3042 // Releases internal resources, frees objects in this space.
3037 void TearDown(); 3043 void TearDown();
3038 3044
3039 static intptr_t ObjectSizeFor(intptr_t chunk_size) { 3045 static intptr_t ObjectSizeFor(intptr_t chunk_size) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3081 // Checks whether the space is empty. 3087 // Checks whether the space is empty.
3082 bool IsEmpty() { return first_page_ == NULL; } 3088 bool IsEmpty() { return first_page_ == NULL; }
3083 3089
3084 void AdjustLiveBytes(int by) { objects_size_ += by; } 3090 void AdjustLiveBytes(int by) { objects_size_ += by; }
3085 3091
3086 LargePage* first_page() { return first_page_; } 3092 LargePage* first_page() { return first_page_; }
3087 3093
3088 // Collect code statistics. 3094 // Collect code statistics.
3089 void CollectCodeStatistics(); 3095 void CollectCodeStatistics();
3090 3096
3097 iterator begin() { return iterator(first_page_); }
3098 iterator end() { return iterator(nullptr); }
3099
3091 #ifdef VERIFY_HEAP 3100 #ifdef VERIFY_HEAP
3092 virtual void Verify(); 3101 virtual void Verify();
3093 #endif 3102 #endif
3094 3103
3095 #ifdef DEBUG 3104 #ifdef DEBUG
3096 void Print() override; 3105 void Print() override;
3097 void ReportStatistics(); 3106 void ReportStatistics();
3098 #endif 3107 #endif
3099 3108
3100 private: 3109 private:
(...skipping 15 matching lines...) Expand all
3116 3125
3117 HeapObject* Next(); 3126 HeapObject* Next();
3118 3127
3119 // implementation of ObjectIterator. 3128 // implementation of ObjectIterator.
3120 virtual HeapObject* next_object() { return Next(); } 3129 virtual HeapObject* next_object() { return Next(); }
3121 3130
3122 private: 3131 private:
3123 LargePage* current_; 3132 LargePage* current_;
3124 }; 3133 };
3125 3134
3126 class LargePageIterator BASE_EMBEDDED {
3127 public:
3128 explicit inline LargePageIterator(LargeObjectSpace* space);
3129
3130 inline LargePage* next();
3131
3132 private:
3133 LargePage* next_page_;
3134 };
3135
3136 // Iterates over the chunks (pages and large object pages) that can contain 3135 // Iterates over the chunks (pages and large object pages) that can contain
3137 // pointers to new space or to evacuation candidates. 3136 // pointers to new space or to evacuation candidates.
3138 class MemoryChunkIterator BASE_EMBEDDED { 3137 class MemoryChunkIterator BASE_EMBEDDED {
3139 public: 3138 public:
3140 inline explicit MemoryChunkIterator(Heap* heap); 3139 inline explicit MemoryChunkIterator(Heap* heap);
3141 3140
3142 // Return NULL when the iterator is done. 3141 // Return NULL when the iterator is done.
3143 inline MemoryChunk* next(); 3142 inline MemoryChunk* next();
3144 3143
3145 private: 3144 private:
3146 enum State { 3145 enum State {
3147 kOldSpaceState, 3146 kOldSpaceState,
3148 kMapState, 3147 kMapState,
3149 kCodeState, 3148 kCodeState,
3150 kLargeObjectState, 3149 kLargeObjectState,
3151 kFinishedState 3150 kFinishedState
3152 }; 3151 };
3152 Heap* heap_;
3153 State state_; 3153 State state_;
3154 PageIterator old_iterator_; 3154 PageIterator old_iterator_;
3155 PageIterator code_iterator_; 3155 PageIterator code_iterator_;
3156 PageIterator map_iterator_; 3156 PageIterator map_iterator_;
3157 LargePageIterator lo_iterator_; 3157 LargePageIterator lo_iterator_;
3158 }; 3158 };
3159 3159
3160 #ifdef DEBUG 3160 #ifdef DEBUG
3161 struct CommentStatistic { 3161 struct CommentStatistic {
3162 const char* comment; 3162 const char* comment;
3163 int size; 3163 int size;
3164 int count; 3164 int count;
3165 void Clear() { 3165 void Clear() {
3166 comment = NULL; 3166 comment = NULL;
3167 size = 0; 3167 size = 0;
3168 count = 0; 3168 count = 0;
3169 } 3169 }
3170 // Must be small, since an iteration is used for lookup. 3170 // Must be small, since an iteration is used for lookup.
3171 static const int kMaxComments = 64; 3171 static const int kMaxComments = 64;
3172 }; 3172 };
3173 #endif 3173 #endif
3174 } // namespace internal 3174 } // namespace internal
3175 } // namespace v8 3175 } // namespace v8
3176 3176
3177 #endif // V8_HEAP_SPACES_H_ 3177 #endif // V8_HEAP_SPACES_H_
OLDNEW
« no previous file with comments | « src/heap/remembered-set.cc ('k') | src/heap/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698