| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 if (end - start >= kMinRangeForMarkingRecursion) { | 450 if (end - start >= kMinRangeForMarkingRecursion) { |
| 451 if (VisitUnmarkedObjects(heap, start, end)) return; | 451 if (VisitUnmarkedObjects(heap, start, end)) return; |
| 452 // We are close to a stack overflow, so just mark the objects. | 452 // We are close to a stack overflow, so just mark the objects. |
| 453 } | 453 } |
| 454 for (Object** p = start; p < end; p++) MarkObjectByPointer(heap, p); | 454 for (Object** p = start; p < end; p++) MarkObjectByPointer(heap, p); |
| 455 } | 455 } |
| 456 | 456 |
| 457 static inline void VisitCodeTarget(Heap* heap, RelocInfo* rinfo) { | 457 static inline void VisitCodeTarget(Heap* heap, RelocInfo* rinfo) { |
| 458 ASSERT(RelocInfo::IsCodeTarget(rinfo->rmode())); | 458 ASSERT(RelocInfo::IsCodeTarget(rinfo->rmode())); |
| 459 Code* code = Code::GetCodeFromTargetAddress(rinfo->target_address()); | 459 Code* code = Code::GetCodeFromTargetAddress(rinfo->target_address()); |
| 460 if (FLAG_cleanup_ics_at_gc && code->is_inline_cache_stub()) { | 460 if (FLAG_cleanup_code_caches_at_gc && code->is_inline_cache_stub()) { |
| 461 IC::Clear(rinfo->pc()); | 461 IC::Clear(rinfo->pc()); |
| 462 // Please note targets for cleared inline cached do not have to be | 462 // Please note targets for cleared inline cached do not have to be |
| 463 // marked since they are contained in HEAP->non_monomorphic_cache(). | 463 // marked since they are contained in HEAP->non_monomorphic_cache(). |
| 464 } else { | 464 } else { |
| 465 heap->mark_compact_collector()->MarkObject(code); | 465 heap->mark_compact_collector()->MarkObject(code); |
| 466 } | 466 } |
| 467 } | 467 } |
| 468 | 468 |
| 469 static void VisitGlobalPropertyCell(Heap* heap, RelocInfo* rinfo) { | 469 static void VisitGlobalPropertyCell(Heap* heap, RelocInfo* rinfo) { |
| 470 ASSERT(rinfo->rmode() == RelocInfo::GLOBAL_PROPERTY_CELL); | 470 ASSERT(rinfo->rmode() == RelocInfo::GLOBAL_PROPERTY_CELL); |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1049 } | 1049 } |
| 1050 } | 1050 } |
| 1051 }; | 1051 }; |
| 1052 | 1052 |
| 1053 | 1053 |
| 1054 void MarkCompactCollector::MarkUnmarkedObject(HeapObject* object) { | 1054 void MarkCompactCollector::MarkUnmarkedObject(HeapObject* object) { |
| 1055 ASSERT(!object->IsMarked()); | 1055 ASSERT(!object->IsMarked()); |
| 1056 ASSERT(HEAP->Contains(object)); | 1056 ASSERT(HEAP->Contains(object)); |
| 1057 if (object->IsMap()) { | 1057 if (object->IsMap()) { |
| 1058 Map* map = Map::cast(object); | 1058 Map* map = Map::cast(object); |
| 1059 if (FLAG_cleanup_caches_in_maps_at_gc) { | 1059 if (FLAG_cleanup_code_caches_at_gc) { |
| 1060 map->ClearCodeCache(heap()); | 1060 map->ClearCodeCache(heap()); |
| 1061 } | 1061 } |
| 1062 SetMark(map); | 1062 SetMark(map); |
| 1063 if (FLAG_collect_maps && | 1063 if (FLAG_collect_maps && |
| 1064 map->instance_type() >= FIRST_JS_OBJECT_TYPE && | 1064 map->instance_type() >= FIRST_JS_OBJECT_TYPE && |
| 1065 map->instance_type() <= JS_FUNCTION_TYPE) { | 1065 map->instance_type() <= JS_FUNCTION_TYPE) { |
| 1066 MarkMapContents(map); | 1066 MarkMapContents(map); |
| 1067 } else { | 1067 } else { |
| 1068 marking_stack_.Push(map); | 1068 marking_stack_.Push(map); |
| 1069 } | 1069 } |
| (...skipping 2059 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3129 } | 3129 } |
| 3130 | 3130 |
| 3131 | 3131 |
| 3132 void MarkCompactCollector::Initialize() { | 3132 void MarkCompactCollector::Initialize() { |
| 3133 StaticPointersToNewGenUpdatingVisitor::Initialize(); | 3133 StaticPointersToNewGenUpdatingVisitor::Initialize(); |
| 3134 StaticMarkingVisitor::Initialize(); | 3134 StaticMarkingVisitor::Initialize(); |
| 3135 } | 3135 } |
| 3136 | 3136 |
| 3137 | 3137 |
| 3138 } } // namespace v8::internal | 3138 } } // namespace v8::internal |
| OLD | NEW |