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

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

Issue 3066044: Generalize virtually dispatched scavenger to virtually dispatched specialized visitors. (Closed)
Patch Set: cleanup Created 10 years, 4 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/ia32/assembler-ia32-inl.h ('k') | src/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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 79
80 // Type of functions to process non-live objects. 80 // Type of functions to process non-live objects.
81 typedef void (*ProcessNonLiveFunction)(HeapObject* object); 81 typedef void (*ProcessNonLiveFunction)(HeapObject* object);
82 82
83 // Set the global force_compaction flag, it must be called before Prepare 83 // Set the global force_compaction flag, it must be called before Prepare
84 // to take effect. 84 // to take effect.
85 static void SetForceCompaction(bool value) { 85 static void SetForceCompaction(bool value) {
86 force_compaction_ = value; 86 force_compaction_ = value;
87 } 87 }
88 88
89
90 static void Initialize();
91
89 // Prepares for GC by resetting relocation info in old and map spaces and 92 // Prepares for GC by resetting relocation info in old and map spaces and
90 // choosing spaces to compact. 93 // choosing spaces to compact.
91 static void Prepare(GCTracer* tracer); 94 static void Prepare(GCTracer* tracer);
92 95
93 // Performs a global garbage collection. 96 // Performs a global garbage collection.
94 static void CollectGarbage(); 97 static void CollectGarbage();
95 98
96 // True if the last full GC performed heap compaction. 99 // True if the last full GC performed heap compaction.
97 static bool HasCompacted() { return compacting_collection_; } 100 static bool HasCompacted() { return compacting_collection_; }
98 101
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 // 167 //
165 // Before: The heap has been prepared for garbage collection by 168 // Before: The heap has been prepared for garbage collection by
166 // MarkCompactCollector::Prepare() and is otherwise in its 169 // MarkCompactCollector::Prepare() and is otherwise in its
167 // normal state. 170 // normal state.
168 // 171 //
169 // After: Live objects are marked and non-live objects are unmarked. 172 // After: Live objects are marked and non-live objects are unmarked.
170 173
171 174
172 friend class RootMarkingVisitor; 175 friend class RootMarkingVisitor;
173 friend class MarkingVisitor; 176 friend class MarkingVisitor;
177 friend class StaticMarkingVisitor;
174 178
175 // Marking operations for objects reachable from roots. 179 // Marking operations for objects reachable from roots.
176 static void MarkLiveObjects(); 180 static void MarkLiveObjects();
177 181
178 static void MarkUnmarkedObject(HeapObject* obj); 182 static void MarkUnmarkedObject(HeapObject* obj);
179 183
180 static inline void MarkObject(HeapObject* obj) { 184 static inline void MarkObject(HeapObject* obj) {
181 if (!obj->IsMarked()) MarkUnmarkedObject(obj); 185 if (!obj->IsMarked()) MarkUnmarkedObject(obj);
182 } 186 }
183 187
(...skipping 23 matching lines...) Expand all
207 // symbol table are weak. 211 // symbol table are weak.
208 static void MarkSymbolTable(); 212 static void MarkSymbolTable();
209 213
210 // Mark objects in object groups that have at least one object in the 214 // Mark objects in object groups that have at least one object in the
211 // group marked. 215 // group marked.
212 static void MarkObjectGroups(); 216 static void MarkObjectGroups();
213 217
214 // Mark all objects in an object group with at least one marked 218 // Mark all objects in an object group with at least one marked
215 // object, then all objects reachable from marked objects in object 219 // object, then all objects reachable from marked objects in object
216 // groups, and repeat. 220 // groups, and repeat.
217 static void ProcessObjectGroups(MarkingVisitor* visitor); 221 static void ProcessObjectGroups();
218 222
219 // Mark objects reachable (transitively) from objects in the marking stack 223 // Mark objects reachable (transitively) from objects in the marking stack
220 // or overflowed in the heap. 224 // or overflowed in the heap.
221 static void ProcessMarkingStack(MarkingVisitor* visitor); 225 static void ProcessMarkingStack();
222 226
223 // Mark objects reachable (transitively) from objects in the marking 227 // Mark objects reachable (transitively) from objects in the marking
224 // stack. This function empties the marking stack, but may leave 228 // stack. This function empties the marking stack, but may leave
225 // overflowed objects in the heap, in which case the marking stack's 229 // overflowed objects in the heap, in which case the marking stack's
226 // overflow flag will be set. 230 // overflow flag will be set.
227 static void EmptyMarkingStack(MarkingVisitor* visitor); 231 static void EmptyMarkingStack();
228 232
229 // Refill the marking stack with overflowed objects from the heap. This 233 // Refill the marking stack with overflowed objects from the heap. This
230 // function either leaves the marking stack full or clears the overflow 234 // function either leaves the marking stack full or clears the overflow
231 // flag on the marking stack. 235 // flag on the marking stack.
232 static void RefillMarkingStack(); 236 static void RefillMarkingStack();
233 237
234 // Callback function for telling whether the object *p is an unmarked 238 // Callback function for telling whether the object *p is an unmarked
235 // heap object. 239 // heap object.
236 static bool IsUnmarkedHeapObject(Object** p); 240 static bool IsUnmarkedHeapObject(Object** p);
237 241
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 446
443 friend class UnmarkObjectVisitor; 447 friend class UnmarkObjectVisitor;
444 static void UnmarkObject(HeapObject* obj); 448 static void UnmarkObject(HeapObject* obj);
445 #endif 449 #endif
446 }; 450 };
447 451
448 452
449 } } // namespace v8::internal 453 } } // namespace v8::internal
450 454
451 #endif // V8_MARK_COMPACT_H_ 455 #endif // V8_MARK_COMPACT_H_
OLDNEW
« no previous file with comments | « src/ia32/assembler-ia32-inl.h ('k') | src/mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698