| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/heap.h" | 5 #include "vm/heap.h" |
| 6 | 6 |
| 7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
| 8 #include "platform/utils.h" | 8 #include "platform/utils.h" |
| 9 #include "vm/flags.h" | 9 #include "vm/flags.h" |
| 10 #include "vm/isolate.h" | 10 #include "vm/isolate.h" |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 bool Heap::OldContains(uword addr) const { | 204 bool Heap::OldContains(uword addr) const { |
| 205 return old_space_->Contains(addr); | 205 return old_space_->Contains(addr); |
| 206 } | 206 } |
| 207 | 207 |
| 208 | 208 |
| 209 bool Heap::CodeContains(uword addr) const { | 209 bool Heap::CodeContains(uword addr) const { |
| 210 return old_space_->Contains(addr, HeapPage::kExecutable); | 210 return old_space_->Contains(addr, HeapPage::kExecutable); |
| 211 } | 211 } |
| 212 | 212 |
| 213 | 213 |
| 214 void Heap::IterateObjects(ObjectVisitor* visitor) const { | 214 void Heap::VisitObjects(ObjectVisitor* visitor) const { |
| 215 new_space_->VisitObjects(visitor); | 215 new_space_->VisitObjects(visitor); |
| 216 old_space_->VisitObjects(visitor); | 216 old_space_->VisitObjects(visitor); |
| 217 } | 217 } |
| 218 | 218 |
| 219 | 219 |
| 220 void Heap::IteratePointers(ObjectPointerVisitor* visitor) const { | 220 void Heap::VisitObjectPointers(ObjectPointerVisitor* visitor) const { |
| 221 new_space_->VisitObjectPointers(visitor); | 221 new_space_->VisitObjectPointers(visitor); |
| 222 old_space_->VisitObjectPointers(visitor); | 222 old_space_->VisitObjectPointers(visitor); |
| 223 } | 223 } |
| 224 | 224 |
| 225 | 225 |
| 226 void Heap::IterateNewPointers(ObjectPointerVisitor* visitor) const { | |
| 227 new_space_->VisitObjectPointers(visitor); | |
| 228 } | |
| 229 | |
| 230 | |
| 231 void Heap::IterateOldPointers(ObjectPointerVisitor* visitor) const { | |
| 232 old_space_->VisitObjectPointers(visitor); | |
| 233 } | |
| 234 | |
| 235 | |
| 236 void Heap::IterateNewObjects(ObjectVisitor* visitor) const { | |
| 237 new_space_->VisitObjects(visitor); | |
| 238 } | |
| 239 | |
| 240 | |
| 241 void Heap::IterateOldObjects(ObjectVisitor* visitor) const { | |
| 242 old_space_->VisitObjects(visitor); | |
| 243 } | |
| 244 | |
| 245 | |
| 246 RawInstructions* Heap::FindObjectInCodeSpace(FindObjectVisitor* visitor) const { | 226 RawInstructions* Heap::FindObjectInCodeSpace(FindObjectVisitor* visitor) const { |
| 247 // Only executable pages can have RawInstructions objects. | 227 // Only executable pages can have RawInstructions objects. |
| 248 RawObject* raw_obj = old_space_->FindObject(visitor, HeapPage::kExecutable); | 228 RawObject* raw_obj = old_space_->FindObject(visitor, HeapPage::kExecutable); |
| 249 ASSERT((raw_obj == Object::null()) || | 229 ASSERT((raw_obj == Object::null()) || |
| 250 (raw_obj->GetClassId() == kInstructionsCid)); | 230 (raw_obj->GetClassId() == kInstructionsCid)); |
| 251 return reinterpret_cast<RawInstructions*>(raw_obj); | 231 return reinterpret_cast<RawInstructions*>(raw_obj); |
| 252 } | 232 } |
| 253 | 233 |
| 254 | 234 |
| 255 RawObject* Heap::FindOldObject(FindObjectVisitor* visitor) const { | 235 RawObject* Heap::FindOldObject(FindObjectVisitor* visitor) const { |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 uword start = static_cast<uword>(-1); | 455 uword start = static_cast<uword>(-1); |
| 476 uword end = 0; | 456 uword end = 0; |
| 477 Isolate* vm_isolate = Dart::vm_isolate(); | 457 Isolate* vm_isolate = Dart::vm_isolate(); |
| 478 vm_isolate->heap()->GetMergedAddressRange(&start, &end); | 458 vm_isolate->heap()->GetMergedAddressRange(&start, &end); |
| 479 this->GetMergedAddressRange(&start, &end); | 459 this->GetMergedAddressRange(&start, &end); |
| 480 | 460 |
| 481 ObjectSet* allocated_set = new ObjectSet(start, end); | 461 ObjectSet* allocated_set = new ObjectSet(start, end); |
| 482 { | 462 { |
| 483 VerifyObjectVisitor object_visitor( | 463 VerifyObjectVisitor object_visitor( |
| 484 isolate(), allocated_set, mark_expectation); | 464 isolate(), allocated_set, mark_expectation); |
| 485 this->IterateObjects(&object_visitor); | 465 this->VisitObjects(&object_visitor); |
| 486 } | 466 } |
| 487 { | 467 { |
| 488 // VM isolate heap is premarked. | 468 // VM isolate heap is premarked. |
| 489 VerifyObjectVisitor vm_object_visitor( | 469 VerifyObjectVisitor vm_object_visitor( |
| 490 isolate(), allocated_set, kRequireMarked); | 470 isolate(), allocated_set, kRequireMarked); |
| 491 vm_isolate->heap()->IterateObjects(&vm_object_visitor); | 471 vm_isolate->heap()->VisitObjects(&vm_object_visitor); |
| 492 } | 472 } |
| 493 return allocated_set; | 473 return allocated_set; |
| 494 } | 474 } |
| 495 | 475 |
| 496 | 476 |
| 497 bool Heap::Verify(MarkExpectation mark_expectation) const { | 477 bool Heap::Verify(MarkExpectation mark_expectation) const { |
| 498 ObjectSet* allocated_set = CreateAllocatedObjectSet(mark_expectation); | 478 ObjectSet* allocated_set = CreateAllocatedObjectSet(mark_expectation); |
| 499 VerifyPointersVisitor visitor(isolate(), allocated_set); | 479 VerifyPointersVisitor visitor(isolate(), allocated_set); |
| 500 IteratePointers(&visitor); | 480 VisitObjectPointers(&visitor); |
| 501 delete allocated_set; | 481 delete allocated_set; |
| 502 // Only returning a value so that Heap::Validate can be called from an ASSERT. | 482 // Only returning a value so that Heap::Validate can be called from an ASSERT. |
| 503 return true; | 483 return true; |
| 504 } | 484 } |
| 505 | 485 |
| 506 | 486 |
| 507 void Heap::PrintSizes() const { | 487 void Heap::PrintSizes() const { |
| 508 OS::PrintErr("New space (%" Pd "k of %" Pd "k) " | 488 OS::PrintErr("New space (%" Pd "k of %" Pd "k) " |
| 509 "Old space (%" Pd "k of %" Pd "k)\n", | 489 "Old space (%" Pd "k of %" Pd "k)\n", |
| 510 (UsedInWords(kNew) / KBInWords), | 490 (UsedInWords(kNew) / KBInWords), |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 734 heap->DisableGrowthControl(); | 714 heap->DisableGrowthControl(); |
| 735 } | 715 } |
| 736 | 716 |
| 737 | 717 |
| 738 NoHeapGrowthControlScope::~NoHeapGrowthControlScope() { | 718 NoHeapGrowthControlScope::~NoHeapGrowthControlScope() { |
| 739 Heap* heap = reinterpret_cast<Isolate*>(isolate())->heap(); | 719 Heap* heap = reinterpret_cast<Isolate*>(isolate())->heap(); |
| 740 heap->SetGrowthControlState(current_growth_controller_state_); | 720 heap->SetGrowthControlState(current_growth_controller_state_); |
| 741 } | 721 } |
| 742 | 722 |
| 743 } // namespace dart | 723 } // namespace dart |
| OLD | NEW |