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

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

Issue 1577853007: [heap] Parallel newspace evacuation, semispace copy, and compaction \o/ (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Disable concurrent sweeping for test expecting # of pages released Created 4 years, 10 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/array-buffer-tracker.cc ('k') | src/heap/heap.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_HEAP_H_ 5 #ifndef V8_HEAP_HEAP_H_
6 #define V8_HEAP_HEAP_H_ 6 #define V8_HEAP_HEAP_H_
7 7
8 #include <cmath> 8 #include <cmath>
9 #include <map> 9 #include <map>
10 10
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 }; 634 };
635 635
636 // Indicates whether live bytes adjustment is triggered 636 // Indicates whether live bytes adjustment is triggered
637 // - from within the GC code before sweeping started (SEQUENTIAL_TO_SWEEPER), 637 // - from within the GC code before sweeping started (SEQUENTIAL_TO_SWEEPER),
638 // - or from within GC (CONCURRENT_TO_SWEEPER), 638 // - or from within GC (CONCURRENT_TO_SWEEPER),
639 // - or mutator code (CONCURRENT_TO_SWEEPER). 639 // - or mutator code (CONCURRENT_TO_SWEEPER).
640 enum InvocationMode { SEQUENTIAL_TO_SWEEPER, CONCURRENT_TO_SWEEPER }; 640 enum InvocationMode { SEQUENTIAL_TO_SWEEPER, CONCURRENT_TO_SWEEPER };
641 641
642 enum PretenuringFeedbackInsertionMode { kCached, kGlobal }; 642 enum PretenuringFeedbackInsertionMode { kCached, kGlobal };
643 643
644 enum FindMementoMode { kForRuntime, kForGC };
645
644 enum HeapState { NOT_IN_GC, SCAVENGE, MARK_COMPACT }; 646 enum HeapState { NOT_IN_GC, SCAVENGE, MARK_COMPACT };
645 647
646 // Taking this lock prevents the GC from entering a phase that relocates 648 // Taking this lock prevents the GC from entering a phase that relocates
647 // object references. 649 // object references.
648 class RelocationLock { 650 class RelocationLock {
649 public: 651 public:
650 explicit RelocationLock(Heap* heap) : heap_(heap) { 652 explicit RelocationLock(Heap* heap) : heap_(heap) {
651 heap_->relocation_mutex_.Lock(); 653 heap_->relocation_mutex_.Lock();
652 } 654 }
653 655
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 925
924 // Print short heap statistics. 926 // Print short heap statistics.
925 void PrintShortHeapStatistics(); 927 void PrintShortHeapStatistics();
926 928
927 inline HeapState gc_state() { return gc_state_; } 929 inline HeapState gc_state() { return gc_state_; }
928 930
929 inline bool IsInGCPostProcessing() { return gc_post_processing_depth_ > 0; } 931 inline bool IsInGCPostProcessing() { return gc_post_processing_depth_ > 0; }
930 932
931 // If an object has an AllocationMemento trailing it, return it, otherwise 933 // If an object has an AllocationMemento trailing it, return it, otherwise
932 // return NULL; 934 // return NULL;
935 template <FindMementoMode mode>
933 inline AllocationMemento* FindAllocationMemento(HeapObject* object); 936 inline AllocationMemento* FindAllocationMemento(HeapObject* object);
934 937
935 // Returns false if not able to reserve. 938 // Returns false if not able to reserve.
936 bool ReserveSpace(Reservation* reservations); 939 bool ReserveSpace(Reservation* reservations);
937 940
938 // 941 //
939 // Support for the API. 942 // Support for the API.
940 // 943 //
941 944
942 void CreateApiObjects(); 945 void CreateApiObjects();
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 // Returns the available bytes in space w/o growing. 1407 // Returns the available bytes in space w/o growing.
1405 // Heap doesn't guarantee that it can allocate an object that requires 1408 // Heap doesn't guarantee that it can allocate an object that requires
1406 // all available bytes. Check MaxHeapObjectSize() instead. 1409 // all available bytes. Check MaxHeapObjectSize() instead.
1407 intptr_t Available(); 1410 intptr_t Available();
1408 1411
1409 // Returns of size of all objects residing in the heap. 1412 // Returns of size of all objects residing in the heap.
1410 intptr_t SizeOfObjects(); 1413 intptr_t SizeOfObjects();
1411 1414
1412 void UpdateSurvivalStatistics(int start_new_space_size); 1415 void UpdateSurvivalStatistics(int start_new_space_size);
1413 1416
1414 inline void IncrementPromotedObjectsSize(int object_size) { 1417 inline void IncrementPromotedObjectsSize(intptr_t object_size) {
1415 DCHECK_GE(object_size, 0); 1418 DCHECK_GE(object_size, 0);
1416 promoted_objects_size_ += object_size; 1419 promoted_objects_size_ += object_size;
1417 } 1420 }
1418 inline intptr_t promoted_objects_size() { return promoted_objects_size_; } 1421 inline intptr_t promoted_objects_size() { return promoted_objects_size_; }
1419 1422
1420 inline void IncrementSemiSpaceCopiedObjectSize(int object_size) { 1423 inline void IncrementSemiSpaceCopiedObjectSize(intptr_t object_size) {
1421 DCHECK_GE(object_size, 0); 1424 DCHECK_GE(object_size, 0);
1422 semi_space_copied_object_size_ += object_size; 1425 semi_space_copied_object_size_ += object_size;
1423 } 1426 }
1424 inline intptr_t semi_space_copied_object_size() { 1427 inline intptr_t semi_space_copied_object_size() {
1425 return semi_space_copied_object_size_; 1428 return semi_space_copied_object_size_;
1426 } 1429 }
1427 1430
1428 inline intptr_t SurvivedNewSpaceObjectSize() { 1431 inline intptr_t SurvivedNewSpaceObjectSize() {
1429 return promoted_objects_size_ + semi_space_copied_object_size_; 1432 return promoted_objects_size_ + semi_space_copied_object_size_;
1430 } 1433 }
1431 1434
1432 inline void IncrementNodesDiedInNewSpace() { nodes_died_in_new_space_++; } 1435 inline void IncrementNodesDiedInNewSpace() { nodes_died_in_new_space_++; }
1433 1436
1434 inline void IncrementNodesCopiedInNewSpace() { nodes_copied_in_new_space_++; } 1437 inline void IncrementNodesCopiedInNewSpace() { nodes_copied_in_new_space_++; }
1435 1438
1436 inline void IncrementNodesPromoted() { nodes_promoted_++; } 1439 inline void IncrementNodesPromoted() { nodes_promoted_++; }
1437 1440
1438 inline void IncrementYoungSurvivorsCounter(int survived) { 1441 inline void IncrementYoungSurvivorsCounter(intptr_t survived) {
1439 DCHECK(survived >= 0); 1442 DCHECK_GE(survived, 0);
1440 survived_last_scavenge_ = survived; 1443 survived_last_scavenge_ = survived;
1441 survived_since_last_expansion_ += survived; 1444 survived_since_last_expansion_ += survived;
1442 } 1445 }
1443 1446
1444 inline intptr_t PromotedTotalSize() { 1447 inline intptr_t PromotedTotalSize() {
1445 int64_t total = PromotedSpaceSizeOfObjects() + PromotedExternalMemorySize(); 1448 int64_t total = PromotedSpaceSizeOfObjects() + PromotedExternalMemorySize();
1446 if (total > std::numeric_limits<intptr_t>::max()) { 1449 if (total > std::numeric_limits<intptr_t>::max()) {
1447 // TODO(erikcorry): Use uintptr_t everywhere we do heap size calculations. 1450 // TODO(erikcorry): Use uintptr_t everywhere we do heap size calculations.
1448 return std::numeric_limits<intptr_t>::max(); 1451 return std::numeric_limits<intptr_t>::max();
1449 } 1452 }
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
2178 int initial_semispace_size_; 2181 int initial_semispace_size_;
2179 int target_semispace_size_; 2182 int target_semispace_size_;
2180 intptr_t max_old_generation_size_; 2183 intptr_t max_old_generation_size_;
2181 intptr_t initial_old_generation_size_; 2184 intptr_t initial_old_generation_size_;
2182 bool old_generation_size_configured_; 2185 bool old_generation_size_configured_;
2183 intptr_t max_executable_size_; 2186 intptr_t max_executable_size_;
2184 intptr_t maximum_committed_; 2187 intptr_t maximum_committed_;
2185 2188
2186 // For keeping track of how much data has survived 2189 // For keeping track of how much data has survived
2187 // scavenge since last new space expansion. 2190 // scavenge since last new space expansion.
2188 int survived_since_last_expansion_; 2191 intptr_t survived_since_last_expansion_;
2189 2192
2190 // ... and since the last scavenge. 2193 // ... and since the last scavenge.
2191 int survived_last_scavenge_; 2194 intptr_t survived_last_scavenge_;
2192 2195
2193 // This is not the depth of nested AlwaysAllocateScope's but rather a single 2196 // This is not the depth of nested AlwaysAllocateScope's but rather a single
2194 // count, as scopes can be acquired from multiple tasks (read: threads). 2197 // count, as scopes can be acquired from multiple tasks (read: threads).
2195 AtomicNumber<size_t> always_allocate_scope_count_; 2198 AtomicNumber<size_t> always_allocate_scope_count_;
2196 2199
2197 // For keeping track of context disposals. 2200 // For keeping track of context disposals.
2198 int contexts_disposed_; 2201 int contexts_disposed_;
2199 2202
2200 // The length of the retained_maps array at the time of context disposal. 2203 // The length of the retained_maps array at the time of context disposal.
2201 // This separates maps in the retained_maps array that were created before 2204 // This separates maps in the retained_maps array that were created before
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
2844 2847
2845 private: 2848 private:
2846 friend class NewSpace; 2849 friend class NewSpace;
2847 DISALLOW_COPY_AND_ASSIGN(InlineAllocationObserver); 2850 DISALLOW_COPY_AND_ASSIGN(InlineAllocationObserver);
2848 }; 2851 };
2849 2852
2850 } // namespace internal 2853 } // namespace internal
2851 } // namespace v8 2854 } // namespace v8
2852 2855
2853 #endif // V8_HEAP_HEAP_H_ 2856 #endif // V8_HEAP_HEAP_H_
OLDNEW
« no previous file with comments | « src/heap/array-buffer-tracker.cc ('k') | src/heap/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698