| OLD | NEW |
| 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 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 ABOUT_TO_BE_FREED, | 366 ABOUT_TO_BE_FREED, |
| 367 POINTERS_TO_HERE_ARE_INTERESTING, | 367 POINTERS_TO_HERE_ARE_INTERESTING, |
| 368 POINTERS_FROM_HERE_ARE_INTERESTING, | 368 POINTERS_FROM_HERE_ARE_INTERESTING, |
| 369 SCAN_ON_SCAVENGE, | 369 SCAN_ON_SCAVENGE, |
| 370 IN_FROM_SPACE, // Mutually exclusive with IN_TO_SPACE. | 370 IN_FROM_SPACE, // Mutually exclusive with IN_TO_SPACE. |
| 371 IN_TO_SPACE, // All pages in new space has one of these two set. | 371 IN_TO_SPACE, // All pages in new space has one of these two set. |
| 372 NEW_SPACE_BELOW_AGE_MARK, | 372 NEW_SPACE_BELOW_AGE_MARK, |
| 373 CONTAINS_ONLY_DATA, | 373 CONTAINS_ONLY_DATA, |
| 374 EVACUATION_CANDIDATE, | 374 EVACUATION_CANDIDATE, |
| 375 RESCAN_ON_EVACUATION, | 375 RESCAN_ON_EVACUATION, |
| 376 NEVER_EVACUATE, // May contain immortal immutables. |
| 376 | 377 |
| 377 // WAS_SWEPT indicates that marking bits have been cleared by the sweeper, | 378 // WAS_SWEPT indicates that marking bits have been cleared by the sweeper, |
| 378 // otherwise marking bits are still intact. | 379 // otherwise marking bits are still intact. |
| 379 WAS_SWEPT, | 380 WAS_SWEPT, |
| 380 | 381 |
| 381 // Large objects can have a progress bar in their page header. These object | 382 // Large objects can have a progress bar in their page header. These object |
| 382 // are scanned in increments and will be kept black while being scanned. | 383 // are scanned in increments and will be kept black while being scanned. |
| 383 // Even if the mutator writes to them they will be kept black and a white | 384 // Even if the mutator writes to them they will be kept black and a white |
| 384 // to grey transition is performed in the value. | 385 // to grey transition is performed in the value. |
| 385 HAS_PROGRESS_BAR, | 386 HAS_PROGRESS_BAR, |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 597 return this->address() + (index << kPointerSizeLog2); | 598 return this->address() + (index << kPointerSizeLog2); |
| 598 } | 599 } |
| 599 | 600 |
| 600 void InsertAfter(MemoryChunk* other); | 601 void InsertAfter(MemoryChunk* other); |
| 601 void Unlink(); | 602 void Unlink(); |
| 602 | 603 |
| 603 inline Heap* heap() const { return heap_; } | 604 inline Heap* heap() const { return heap_; } |
| 604 | 605 |
| 605 static const int kFlagsOffset = kPointerSize; | 606 static const int kFlagsOffset = kPointerSize; |
| 606 | 607 |
| 607 bool IsEvacuationCandidate() { return IsFlagSet(EVACUATION_CANDIDATE); } | 608 bool NeverEvacuate() { return IsFlagSet(NEVER_EVACUATE); } |
| 609 |
| 610 void MarkNeverEvacuate() { SetFlag(NEVER_EVACUATE); } |
| 611 |
| 612 bool IsEvacuationCandidate() { |
| 613 DCHECK(!(IsFlagSet(NEVER_EVACUATE) && IsFlagSet(EVACUATION_CANDIDATE))); |
| 614 return IsFlagSet(EVACUATION_CANDIDATE); |
| 615 } |
| 608 | 616 |
| 609 bool ShouldSkipEvacuationSlotRecording() { | 617 bool ShouldSkipEvacuationSlotRecording() { |
| 610 return (flags_ & kSkipEvacuationSlotsRecordingMask) != 0; | 618 return (flags_ & kSkipEvacuationSlotsRecordingMask) != 0; |
| 611 } | 619 } |
| 612 | 620 |
| 613 inline SkipList* skip_list() { return skip_list_; } | 621 inline SkipList* skip_list() { return skip_list_; } |
| 614 | 622 |
| 615 inline void set_skip_list(SkipList* skip_list) { skip_list_ = skip_list; } | 623 inline void set_skip_list(SkipList* skip_list) { skip_list_ = skip_list; } |
| 616 | 624 |
| 617 inline SlotsBuffer* slots_buffer() { return slots_buffer_; } | 625 inline SlotsBuffer* slots_buffer() { return slots_buffer_; } |
| 618 | 626 |
| 619 inline SlotsBuffer** slots_buffer_address() { return &slots_buffer_; } | 627 inline SlotsBuffer** slots_buffer_address() { return &slots_buffer_; } |
| 620 | 628 |
| 621 void MarkEvacuationCandidate() { | 629 void MarkEvacuationCandidate() { |
| 630 DCHECK(!IsFlagSet(NEVER_EVACUATE)); |
| 622 DCHECK(slots_buffer_ == NULL); | 631 DCHECK(slots_buffer_ == NULL); |
| 623 SetFlag(EVACUATION_CANDIDATE); | 632 SetFlag(EVACUATION_CANDIDATE); |
| 624 } | 633 } |
| 625 | 634 |
| 626 void ClearEvacuationCandidate() { | 635 void ClearEvacuationCandidate() { |
| 627 DCHECK(slots_buffer_ == NULL); | 636 DCHECK(slots_buffer_ == NULL); |
| 628 ClearFlag(EVACUATION_CANDIDATE); | 637 ClearFlag(EVACUATION_CANDIDATE); |
| 629 } | 638 } |
| 630 | 639 |
| 631 Address area_start() { return area_start_; } | 640 Address area_start() { return area_start_; } |
| (...skipping 2244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2876 count = 0; | 2885 count = 0; |
| 2877 } | 2886 } |
| 2878 // Must be small, since an iteration is used for lookup. | 2887 // Must be small, since an iteration is used for lookup. |
| 2879 static const int kMaxComments = 64; | 2888 static const int kMaxComments = 64; |
| 2880 }; | 2889 }; |
| 2881 #endif | 2890 #endif |
| 2882 } | 2891 } |
| 2883 } // namespace v8::internal | 2892 } // namespace v8::internal |
| 2884 | 2893 |
| 2885 #endif // V8_HEAP_SPACES_H_ | 2894 #endif // V8_HEAP_SPACES_H_ |
| OLD | NEW |