| 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 5133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5144 | 5144 |
| 5145 | 5145 |
| 5146 void Heap::IterateRoots(ObjectVisitor* v, VisitMode mode) { | 5146 void Heap::IterateRoots(ObjectVisitor* v, VisitMode mode) { |
| 5147 IterateStrongRoots(v, mode); | 5147 IterateStrongRoots(v, mode); |
| 5148 IterateWeakRoots(v, mode); | 5148 IterateWeakRoots(v, mode); |
| 5149 } | 5149 } |
| 5150 | 5150 |
| 5151 | 5151 |
| 5152 void Heap::IterateWeakRoots(ObjectVisitor* v, VisitMode mode) { | 5152 void Heap::IterateWeakRoots(ObjectVisitor* v, VisitMode mode) { |
| 5153 v->VisitPointer(reinterpret_cast<Object**>(&roots_[kSymbolTableRootIndex])); | 5153 v->VisitPointer(reinterpret_cast<Object**>(&roots_[kSymbolTableRootIndex])); |
| 5154 v->Synchronize("symbol_table"); | 5154 v->Synchronize(VisitorSynchronization::kSymbolTable); |
| 5155 if (mode != VISIT_ALL_IN_SCAVENGE && | 5155 if (mode != VISIT_ALL_IN_SCAVENGE && |
| 5156 mode != VISIT_ALL_IN_SWEEP_NEWSPACE) { | 5156 mode != VISIT_ALL_IN_SWEEP_NEWSPACE) { |
| 5157 // Scavenge collections have special processing for this. | 5157 // Scavenge collections have special processing for this. |
| 5158 external_string_table_.Iterate(v); | 5158 external_string_table_.Iterate(v); |
| 5159 } | 5159 } |
| 5160 v->Synchronize("external_string_table"); | 5160 v->Synchronize(VisitorSynchronization::kExternalStringsTable); |
| 5161 } | 5161 } |
| 5162 | 5162 |
| 5163 | 5163 |
| 5164 void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { | 5164 void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { |
| 5165 v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]); | 5165 v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]); |
| 5166 v->Synchronize("strong_root_list"); | 5166 v->Synchronize(VisitorSynchronization::kStrongRootList); |
| 5167 | 5167 |
| 5168 v->VisitPointer(BitCast<Object**>(&hidden_symbol_)); | 5168 v->VisitPointer(BitCast<Object**>(&hidden_symbol_)); |
| 5169 v->Synchronize("symbol"); | 5169 v->Synchronize(VisitorSynchronization::kSymbol); |
| 5170 | 5170 |
| 5171 isolate_->bootstrapper()->Iterate(v); | 5171 isolate_->bootstrapper()->Iterate(v); |
| 5172 v->Synchronize("bootstrapper"); | 5172 v->Synchronize(VisitorSynchronization::kBootstrapper); |
| 5173 isolate_->Iterate(v); | 5173 isolate_->Iterate(v); |
| 5174 v->Synchronize("top"); | 5174 v->Synchronize(VisitorSynchronization::kTop); |
| 5175 Relocatable::Iterate(v); | 5175 Relocatable::Iterate(v); |
| 5176 v->Synchronize("relocatable"); | 5176 v->Synchronize(VisitorSynchronization::kRelocatable); |
| 5177 | 5177 |
| 5178 #ifdef ENABLE_DEBUGGER_SUPPORT | 5178 #ifdef ENABLE_DEBUGGER_SUPPORT |
| 5179 isolate_->debug()->Iterate(v); | 5179 isolate_->debug()->Iterate(v); |
| 5180 if (isolate_->deoptimizer_data() != NULL) { | 5180 if (isolate_->deoptimizer_data() != NULL) { |
| 5181 isolate_->deoptimizer_data()->Iterate(v); | 5181 isolate_->deoptimizer_data()->Iterate(v); |
| 5182 } | 5182 } |
| 5183 #endif | 5183 #endif |
| 5184 v->Synchronize("debug"); | 5184 v->Synchronize(VisitorSynchronization::kDebug); |
| 5185 isolate_->compilation_cache()->Iterate(v); | 5185 isolate_->compilation_cache()->Iterate(v); |
| 5186 v->Synchronize("compilationcache"); | 5186 v->Synchronize(VisitorSynchronization::kCompilationCache); |
| 5187 | 5187 |
| 5188 // Iterate over local handles in handle scopes. | 5188 // Iterate over local handles in handle scopes. |
| 5189 isolate_->handle_scope_implementer()->Iterate(v); | 5189 isolate_->handle_scope_implementer()->Iterate(v); |
| 5190 v->Synchronize("handlescope"); | 5190 v->Synchronize(VisitorSynchronization::kHandleScope); |
| 5191 | 5191 |
| 5192 // Iterate over the builtin code objects and code stubs in the | 5192 // Iterate over the builtin code objects and code stubs in the |
| 5193 // heap. Note that it is not necessary to iterate over code objects | 5193 // heap. Note that it is not necessary to iterate over code objects |
| 5194 // on scavenge collections. | 5194 // on scavenge collections. |
| 5195 if (mode != VISIT_ALL_IN_SCAVENGE) { | 5195 if (mode != VISIT_ALL_IN_SCAVENGE) { |
| 5196 isolate_->builtins()->IterateBuiltins(v); | 5196 isolate_->builtins()->IterateBuiltins(v); |
| 5197 } | 5197 } |
| 5198 v->Synchronize("builtins"); | 5198 v->Synchronize(VisitorSynchronization::kBuiltins); |
| 5199 | 5199 |
| 5200 // Iterate over global handles. | 5200 // Iterate over global handles. |
| 5201 switch (mode) { | 5201 switch (mode) { |
| 5202 case VISIT_ONLY_STRONG: | 5202 case VISIT_ONLY_STRONG: |
| 5203 isolate_->global_handles()->IterateStrongRoots(v); | 5203 isolate_->global_handles()->IterateStrongRoots(v); |
| 5204 break; | 5204 break; |
| 5205 case VISIT_ALL_IN_SCAVENGE: | 5205 case VISIT_ALL_IN_SCAVENGE: |
| 5206 isolate_->global_handles()->IterateNewSpaceStrongAndDependentRoots(v); | 5206 isolate_->global_handles()->IterateNewSpaceStrongAndDependentRoots(v); |
| 5207 break; | 5207 break; |
| 5208 case VISIT_ALL_IN_SWEEP_NEWSPACE: | 5208 case VISIT_ALL_IN_SWEEP_NEWSPACE: |
| 5209 case VISIT_ALL: | 5209 case VISIT_ALL: |
| 5210 isolate_->global_handles()->IterateAllRoots(v); | 5210 isolate_->global_handles()->IterateAllRoots(v); |
| 5211 break; | 5211 break; |
| 5212 } | 5212 } |
| 5213 v->Synchronize("globalhandles"); | 5213 v->Synchronize(VisitorSynchronization::kGlobalHandles); |
| 5214 | 5214 |
| 5215 // Iterate over pointers being held by inactive threads. | 5215 // Iterate over pointers being held by inactive threads. |
| 5216 isolate_->thread_manager()->Iterate(v); | 5216 isolate_->thread_manager()->Iterate(v); |
| 5217 v->Synchronize("threadmanager"); | 5217 v->Synchronize(VisitorSynchronization::kThreadManager); |
| 5218 | 5218 |
| 5219 // Iterate over the pointers the Serialization/Deserialization code is | 5219 // Iterate over the pointers the Serialization/Deserialization code is |
| 5220 // holding. | 5220 // holding. |
| 5221 // During garbage collection this keeps the partial snapshot cache alive. | 5221 // During garbage collection this keeps the partial snapshot cache alive. |
| 5222 // During deserialization of the startup snapshot this creates the partial | 5222 // During deserialization of the startup snapshot this creates the partial |
| 5223 // snapshot cache and deserializes the objects it refers to. During | 5223 // snapshot cache and deserializes the objects it refers to. During |
| 5224 // serialization this does nothing, since the partial snapshot cache is | 5224 // serialization this does nothing, since the partial snapshot cache is |
| 5225 // empty. However the next thing we do is create the partial snapshot, | 5225 // empty. However the next thing we do is create the partial snapshot, |
| 5226 // filling up the partial snapshot cache with objects it needs as we go. | 5226 // filling up the partial snapshot cache with objects it needs as we go. |
| 5227 SerializerDeserializer::Iterate(v); | 5227 SerializerDeserializer::Iterate(v); |
| (...skipping 1355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6583 isolate_->heap()->store_buffer()->Compact(); | 6583 isolate_->heap()->store_buffer()->Compact(); |
| 6584 isolate_->heap()->store_buffer()->Filter(MemoryChunk::ABOUT_TO_BE_FREED); | 6584 isolate_->heap()->store_buffer()->Filter(MemoryChunk::ABOUT_TO_BE_FREED); |
| 6585 for (chunk = chunks_queued_for_free_; chunk != NULL; chunk = next) { | 6585 for (chunk = chunks_queued_for_free_; chunk != NULL; chunk = next) { |
| 6586 next = chunk->next_chunk(); | 6586 next = chunk->next_chunk(); |
| 6587 isolate_->memory_allocator()->Free(chunk); | 6587 isolate_->memory_allocator()->Free(chunk); |
| 6588 } | 6588 } |
| 6589 chunks_queued_for_free_ = NULL; | 6589 chunks_queued_for_free_ = NULL; |
| 6590 } | 6590 } |
| 6591 | 6591 |
| 6592 } } // namespace v8::internal | 6592 } } // namespace v8::internal |
| OLD | NEW |