| Index: runtime/vm/heap.cc
|
| diff --git a/runtime/vm/heap.cc b/runtime/vm/heap.cc
|
| index afe85e85dde505a8970164f6c0bd7a891458677c..82c1f9c4e062fd782d0de0a1391e41270288f485 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"
|
|
|
| @@ -220,6 +222,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();
|
|
|