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

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

Issue 1863983002: 🏄 [heap] Add page evacuation mode for new->old (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Cleanup Created 4 years, 8 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 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 #include "src/heap/store-buffer.h" 10 #include "src/heap/store-buffer.h"
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 MarkingParity marking_parity() { return marking_parity_; } 491 MarkingParity marking_parity() { return marking_parity_; }
492 492
493 // Concurrent and parallel sweeping support. If required_freed_bytes was set 493 // Concurrent and parallel sweeping support. If required_freed_bytes was set
494 // to a value larger than 0, then sweeping returns after a block of at least 494 // to a value larger than 0, then sweeping returns after a block of at least
495 // required_freed_bytes was freed. If required_freed_bytes was set to zero 495 // required_freed_bytes was freed. If required_freed_bytes was set to zero
496 // then the whole given space is swept. It returns the size of the maximum 496 // then the whole given space is swept. It returns the size of the maximum
497 // continuous freed memory chunk. 497 // continuous freed memory chunk.
498 int SweepInParallel(PagedSpace* space, int required_freed_bytes, 498 int SweepInParallel(PagedSpace* space, int required_freed_bytes,
499 int max_pages = 0); 499 int max_pages = 0);
500 500
501 int SweepInParallel(std::vector<Page*>& pages, PagedSpace* space,
502 int required_freed_bytes, int max_pages = 0);
503
501 // Sweeps a given page concurrently to the sweeper threads. It returns the 504 // Sweeps a given page concurrently to the sweeper threads. It returns the
502 // size of the maximum continuous freed memory chunk. 505 // size of the maximum continuous freed memory chunk.
503 int SweepInParallel(Page* page, PagedSpace* space); 506 int SweepInParallel(Page* page, PagedSpace* space);
504 507
505 // Ensures that sweeping is finished. 508 // Ensures that sweeping is finished.
506 // 509 //
507 // Note: Can only be called safely from main thread. 510 // Note: Can only be called safely from main thread.
508 void EnsureSweepingCompleted(); 511 void EnsureSweepingCompleted();
509 512
510 void SweepOrWaitUntilSweepingCompleted(Page* page); 513 void SweepOrWaitUntilSweepingCompleted(Page* page);
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 return &swept_code_space_pages_; 574 return &swept_code_space_pages_;
572 case MAP_SPACE: 575 case MAP_SPACE:
573 return &swept_map_space_pages_; 576 return &swept_map_space_pages_;
574 default: 577 default:
575 UNREACHABLE(); 578 UNREACHABLE();
576 } 579 }
577 return nullptr; 580 return nullptr;
578 } 581 }
579 582
580 private: 583 private:
584 class EvacuateNewSpacePageVisitor;
581 class EvacuateNewSpaceVisitor; 585 class EvacuateNewSpaceVisitor;
582 class EvacuateOldSpaceVisitor; 586 class EvacuateOldSpaceVisitor;
583 class EvacuateVisitorBase; 587 class EvacuateVisitorBase;
584 class HeapObjectVisitor; 588 class HeapObjectVisitor;
585 class SweeperTask; 589 class SweeperTask;
586 590
587 typedef std::vector<Page*> SweepingList; 591 typedef std::vector<Page*> SweepingList;
588 592
589 explicit MarkCompactCollector(Heap* heap); 593 explicit MarkCompactCollector(Heap* heap);
590 594
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 List<NewSpacePage*> newspace_evacuation_candidates_; 824 List<NewSpacePage*> newspace_evacuation_candidates_;
821 825
822 base::Mutex swept_pages_mutex_; 826 base::Mutex swept_pages_mutex_;
823 List<Page*> swept_old_space_pages_; 827 List<Page*> swept_old_space_pages_;
824 List<Page*> swept_code_space_pages_; 828 List<Page*> swept_code_space_pages_;
825 List<Page*> swept_map_space_pages_; 829 List<Page*> swept_map_space_pages_;
826 830
827 SweepingList sweeping_list_old_space_; 831 SweepingList sweeping_list_old_space_;
828 SweepingList sweeping_list_code_space_; 832 SweepingList sweeping_list_code_space_;
829 SweepingList sweeping_list_map_space_; 833 SweepingList sweeping_list_map_space_;
834 SweepingList* sweeping_list_shared_;
Michael Lippautz 2016/04/08 07:09:58 Not too happy about cluttering up all the sweeper
Hannes Payer (out of office) 2016/04/08 10:42:40 Yeah, that does not really scale. You can do that
Michael Lippautz 2016/04/08 11:30:00 It's sweeping_list_promoted_pages_ for now.
830 835
831 // True if we are collecting slots to perform evacuation from evacuation 836 // True if we are collecting slots to perform evacuation from evacuation
832 // candidates. 837 // candidates.
833 bool compacting_; 838 bool compacting_;
834 839
835 // True if concurrent or parallel sweeping is currently in progress. 840 // True if concurrent or parallel sweeping is currently in progress.
836 bool sweeping_in_progress_; 841 bool sweeping_in_progress_;
837 842
838 // Semaphore used to synchronize sweeper tasks. 843 // Semaphore used to synchronize sweeper tasks.
839 base::Semaphore pending_sweeper_tasks_semaphore_; 844 base::Semaphore pending_sweeper_tasks_semaphore_;
(...skipping 20 matching lines...) Expand all
860 private: 865 private:
861 MarkCompactCollector* collector_; 866 MarkCompactCollector* collector_;
862 }; 867 };
863 868
864 869
865 const char* AllocationSpaceName(AllocationSpace space); 870 const char* AllocationSpaceName(AllocationSpace space);
866 } // namespace internal 871 } // namespace internal
867 } // namespace v8 872 } // namespace v8
868 873
869 #endif // V8_HEAP_MARK_COMPACT_H_ 874 #endif // V8_HEAP_MARK_COMPACT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698