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

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

Issue 13341: Improve mark-compact object grouping interface. (Closed)
Patch Set: Tests. Created 12 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 unified diff | Download patch
« no previous file with comments | « src/global-handles.cc ('k') | test/cctest/test-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 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 557
558 // There may be overflowed objects in the heap. Visit them now. 558 // There may be overflowed objects in the heap. Visit them now.
559 while (marking_stack.overflowed()) { 559 while (marking_stack.overflowed()) {
560 RefillMarkingStack(); 560 RefillMarkingStack();
561 EmptyMarkingStack(visitor->stack_visitor()); 561 EmptyMarkingStack(visitor->stack_visitor());
562 } 562 }
563 } 563 }
564 564
565 565
566 void MarkCompactCollector::MarkObjectGroups() { 566 void MarkCompactCollector::MarkObjectGroups() {
567 List<ObjectGroup*>& object_groups = GlobalHandles::ObjectGroups(); 567 List<ObjectGroup*>* object_groups = GlobalHandles::ObjectGroups();
568 568
569 for (int i = 0; i < object_groups.length(); i++) { 569 for (int i = 0; i < object_groups->length(); i++) {
570 ObjectGroup* entry = object_groups[i]; 570 ObjectGroup* entry = object_groups->at(i);
571 if (entry == NULL) continue; 571 if (entry == NULL) continue;
572 572
573 List<Object**>& objects = entry->objects_; 573 List<Object**>& objects = entry->objects_;
574 bool group_marked = false; 574 bool group_marked = false;
575 for (int j = 0; j < objects.length(); j++) { 575 for (int j = 0; j < objects.length(); j++) {
576 Object* object = *objects[j]; 576 Object* object = *objects[j];
577 if (object->IsHeapObject() && HeapObject::cast(object)->IsMarked()) { 577 if (object->IsHeapObject() && HeapObject::cast(object)->IsMarked()) {
578 group_marked = true; 578 group_marked = true;
579 break; 579 break;
580 } 580 }
581 } 581 }
582 582
583 if (!group_marked) continue; 583 if (!group_marked) continue;
584 584
585 // An object in the group is marked, so mark as gray all white heap 585 // An object in the group is marked, so mark as gray all white heap
586 // objects in the group. 586 // objects in the group.
587 for (int j = 0; j < objects.length(); ++j) { 587 for (int j = 0; j < objects.length(); ++j) {
588 if ((*objects[j])->IsHeapObject()) { 588 if ((*objects[j])->IsHeapObject()) {
589 MarkObject(HeapObject::cast(*objects[j])); 589 MarkObject(HeapObject::cast(*objects[j]));
590 } 590 }
591 } 591 }
592 // Once the entire group has been colored gray, set the object group 592 // Once the entire group has been colored gray, set the object group
593 // to NULL so it won't be processed again. 593 // to NULL so it won't be processed again.
594 delete object_groups[i]; 594 delete object_groups->at(i);
595 object_groups[i] = NULL; 595 object_groups->at(i) = NULL;
596 } 596 }
597 } 597 }
598 598
599 599
600 // Mark all objects reachable from the objects on the marking stack. 600 // Mark all objects reachable from the objects on the marking stack.
601 // Before: the marking stack contains zero or more heap object pointers. 601 // Before: the marking stack contains zero or more heap object pointers.
602 // After: the marking stack is empty, and all objects reachable from the 602 // After: the marking stack is empty, and all objects reachable from the
603 // marking stack have been marked, or are overflowed in the heap. 603 // marking stack have been marked, or are overflowed in the heap.
604 void MarkCompactCollector::EmptyMarkingStack(MarkingVisitor* visitor) { 604 void MarkCompactCollector::EmptyMarkingStack(MarkingVisitor* visitor) {
605 while (!marking_stack.is_empty()) { 605 while (!marking_stack.is_empty()) {
(...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 1887
1888 void MarkCompactCollector::RebuildRSets() { 1888 void MarkCompactCollector::RebuildRSets() {
1889 #ifdef DEBUG 1889 #ifdef DEBUG
1890 ASSERT(state_ == RELOCATE_OBJECTS); 1890 ASSERT(state_ == RELOCATE_OBJECTS);
1891 state_ = REBUILD_RSETS; 1891 state_ = REBUILD_RSETS;
1892 #endif 1892 #endif
1893 Heap::RebuildRSets(); 1893 Heap::RebuildRSets();
1894 } 1894 }
1895 1895
1896 } } // namespace v8::internal 1896 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/global-handles.cc ('k') | test/cctest/test-mark-compact.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698