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

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

Issue 2003553002: [heap] Introduce a new remembered set for typed pointers from old to new. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 7 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
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 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 + kPointerSize // Address owner_ 502 + kPointerSize // Address owner_
503 + kPointerSize // Heap* heap_ 503 + kPointerSize // Heap* heap_
504 + kIntSize; // int progress_bar_ 504 + kIntSize; // int progress_bar_
505 505
506 static const size_t kOldToNewSlotsOffset = 506 static const size_t kOldToNewSlotsOffset =
507 kLiveBytesOffset + kIntSize; // int live_byte_count_ 507 kLiveBytesOffset + kIntSize; // int live_byte_count_
508 508
509 static const size_t kWriteBarrierCounterOffset = 509 static const size_t kWriteBarrierCounterOffset =
510 kOldToNewSlotsOffset + kPointerSize // SlotSet* old_to_new_slots_; 510 kOldToNewSlotsOffset + kPointerSize // SlotSet* old_to_new_slots_;
511 + kPointerSize // SlotSet* old_to_old_slots_; 511 + kPointerSize // SlotSet* old_to_old_slots_;
512 + kPointerSize // TypedSlotSet* typed_old_to_new_slots_;
512 + kPointerSize // TypedSlotSet* typed_old_to_old_slots_; 513 + kPointerSize // TypedSlotSet* typed_old_to_old_slots_;
513 + kPointerSize; // SkipList* skip_list_; 514 + kPointerSize; // SkipList* skip_list_;
514 515
515 static const size_t kMinHeaderSize = 516 static const size_t kMinHeaderSize =
516 kWriteBarrierCounterOffset + 517 kWriteBarrierCounterOffset +
517 kIntptrSize // intptr_t write_barrier_counter_ 518 kIntptrSize // intptr_t write_barrier_counter_
518 + kPointerSize // AtomicValue high_water_mark_ 519 + kPointerSize // AtomicValue high_water_mark_
519 + kPointerSize // base::Mutex* mutex_ 520 + kPointerSize // base::Mutex* mutex_
520 + kPointerSize // base::AtomicWord concurrent_sweeping_ 521 + kPointerSize // base::AtomicWord concurrent_sweeping_
521 + 2 * kPointerSize // AtomicNumber free-list statistics 522 + 2 * kPointerSize // AtomicNumber free-list statistics
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 size_t size() const { return size_; } 619 size_t size() const { return size_; }
619 620
620 inline Heap* heap() const { return heap_; } 621 inline Heap* heap() const { return heap_; }
621 622
622 inline SkipList* skip_list() { return skip_list_; } 623 inline SkipList* skip_list() { return skip_list_; }
623 624
624 inline void set_skip_list(SkipList* skip_list) { skip_list_ = skip_list; } 625 inline void set_skip_list(SkipList* skip_list) { skip_list_ = skip_list; }
625 626
626 inline SlotSet* old_to_new_slots() { return old_to_new_slots_; } 627 inline SlotSet* old_to_new_slots() { return old_to_new_slots_; }
627 inline SlotSet* old_to_old_slots() { return old_to_old_slots_; } 628 inline SlotSet* old_to_old_slots() { return old_to_old_slots_; }
629 inline TypedSlotSet* typed_old_to_new_slots() {
630 return typed_old_to_new_slots_;
631 }
628 inline TypedSlotSet* typed_old_to_old_slots() { 632 inline TypedSlotSet* typed_old_to_old_slots() {
629 return typed_old_to_old_slots_; 633 return typed_old_to_old_slots_;
630 } 634 }
631 635
632 void AllocateOldToNewSlots(); 636 void AllocateOldToNewSlots();
633 void ReleaseOldToNewSlots(); 637 void ReleaseOldToNewSlots();
634 void AllocateOldToOldSlots(); 638 void AllocateOldToOldSlots();
635 void ReleaseOldToOldSlots(); 639 void ReleaseOldToOldSlots();
640 void AllocateTypedOldToNewSlots();
641 void ReleaseTypedOldToNewSlots();
636 void AllocateTypedOldToOldSlots(); 642 void AllocateTypedOldToOldSlots();
637 void ReleaseTypedOldToOldSlots(); 643 void ReleaseTypedOldToOldSlots();
638 644
639 Address area_start() { return area_start_; } 645 Address area_start() { return area_start_; }
640 Address area_end() { return area_end_; } 646 Address area_end() { return area_end_; }
641 int area_size() { return static_cast<int>(area_end() - area_start()); } 647 int area_size() { return static_cast<int>(area_end() - area_start()); }
642 648
643 bool CommitArea(size_t requested); 649 bool CommitArea(size_t requested);
644 650
645 // Approximate amount of physical memory committed for this chunk. 651 // Approximate amount of physical memory committed for this chunk.
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 int progress_bar_; 791 int progress_bar_;
786 792
787 // Count of bytes marked black on page. 793 // Count of bytes marked black on page.
788 int live_byte_count_; 794 int live_byte_count_;
789 795
790 // A single slot set for small pages (of size kPageSize) or an array of slot 796 // A single slot set for small pages (of size kPageSize) or an array of slot
791 // set for large pages. In the latter case the number of entries in the array 797 // set for large pages. In the latter case the number of entries in the array
792 // is ceil(size() / kPageSize). 798 // is ceil(size() / kPageSize).
793 SlotSet* old_to_new_slots_; 799 SlotSet* old_to_new_slots_;
794 SlotSet* old_to_old_slots_; 800 SlotSet* old_to_old_slots_;
801 TypedSlotSet* typed_old_to_new_slots_;
795 TypedSlotSet* typed_old_to_old_slots_; 802 TypedSlotSet* typed_old_to_old_slots_;
796 803
797 SkipList* skip_list_; 804 SkipList* skip_list_;
798 805
799 intptr_t write_barrier_counter_; 806 intptr_t write_barrier_counter_;
800 807
801 // Assuming the initial allocation on a page is sequential, 808 // Assuming the initial allocation on a page is sequential,
802 // count highest number of bytes ever allocated on the page. 809 // count highest number of bytes ever allocated on the page.
803 base::AtomicValue<intptr_t> high_water_mark_; 810 base::AtomicValue<intptr_t> high_water_mark_;
804 811
(...skipping 2299 matching lines...) Expand 10 before | Expand all | Expand 10 after
3104 inline LargePage* next(); 3111 inline LargePage* next();
3105 3112
3106 private: 3113 private:
3107 LargePage* next_page_; 3114 LargePage* next_page_;
3108 }; 3115 };
3109 3116
3110 // Iterates over the chunks (pages and large object pages) that can contain 3117 // Iterates over the chunks (pages and large object pages) that can contain
3111 // pointers to new space or to evacuation candidates. 3118 // pointers to new space or to evacuation candidates.
3112 class MemoryChunkIterator BASE_EMBEDDED { 3119 class MemoryChunkIterator BASE_EMBEDDED {
3113 public: 3120 public:
3114 enum Mode { ALL, ALL_BUT_MAP_SPACE, ALL_BUT_CODE_SPACE }; 3121 inline explicit MemoryChunkIterator(Heap* heap);
3115 inline explicit MemoryChunkIterator(Heap* heap, Mode mode);
3116 3122
3117 // Return NULL when the iterator is done. 3123 // Return NULL when the iterator is done.
3118 inline MemoryChunk* next(); 3124 inline MemoryChunk* next();
3119 3125
3120 private: 3126 private:
3121 enum State { 3127 enum State {
3122 kOldSpaceState, 3128 kOldSpaceState,
3123 kMapState, 3129 kMapState,
3124 kCodeState, 3130 kCodeState,
3125 kLargeObjectState, 3131 kLargeObjectState,
3126 kFinishedState 3132 kFinishedState
3127 }; 3133 };
3128 State state_; 3134 State state_;
3129 const Mode mode_;
3130 PageIterator old_iterator_; 3135 PageIterator old_iterator_;
3131 PageIterator code_iterator_; 3136 PageIterator code_iterator_;
3132 PageIterator map_iterator_; 3137 PageIterator map_iterator_;
3133 LargePageIterator lo_iterator_; 3138 LargePageIterator lo_iterator_;
3134 }; 3139 };
3135 3140
3136 #ifdef DEBUG 3141 #ifdef DEBUG
3137 struct CommentStatistic { 3142 struct CommentStatistic {
3138 const char* comment; 3143 const char* comment;
3139 int size; 3144 int size;
3140 int count; 3145 int count;
3141 void Clear() { 3146 void Clear() {
3142 comment = NULL; 3147 comment = NULL;
3143 size = 0; 3148 size = 0;
3144 count = 0; 3149 count = 0;
3145 } 3150 }
3146 // Must be small, since an iteration is used for lookup. 3151 // Must be small, since an iteration is used for lookup.
3147 static const int kMaxComments = 64; 3152 static const int kMaxComments = 64;
3148 }; 3153 };
3149 #endif 3154 #endif
3150 } // namespace internal 3155 } // namespace internal
3151 } // namespace v8 3156 } // namespace v8
3152 3157
3153 #endif // V8_HEAP_SPACES_H_ 3158 #endif // V8_HEAP_SPACES_H_
OLDNEW
« src/heap/mark-compact.cc ('K') | « src/heap/remembered-set.h ('k') | src/heap/spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698