| Index: runtime/vm/heap.cc
|
| diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
|
| index ef4e14cbe5d21520d732074f25da7c7a9fa3b4de..bb8d4469144f63d1a952a38e2f59c1160a9bc09f 100644
|
| --- a/runtime/vm/heap.cc
|
| +++ b/runtime/vm/heap.cc
|
| @@ -381,6 +381,7 @@ void Heap::CollectNewSpaceGarbage(Thread* thread,
|
| UpdatePretenurePolicy();
|
| RecordAfterGC(kNew);
|
| PrintStats();
|
| + NOT_IN_PRODUCT(PrintStatsToTimeline(&tds));
|
| EndNewSpaceGC();
|
| if ((reason == kNewSpace) && old_space_.NeedsGarbageCollection()) {
|
| // Old collections should call the API callbacks.
|
| @@ -403,6 +404,7 @@ void Heap::CollectOldSpaceGarbage(Thread* thread,
|
| old_space_.MarkSweep(invoke_api_callbacks);
|
| RecordAfterGC(kOld);
|
| PrintStats();
|
| + NOT_IN_PRODUCT(PrintStatsToTimeline(&tds));
|
| EndOldSpaceGC();
|
| }
|
| }
|
| @@ -834,6 +836,64 @@ void Heap::PrintStats() {
|
| }
|
|
|
|
|
| +void Heap::PrintStatsToTimeline(TimelineEventScope* event) {
|
| + if ((event == NULL) || !event->enabled()) {
|
| + return;
|
| + }
|
| + event->SetNumArguments(12);
|
| + event->FormatArgument(0,
|
| + "Before.New.Used (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.before_.new_.used_in_words));
|
| + event->FormatArgument(1,
|
| + "After.New.Used (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.after_.new_.used_in_words));
|
| + event->FormatArgument(2,
|
| + "Before.Old.Used (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.before_.old_.used_in_words));
|
| + event->FormatArgument(3,
|
| + "After.Old.Used (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.after_.old_.used_in_words));
|
| +
|
| + event->FormatArgument(4,
|
| + "Before.New.Capacity (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.before_.new_.capacity_in_words));
|
| + event->FormatArgument(5,
|
| + "After.New.Capacity (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.after_.new_.capacity_in_words));
|
| + event->FormatArgument(6,
|
| + "Before.Old.Capacity (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.before_.old_.capacity_in_words));
|
| + event->FormatArgument(7,
|
| + "After.Old.Capacity (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.after_.old_.capacity_in_words));
|
| +
|
| + event->FormatArgument(8,
|
| + "Before.New.External (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.before_.new_.external_in_words));
|
| + event->FormatArgument(9,
|
| + "After.New.External (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.after_.new_.external_in_words));
|
| + event->FormatArgument(10,
|
| + "Before.Old.External (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.before_.old_.external_in_words));
|
| + event->FormatArgument(11,
|
| + "After.Old.External (kB)",
|
| + "%" Pd "",
|
| + RoundWordsToKB(stats_.after_.old_.external_in_words));
|
| +}
|
| +
|
| +
|
| NoHeapGrowthControlScope::NoHeapGrowthControlScope()
|
| : StackResource(Thread::Current()) {
|
| Heap* heap = reinterpret_cast<Isolate*>(isolate())->heap();
|
|
|