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

Side by Side Diff: src/heap/mark-compact.h

Issue 1504773002: Reland "[heap] Unify evacuating an object for new and old generation." (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Cleanup names of methods iterating live objects Created 5 years 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 | « no previous file | src/heap/mark-compact.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_MARK_COMPACT_H_ 5 #ifndef V8_HEAP_MARK_COMPACT_H_
6 #define V8_HEAP_MARK_COMPACT_H_ 6 #define V8_HEAP_MARK_COMPACT_H_
7 7
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/heap/spaces.h" 9 #include "src/heap/spaces.h"
10 10
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 312
313 // ------------------------------------------------------------------------- 313 // -------------------------------------------------------------------------
314 // Mark-Compact collector 314 // Mark-Compact collector
315 class MarkCompactCollector { 315 class MarkCompactCollector {
316 public: 316 public:
317 enum IterationMode { 317 enum IterationMode {
318 kKeepMarking, 318 kKeepMarking,
319 kClearMarkbits, 319 kClearMarkbits,
320 }; 320 };
321 321
322 class EvacuateNewSpaceVisitor;
323 class EvacuateOldSpaceVisitor;
324 class HeapObjectVisitor;
325
326 static void Initialize(); 322 static void Initialize();
327 323
328 void SetUp(); 324 void SetUp();
329 325
330 void TearDown(); 326 void TearDown();
331 327
332 void CollectEvacuationCandidates(PagedSpace* space); 328 void CollectEvacuationCandidates(PagedSpace* space);
333 329
334 void AddEvacuationCandidate(Page* p); 330 void AddEvacuationCandidate(Page* p);
335 331
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 INLINE(void ForceRecordSlot(HeapObject* object, Object** slot, 398 INLINE(void ForceRecordSlot(HeapObject* object, Object** slot,
403 Object* target)); 399 Object* target));
404 400
405 void UpdateSlots(SlotsBuffer* buffer); 401 void UpdateSlots(SlotsBuffer* buffer);
406 void UpdateSlotsRecordedIn(SlotsBuffer* buffer); 402 void UpdateSlotsRecordedIn(SlotsBuffer* buffer);
407 403
408 void MigrateObject(HeapObject* dst, HeapObject* src, int size, 404 void MigrateObject(HeapObject* dst, HeapObject* src, int size,
409 AllocationSpace to_old_space, 405 AllocationSpace to_old_space,
410 SlotsBuffer** evacuation_slots_buffer); 406 SlotsBuffer** evacuation_slots_buffer);
411 407
412 bool TryPromoteObject(HeapObject* object, int object_size);
413
414 void InvalidateCode(Code* code); 408 void InvalidateCode(Code* code);
415 409
416 void ClearMarkbits(); 410 void ClearMarkbits();
417 411
418 bool is_compacting() const { return compacting_; } 412 bool is_compacting() const { return compacting_; }
419 413
420 MarkingParity marking_parity() { return marking_parity_; } 414 MarkingParity marking_parity() { return marking_parity_; }
421 415
422 // Concurrent and parallel sweeping support. If required_freed_bytes was set 416 // Concurrent and parallel sweeping support. If required_freed_bytes was set
423 // to a value larger than 0, then sweeping returns after a block of at least 417 // to a value larger than 0, then sweeping returns after a block of at least
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 } 495 }
502 base::SmartPointer<FreeList>& free_list_code_space() { 496 base::SmartPointer<FreeList>& free_list_code_space() {
503 return free_list_code_space_; 497 return free_list_code_space_;
504 } 498 }
505 base::SmartPointer<FreeList>& free_list_map_space() { 499 base::SmartPointer<FreeList>& free_list_map_space() {
506 return free_list_map_space_; 500 return free_list_map_space_;
507 } 501 }
508 502
509 private: 503 private:
510 class CompactionTask; 504 class CompactionTask;
505 class EvacuateNewSpaceVisitor;
506 class EvacuateOldSpaceVisitor;
507 class EvacuateVisitorBase;
508 class HeapObjectVisitor;
511 class SweeperTask; 509 class SweeperTask;
512 510
513 explicit MarkCompactCollector(Heap* heap); 511 explicit MarkCompactCollector(Heap* heap);
514 512
515 bool WillBeDeoptimized(Code* code); 513 bool WillBeDeoptimized(Code* code);
516 void EvictPopularEvacuationCandidate(Page* page); 514 void EvictPopularEvacuationCandidate(Page* page);
517 void ClearInvalidStoreAndSlotsBufferEntries(); 515 void ClearInvalidStoreAndSlotsBufferEntries();
518 516
519 void StartSweeperThreads(); 517 void StartSweeperThreads();
520 518
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 // After: Live objects are unmarked, non-live regions have been added to 695 // After: Live objects are unmarked, non-live regions have been added to
698 // their space's free list. Active eden semispace is compacted by 696 // their space's free list. Active eden semispace is compacted by
699 // evacuation. 697 // evacuation.
700 // 698 //
701 699
702 // If we are not compacting the heap, we simply sweep the spaces except 700 // If we are not compacting the heap, we simply sweep the spaces except
703 // for the large object space, clearing mark bits and adding unmarked 701 // for the large object space, clearing mark bits and adding unmarked
704 // regions to each space's free list. 702 // regions to each space's free list.
705 void SweepSpaces(); 703 void SweepSpaces();
706 704
707 // Iterates through all live objects on a page using marking information.
708 // Returns whether all objects have successfully been visited.
709 bool IterateLiveObjectsOnPage(MemoryChunk* page, HeapObjectVisitor* visitor,
710 IterationMode mode);
711 705
712 void EvacuateNewSpace(); 706 void EvacuateNewSpace();
713 707
714 void AddEvacuationSlotsBufferSynchronized( 708 void AddEvacuationSlotsBufferSynchronized(
715 SlotsBuffer* evacuation_slots_buffer); 709 SlotsBuffer* evacuation_slots_buffer);
716 710
717 void EvacuatePages(CompactionSpaceCollection* compaction_spaces, 711 void EvacuatePages(CompactionSpaceCollection* compaction_spaces,
718 SlotsBuffer** evacuation_slots_buffer); 712 SlotsBuffer** evacuation_slots_buffer);
719 713
720 void EvacuatePagesInParallel(); 714 void EvacuatePagesInParallel();
721 715
722 // The number of parallel compaction tasks, including the main thread. 716 // The number of parallel compaction tasks, including the main thread.
723 int NumberOfParallelCompactionTasks(); 717 int NumberOfParallelCompactionTasks();
724 718
725 719
726 void StartParallelCompaction(CompactionSpaceCollection** compaction_spaces, 720 void StartParallelCompaction(CompactionSpaceCollection** compaction_spaces,
727 uint32_t* task_ids, int len); 721 uint32_t* task_ids, int len);
728 void WaitUntilCompactionCompleted(uint32_t* task_ids, int len); 722 void WaitUntilCompactionCompleted(uint32_t* task_ids, int len);
729 723
730 void EvacuateNewSpaceAndCandidates(); 724 void EvacuateNewSpaceAndCandidates();
731 725
732 void VisitLiveObjects(Page* page, ObjectVisitor* visitor); 726 // Iterates through all live objects on a page using marking information.
727 // Returns whether all objects have successfully been visited.
728 bool VisitLiveObjects(MemoryChunk* page, HeapObjectVisitor* visitor,
729 IterationMode mode);
730
731 void VisitLiveObjectsBody(Page* page, ObjectVisitor* visitor);
733 732
734 void SweepAbortedPages(); 733 void SweepAbortedPages();
735 734
736 void ReleaseEvacuationCandidates(); 735 void ReleaseEvacuationCandidates();
737 736
738 // Moves the pages of the evacuation_candidates_ list to the end of their 737 // Moves the pages of the evacuation_candidates_ list to the end of their
739 // corresponding space pages list. 738 // corresponding space pages list.
740 void MoveEvacuationCandidatesToEndOfPagesList(); 739 void MoveEvacuationCandidatesToEndOfPagesList();
741 740
742 void SweepSpace(PagedSpace* space, SweeperType sweeper); 741 void SweepSpace(PagedSpace* space, SweeperType sweeper);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 private: 861 private:
863 MarkCompactCollector* collector_; 862 MarkCompactCollector* collector_;
864 }; 863 };
865 864
866 865
867 const char* AllocationSpaceName(AllocationSpace space); 866 const char* AllocationSpaceName(AllocationSpace space);
868 } // namespace internal 867 } // namespace internal
869 } // namespace v8 868 } // namespace v8
870 869
871 #endif // V8_HEAP_MARK_COMPACT_H_ 870 #endif // V8_HEAP_MARK_COMPACT_H_
OLDNEW
« no previous file with comments | « no previous file | src/heap/mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698