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

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

Issue 6542047: Basic implementation of incremental marking. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/gc
Patch Set: Created 9 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 | Annotate | Revision Log
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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 } while (cell_index < last_cell_index && cells[cell_index] == 0); 202 } while (cell_index < last_cell_index && cells[cell_index] == 0);
203 203
204 // If we reached last_cell return limit 204 // If we reached last_cell return limit
205 // not the start of the last_cell because 205 // not the start of the last_cell because
206 // limit can be in the middle of the previous cell. 206 // limit can be in the middle of the previous cell.
207 if (cell_index == last_cell_index) return limit; 207 if (cell_index == last_cell_index) return limit;
208 208
209 return FirstMarkedObject(page, cell_index, cells[cell_index]); 209 return FirstMarkedObject(page, cell_index, cells[cell_index]);
210 } 210 }
211 211
212 static inline void TransferMark(Address old_start, 212 static void TransferMark(Address old_start, Address new_start);
213 Address new_start) {
214 if (Heap::InNewSpace(old_start) ||
215 Page::FromAddress(old_start)->IsFlagSet(Page::IS_CONTINUOUS) ||
216 !IsMarked(old_start)) {
217 return;
218 }
219
220 SetMark(new_start);
221 }
222 213
223 static bool Setup(); 214 static bool Setup();
224 215
225 static void TearDown(); 216 static void TearDown();
226 217
227 private: 218 private:
228 class BitmapStorageDescriptor { 219 class BitmapStorageDescriptor {
229 public: 220 public:
230 INLINE(static int CellsCount(Address addr)) { 221 INLINE(static int CellsCount(Address addr)) {
231 return HeaderOf(addr)->cells_count_; 222 return HeaderOf(addr)->cells_count_;
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 friend class MarkingVisitor; 387 friend class MarkingVisitor;
397 friend class StaticMarkingVisitor; 388 friend class StaticMarkingVisitor;
398 friend class CodeMarkingVisitor; 389 friend class CodeMarkingVisitor;
399 friend class SharedFunctionInfoMarkingVisitor; 390 friend class SharedFunctionInfoMarkingVisitor;
400 391
401 static void PrepareForCodeFlushing(); 392 static void PrepareForCodeFlushing();
402 393
403 // Marking operations for objects reachable from roots. 394 // Marking operations for objects reachable from roots.
404 static void MarkLiveObjects(); 395 static void MarkLiveObjects();
405 396
397 static void AfterMarking();
398
399
406 INLINE(static void MarkObject(HeapObject* obj)) { 400 INLINE(static void MarkObject(HeapObject* obj)) {
407 if (!Marking::TestAndMark(obj->address())) { 401 if (!Marking::TestAndMark(obj->address())) {
408 tracer_->increment_marked_count(); 402 tracer_->increment_marked_count();
409 #ifdef DEBUG 403 #ifdef DEBUG
410 UpdateLiveObjectCount(obj); 404 UpdateLiveObjectCount(obj);
411 #endif 405 #endif
412 ProcessNewlyMarkedObject(obj); 406 ProcessNewlyMarkedObject(obj);
413 } 407 }
414 } 408 }
415 409
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 542
549 friend class UnmarkObjectVisitor; 543 friend class UnmarkObjectVisitor;
550 static void UnmarkObject(HeapObject* obj); 544 static void UnmarkObject(HeapObject* obj);
551 #endif 545 #endif
552 }; 546 };
553 547
554 548
555 } } // namespace v8::internal 549 } } // namespace v8::internal
556 550
557 #endif // V8_MARK_COMPACT_H_ 551 #endif // V8_MARK_COMPACT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698