| Index: runtime/vm/heap.cc
|
| diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
|
| index 1a4df3c328eb4f54527af2524f8d398937bea608..106af81acec0271b443b1418a20f2d397657260a 100644
|
| --- a/runtime/vm/heap.cc
|
| +++ b/runtime/vm/heap.cc
|
| @@ -8,11 +8,13 @@
|
| #include "platform/utils.h"
|
| #include "vm/compiler_stats.h"
|
| #include "vm/flags.h"
|
| +#include "vm/heap_profiler.h"
|
| #include "vm/isolate.h"
|
| #include "vm/object.h"
|
| #include "vm/os.h"
|
| #include "vm/pages.h"
|
| #include "vm/scavenger.h"
|
| +#include "vm/stack_frame.h"
|
| #include "vm/verifier.h"
|
| #include "vm/virtual_memory.h"
|
|
|
| @@ -213,6 +215,28 @@ void Heap::PrintSizes() const {
|
| }
|
|
|
|
|
| +void Heap::Profile(Dart_HeapProfileWriteCallback callback, void* stream) const {
|
| + HeapProfiler profiler(callback, stream);
|
| +
|
| + // Dump the root set.
|
| + HeapProfilerRootVisitor root_visitor(&profiler);
|
| + Isolate* isolate = Isolate::Current();
|
| + Isolate* vm_isolate = Dart::vm_isolate();
|
| + isolate->VisitObjectPointers(&root_visitor, false,
|
| + StackFrameIterator::kDontValidateFrames);
|
| + HeapProfilerWeakRootVisitor weak_root_visitor(&root_visitor);
|
| + isolate->VisitWeakPersistentHandles(&weak_root_visitor, true);
|
| +
|
| + // Dump the current and VM isolate heaps.
|
| + HeapProfilerObjectVisitor object_visitor(&profiler);
|
| + isolate->heap()->new_space_->VisitObjects(&object_visitor);
|
| + isolate->heap()->old_space_->VisitObjects(&object_visitor);
|
| + isolate->heap()->code_space_->VisitObjects(&object_visitor);
|
| + vm_isolate->heap()->new_space_->VisitObjects(&object_visitor);
|
| + vm_isolate->heap()->old_space_->VisitObjects(&object_visitor);
|
| +}
|
| +
|
| +
|
| #if defined(DEBUG)
|
| NoGCScope::NoGCScope() : StackResource(Isolate::Current()) {
|
| isolate()->IncrementNoGCScopeDepth();
|
|
|