| 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 5045 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5056 | 5056 |
| 5057 | 5057 |
| 5058 void Heap::IterateRoots(ObjectVisitor* v, VisitMode mode) { | 5058 void Heap::IterateRoots(ObjectVisitor* v, VisitMode mode) { |
| 5059 IterateStrongRoots(v, mode); | 5059 IterateStrongRoots(v, mode); |
| 5060 IterateWeakRoots(v, mode); | 5060 IterateWeakRoots(v, mode); |
| 5061 } | 5061 } |
| 5062 | 5062 |
| 5063 | 5063 |
| 5064 void Heap::IterateWeakRoots(ObjectVisitor* v, VisitMode mode) { | 5064 void Heap::IterateWeakRoots(ObjectVisitor* v, VisitMode mode) { |
| 5065 v->VisitPointer(reinterpret_cast<Object**>(&roots_[kSymbolTableRootIndex])); | 5065 v->VisitPointer(reinterpret_cast<Object**>(&roots_[kSymbolTableRootIndex])); |
| 5066 v->Synchronize("symbol_table"); | 5066 v->Synchronize(VisitorSynchronization::kSymbolTable); |
| 5067 if (mode != VISIT_ALL_IN_SCAVENGE && | 5067 if (mode != VISIT_ALL_IN_SCAVENGE && |
| 5068 mode != VISIT_ALL_IN_SWEEP_NEWSPACE) { | 5068 mode != VISIT_ALL_IN_SWEEP_NEWSPACE) { |
| 5069 // Scavenge collections have special processing for this. | 5069 // Scavenge collections have special processing for this. |
| 5070 external_string_table_.Iterate(v); | 5070 external_string_table_.Iterate(v); |
| 5071 } | 5071 } |
| 5072 v->Synchronize("external_string_table"); | 5072 v->Synchronize(VisitorSynchronization::kExternalStringsTable); |
| 5073 } | 5073 } |
| 5074 | 5074 |
| 5075 | 5075 |
| 5076 void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { | 5076 void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { |
| 5077 v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]); | 5077 v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]); |
| 5078 v->Synchronize("strong_root_list"); | 5078 v->Synchronize(VisitorSynchronization::kStrongRootList); |
| 5079 | 5079 |
| 5080 v->VisitPointer(BitCast<Object**>(&hidden_symbol_)); | 5080 v->VisitPointer(BitCast<Object**>(&hidden_symbol_)); |
| 5081 v->Synchronize("symbol"); | 5081 v->Synchronize(VisitorSynchronization::kSymbol); |
| 5082 | 5082 |
| 5083 isolate_->bootstrapper()->Iterate(v); | 5083 isolate_->bootstrapper()->Iterate(v); |
| 5084 v->Synchronize("bootstrapper"); | 5084 v->Synchronize(VisitorSynchronization::kBootstrapper); |
| 5085 isolate_->Iterate(v); | 5085 isolate_->Iterate(v); |
| 5086 v->Synchronize("top"); | 5086 v->Synchronize(VisitorSynchronization::kTop); |
| 5087 Relocatable::Iterate(v); | 5087 Relocatable::Iterate(v); |
| 5088 v->Synchronize("relocatable"); | 5088 v->Synchronize(VisitorSynchronization::kRelocatable); |
| 5089 | 5089 |
| 5090 #ifdef ENABLE_DEBUGGER_SUPPORT | 5090 #ifdef ENABLE_DEBUGGER_SUPPORT |
| 5091 isolate_->debug()->Iterate(v); | 5091 isolate_->debug()->Iterate(v); |
| 5092 if (isolate_->deoptimizer_data() != NULL) { | 5092 if (isolate_->deoptimizer_data() != NULL) { |
| 5093 isolate_->deoptimizer_data()->Iterate(v); | 5093 isolate_->deoptimizer_data()->Iterate(v); |
| 5094 } | 5094 } |
| 5095 #endif | 5095 #endif |
| 5096 v->Synchronize("debug"); | 5096 v->Synchronize(VisitorSynchronization::kDebug); |
| 5097 isolate_->compilation_cache()->Iterate(v); | 5097 isolate_->compilation_cache()->Iterate(v); |
| 5098 v->Synchronize("compilationcache"); | 5098 v->Synchronize(VisitorSynchronization::kCompilationCache); |
| 5099 | 5099 |
| 5100 // Iterate over local handles in handle scopes. | 5100 // Iterate over local handles in handle scopes. |
| 5101 isolate_->handle_scope_implementer()->Iterate(v); | 5101 isolate_->handle_scope_implementer()->Iterate(v); |
| 5102 v->Synchronize("handlescope"); | 5102 v->Synchronize(VisitorSynchronization::kHandleScope); |
| 5103 | 5103 |
| 5104 // Iterate over the builtin code objects and code stubs in the | 5104 // Iterate over the builtin code objects and code stubs in the |
| 5105 // heap. Note that it is not necessary to iterate over code objects | 5105 // heap. Note that it is not necessary to iterate over code objects |
| 5106 // on scavenge collections. | 5106 // on scavenge collections. |
| 5107 if (mode != VISIT_ALL_IN_SCAVENGE) { | 5107 if (mode != VISIT_ALL_IN_SCAVENGE) { |
| 5108 isolate_->builtins()->IterateBuiltins(v); | 5108 isolate_->builtins()->IterateBuiltins(v); |
| 5109 } | 5109 } |
| 5110 v->Synchronize("builtins"); | 5110 v->Synchronize(VisitorSynchronization::kBuiltins); |
| 5111 | 5111 |
| 5112 // Iterate over global handles. | 5112 // Iterate over global handles. |
| 5113 switch (mode) { | 5113 switch (mode) { |
| 5114 case VISIT_ONLY_STRONG: | 5114 case VISIT_ONLY_STRONG: |
| 5115 isolate_->global_handles()->IterateStrongRoots(v); | 5115 isolate_->global_handles()->IterateStrongRoots(v); |
| 5116 break; | 5116 break; |
| 5117 case VISIT_ALL_IN_SCAVENGE: | 5117 case VISIT_ALL_IN_SCAVENGE: |
| 5118 isolate_->global_handles()->IterateNewSpaceStrongAndDependentRoots(v); | 5118 isolate_->global_handles()->IterateNewSpaceStrongAndDependentRoots(v); |
| 5119 break; | 5119 break; |
| 5120 case VISIT_ALL_IN_SWEEP_NEWSPACE: | 5120 case VISIT_ALL_IN_SWEEP_NEWSPACE: |
| 5121 case VISIT_ALL: | 5121 case VISIT_ALL: |
| 5122 isolate_->global_handles()->IterateAllRoots(v); | 5122 isolate_->global_handles()->IterateAllRoots(v); |
| 5123 break; | 5123 break; |
| 5124 } | 5124 } |
| 5125 v->Synchronize("globalhandles"); | 5125 v->Synchronize(VisitorSynchronization::kGlobalHandles); |
| 5126 | 5126 |
| 5127 // Iterate over pointers being held by inactive threads. | 5127 // Iterate over pointers being held by inactive threads. |
| 5128 isolate_->thread_manager()->Iterate(v); | 5128 isolate_->thread_manager()->Iterate(v); |
| 5129 v->Synchronize("threadmanager"); | 5129 v->Synchronize(VisitorSynchronization::kThreadManager); |
| 5130 | 5130 |
| 5131 // Iterate over the pointers the Serialization/Deserialization code is | 5131 // Iterate over the pointers the Serialization/Deserialization code is |
| 5132 // holding. | 5132 // holding. |
| 5133 // During garbage collection this keeps the partial snapshot cache alive. | 5133 // During garbage collection this keeps the partial snapshot cache alive. |
| 5134 // During deserialization of the startup snapshot this creates the partial | 5134 // During deserialization of the startup snapshot this creates the partial |
| 5135 // snapshot cache and deserializes the objects it refers to. During | 5135 // snapshot cache and deserializes the objects it refers to. During |
| 5136 // serialization this does nothing, since the partial snapshot cache is | 5136 // serialization this does nothing, since the partial snapshot cache is |
| 5137 // empty. However the next thing we do is create the partial snapshot, | 5137 // empty. However the next thing we do is create the partial snapshot, |
| 5138 // filling up the partial snapshot cache with objects it needs as we go. | 5138 // filling up the partial snapshot cache with objects it needs as we go. |
| 5139 SerializerDeserializer::Iterate(v); | 5139 SerializerDeserializer::Iterate(v); |
| (...skipping 1343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6483 isolate_->heap()->store_buffer()->Compact(); | 6483 isolate_->heap()->store_buffer()->Compact(); |
| 6484 isolate_->heap()->store_buffer()->Filter(MemoryChunk::ABOUT_TO_BE_FREED); | 6484 isolate_->heap()->store_buffer()->Filter(MemoryChunk::ABOUT_TO_BE_FREED); |
| 6485 for (chunk = chunks_queued_for_free_; chunk != NULL; chunk = next) { | 6485 for (chunk = chunks_queued_for_free_; chunk != NULL; chunk = next) { |
| 6486 next = chunk->next_chunk(); | 6486 next = chunk->next_chunk(); |
| 6487 isolate_->memory_allocator()->Free(chunk); | 6487 isolate_->memory_allocator()->Free(chunk); |
| 6488 } | 6488 } |
| 6489 chunks_queued_for_free_ = NULL; | 6489 chunks_queued_for_free_ = NULL; |
| 6490 } | 6490 } |
| 6491 | 6491 |
| 6492 } } // namespace v8::internal | 6492 } } // namespace v8::internal |
| OLD | NEW |