| Index: runtime/vm/heap.cc
|
| diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
|
| index 63d0c9d75758c49981b45c49dd23f1813fd5e43c..ca05ed41e368dbd16d1f7a09927007c1b488a958 100644
|
| --- a/runtime/vm/heap.cc
|
| +++ b/runtime/vm/heap.cc
|
| @@ -160,6 +160,7 @@ void Heap::CollectGarbage(Space space, ApiCallbacks api_callbacks) {
|
| switch (space) {
|
| case kNew: {
|
| RecordBeforeGC(kNew, kNewSpace);
|
| + UpdateClassHeapStatsBeforeGC(kNew);
|
| new_space_->Scavenge(invoke_api_callbacks);
|
| RecordAfterGC();
|
| PrintStats();
|
| @@ -173,6 +174,7 @@ void Heap::CollectGarbage(Space space, ApiCallbacks api_callbacks) {
|
| case kCode: {
|
| bool promotion_failure = new_space_->HadPromotionFailure();
|
| RecordBeforeGC(kOld, promotion_failure ? kPromotionFailure : kOldSpace);
|
| + UpdateClassHeapStatsBeforeGC(kOld);
|
| old_space_->MarkSweep(invoke_api_callbacks);
|
| RecordAfterGC();
|
| PrintStats();
|
| @@ -192,6 +194,17 @@ void Heap::UpdateObjectHistogram() {
|
| }
|
|
|
|
|
| +void Heap::UpdateClassHeapStatsBeforeGC(Heap::Space space) {
|
| + Isolate* isolate = Isolate::Current();
|
| + ClassTable* class_table = isolate->class_table();
|
| + if (space == kNew) {
|
| + class_table->ResetCountersNew();
|
| + } else {
|
| + class_table->ResetCountersOld();
|
| + }
|
| +}
|
| +
|
| +
|
| void Heap::CollectGarbage(Space space) {
|
| ApiCallbacks api_callbacks;
|
| if (space == kOld) {
|
| @@ -205,10 +218,12 @@ void Heap::CollectGarbage(Space space) {
|
|
|
| void Heap::CollectAllGarbage() {
|
| RecordBeforeGC(kNew, kFull);
|
| + UpdateClassHeapStatsBeforeGC(kNew);
|
| new_space_->Scavenge(kInvokeApiCallbacks);
|
| RecordAfterGC();
|
| PrintStats();
|
| RecordBeforeGC(kOld, kFull);
|
| + UpdateClassHeapStatsBeforeGC(kOld);
|
| old_space_->MarkSweep(kInvokeApiCallbacks);
|
| RecordAfterGC();
|
| PrintStats();
|
|
|