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

Unified Diff: src/heap/mark-compact.h

Issue 1488593003: Optimize clearing of map transitions. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: base 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 side-by-side diff with in-line comments
Download patch
Index: src/heap/mark-compact.h
diff --git a/src/heap/mark-compact.h b/src/heap/mark-compact.h
index 98ad6b6df53402a8ec1e06f30eccd6393f61291f..2b61ea575b5fa040b9d3201b0a84b613f425125b 100644
--- a/src/heap/mark-compact.h
+++ b/src/heap/mark-compact.h
@@ -656,15 +656,20 @@ class MarkCompactCollector {
// heap object.
static bool IsUnmarkedHeapObject(Object** p);
- // Map transitions from a live map to a dead map must be killed.
- // We replace them with a null descriptor, with the same key.
+ // Clear non-live references in weak cells, transition and descriptor arrays,
+ // and deoptimize dependent code of non-live maps.
void ClearNonLiveReferences();
- void ClearNonLiveMapTransitions(Map* map);
- void ClearMapTransitions(Map* map, Map* dead_transition);
- bool ClearMapBackPointer(Map* map);
- void MarkDependentCodeListForDeoptimization(DependentCode* list_head);
- void TrimDescriptorArray(Map* map, DescriptorArray* descriptors,
- int number_of_own_descriptors);
+ void MarkDependentCodeForDeoptimization(DependentCode* list);
+ // Find non-live targets of simple transitions in the given list. Clear
+ // transitions to non-live targets and if needed trim descriptors arrays.
+ void ClearSimpleMapTransitions(Object* non_live_map_list);
+ void ClearSimpleMapTransition(Map* map, Map* dead_transition);
+ // Compact every array in the global list of transition arrays and
+ // trim the corresponding descriptor array if a transition target is non-live.
+ void ClearFullMapTransitions();
+ bool CompactTransitionArray(Map* map, TransitionArray* transitions,
+ DescriptorArray* descriptors);
+ void TrimDescriptorArray(Map* map, DescriptorArray* descriptors);
void TrimEnumCache(Map* map, DescriptorArray* descriptors);
// Mark all values associated with reachable keys in weak collections
@@ -681,10 +686,10 @@ class MarkCompactCollector {
// collections when incremental marking is aborted.
void AbortWeakCollections();
- void ProcessAndClearWeakCells();
+ void ClearWeakCells(Object** non_live_map_list,
+ DependentCode** dependent_code_list);
void AbortWeakCells();
- void ProcessAndClearTransitionArrays();
void AbortTransitionArrays();
// After all reachable objects have been marked, those entries within
@@ -692,9 +697,6 @@ class MarkCompactCollector {
// trimming or clearing out the entire optimized code map.
void ProcessAndClearOptimizedCodeMaps();
- // Process non-live references in maps and optimized code.
- void ProcessWeakReferences();
-
// -----------------------------------------------------------------------
// Phase 2: Sweeping to clear mark bits and free non-live objects for
// a non-compacting collection.

Powered by Google App Engine
This is Rietveld 408576698