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 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 int promo_percent = (allocated == 0) ? 0 : | 446 int promo_percent = (allocated == 0) ? 0 : |
447 (100 * stats->promoted_count) / allocated; | 447 (100 * stats->promoted_count) / allocated; |
448 if (promo_percent >= FLAG_pretenure_threshold) { | 448 if (promo_percent >= FLAG_pretenure_threshold) { |
449 pretenure_policy_ += FLAG_pretenure_interval; | 449 pretenure_policy_ += FLAG_pretenure_interval; |
450 } else { | 450 } else { |
451 pretenure_policy_ = Utils::Maximum(0, pretenure_policy_ - 1); | 451 pretenure_policy_ = Utils::Maximum(0, pretenure_policy_ - 1); |
452 } | 452 } |
453 } | 453 } |
454 | 454 |
455 | 455 |
| 456 void Heap::UpdateGlobalMaxUsed() { |
| 457 ASSERT(isolate_ != NULL); |
| 458 // We are accessing the used in words count for both new and old space |
| 459 // without synchronizing. The value of this metric is approximate. |
| 460 isolate_->GetHeapGlobalUsedMaxMetric()->SetValue( |
| 461 (UsedInWords(Heap::kNew) * kWordSize) + |
| 462 (UsedInWords(Heap::kOld) * kWordSize)); |
| 463 } |
| 464 |
| 465 |
456 void Heap::SetGrowthControlState(bool state) { | 466 void Heap::SetGrowthControlState(bool state) { |
457 old_space_.SetGrowthControlState(state); | 467 old_space_.SetGrowthControlState(state); |
458 } | 468 } |
459 | 469 |
460 | 470 |
461 bool Heap::GrowthControlState() { | 471 bool Heap::GrowthControlState() { |
462 return old_space_.GrowthControlState(); | 472 return old_space_.GrowthControlState(); |
463 } | 473 } |
464 | 474 |
465 | 475 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 ObjectSet* allocated_set = CreateAllocatedObjectSet(mark_expectation); | 571 ObjectSet* allocated_set = CreateAllocatedObjectSet(mark_expectation); |
562 VerifyPointersVisitor visitor(isolate(), allocated_set); | 572 VerifyPointersVisitor visitor(isolate(), allocated_set); |
563 VisitObjectPointers(&visitor); | 573 VisitObjectPointers(&visitor); |
564 delete allocated_set; | 574 delete allocated_set; |
565 // Only returning a value so that Heap::Validate can be called from an ASSERT. | 575 // Only returning a value so that Heap::Validate can be called from an ASSERT. |
566 return true; | 576 return true; |
567 } | 577 } |
568 | 578 |
569 | 579 |
570 void Heap::PrintSizes() const { | 580 void Heap::PrintSizes() const { |
571 OS::PrintErr("New space (%" Pd "k of %" Pd "k) " | 581 OS::PrintErr("New space (%" Pd64 "k of %" Pd64 "k) " |
572 "Old space (%" Pd "k of %" Pd "k)\n", | 582 "Old space (%" Pd64 "k of %" Pd64 "k)\n", |
573 (UsedInWords(kNew) / KBInWords), | 583 (UsedInWords(kNew) / KBInWords), |
574 (CapacityInWords(kNew) / KBInWords), | 584 (CapacityInWords(kNew) / KBInWords), |
575 (UsedInWords(kOld) / KBInWords), | 585 (UsedInWords(kOld) / KBInWords), |
576 (CapacityInWords(kOld) / KBInWords)); | 586 (CapacityInWords(kOld) / KBInWords)); |
577 } | 587 } |
578 | 588 |
579 | 589 |
580 intptr_t Heap::UsedInWords(Space space) const { | 590 int64_t Heap::UsedInWords(Space space) const { |
581 return space == kNew ? new_space_.UsedInWords() : old_space_.UsedInWords(); | 591 return space == kNew ? new_space_.UsedInWords() : old_space_.UsedInWords(); |
582 } | 592 } |
583 | 593 |
584 | 594 |
585 intptr_t Heap::CapacityInWords(Space space) const { | 595 int64_t Heap::CapacityInWords(Space space) const { |
586 return space == kNew ? new_space_.CapacityInWords() : | 596 return space == kNew ? new_space_.CapacityInWords() : |
587 old_space_.CapacityInWords(); | 597 old_space_.CapacityInWords(); |
588 } | 598 } |
589 | 599 |
590 intptr_t Heap::ExternalInWords(Space space) const { | 600 |
| 601 int64_t Heap::ExternalInWords(Space space) const { |
591 return space == kNew ? new_space_.ExternalInWords() : | 602 return space == kNew ? new_space_.ExternalInWords() : |
592 old_space_.ExternalInWords(); | 603 old_space_.ExternalInWords(); |
593 } | 604 } |
594 | 605 |
| 606 |
595 int64_t Heap::GCTimeInMicros(Space space) const { | 607 int64_t Heap::GCTimeInMicros(Space space) const { |
596 if (space == kNew) { | 608 if (space == kNew) { |
597 return new_space_.gc_time_micros(); | 609 return new_space_.gc_time_micros(); |
598 } | 610 } |
599 return old_space_.gc_time_micros(); | 611 return old_space_.gc_time_micros(); |
600 } | 612 } |
601 | 613 |
602 | 614 |
603 intptr_t Heap::Collections(Space space) const { | 615 intptr_t Heap::Collections(Space space) const { |
604 if (space == kNew) { | 616 if (space == kNew) { |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 Dart::vm_isolate()->heap()->WriteProtect(false); | 793 Dart::vm_isolate()->heap()->WriteProtect(false); |
782 } | 794 } |
783 | 795 |
784 | 796 |
785 WritableVMIsolateScope::~WritableVMIsolateScope() { | 797 WritableVMIsolateScope::~WritableVMIsolateScope() { |
786 ASSERT(Dart::vm_isolate()->heap()->UsedInWords(Heap::kNew) == 0); | 798 ASSERT(Dart::vm_isolate()->heap()->UsedInWords(Heap::kNew) == 0); |
787 Dart::vm_isolate()->heap()->WriteProtect(true); | 799 Dart::vm_isolate()->heap()->WriteProtect(true); |
788 } | 800 } |
789 | 801 |
790 } // namespace dart | 802 } // namespace dart |
OLD | NEW |