| Index: runtime/vm/object_graph.cc
|
| diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
|
| index 0f630c7ff04d6393513ece058414fd1f461f0ba7..ea8d2a742d34875bdd038ed5d418ca028a21c196 100644
|
| --- a/runtime/vm/object_graph.cc
|
| +++ b/runtime/vm/object_graph.cc
|
| @@ -205,7 +205,6 @@ ObjectGraph::ObjectGraph(Thread* thread) : StackResource(thread) {
|
| ObjectGraph::~ObjectGraph() {}
|
|
|
| void ObjectGraph::IterateObjects(ObjectGraph::Visitor* visitor) {
|
| - NoSafepointScope no_safepoint_scope_;
|
| Stack stack(isolate());
|
| isolate()->VisitObjectPointers(&stack, false);
|
| stack.TraverseGraph(visitor);
|
| @@ -213,7 +212,6 @@ void ObjectGraph::IterateObjects(ObjectGraph::Visitor* visitor) {
|
| }
|
|
|
| void ObjectGraph::IterateUserObjects(ObjectGraph::Visitor* visitor) {
|
| - NoSafepointScope no_safepoint_scope_;
|
| Stack stack(isolate());
|
| IterateUserFields(&stack);
|
| stack.include_vm_objects_ = false;
|
| @@ -223,7 +221,6 @@ void ObjectGraph::IterateUserObjects(ObjectGraph::Visitor* visitor) {
|
|
|
| void ObjectGraph::IterateObjectsFrom(const Object& root,
|
| ObjectGraph::Visitor* visitor) {
|
| - NoSafepointScope no_safepoint_scope_;
|
| Stack stack(isolate());
|
| RawObject* root_raw = root.raw();
|
| stack.VisitPointer(&root_raw);
|
| @@ -252,11 +249,11 @@ class InstanceAccumulator : public ObjectVisitor {
|
|
|
| void ObjectGraph::IterateObjectsFrom(intptr_t class_id,
|
| ObjectGraph::Visitor* visitor) {
|
| - NoSafepointScope no_safepoint_scope_;
|
| + HeapIterationScope iteration(thread());
|
| Stack stack(isolate());
|
|
|
| InstanceAccumulator accumulator(&stack, class_id);
|
| - isolate()->heap()->VisitObjectsNoImagePages(&accumulator);
|
| + iteration.IterateObjectsNoImagePages(&accumulator);
|
|
|
| stack.TraverseGraph(visitor);
|
| Unmarker::UnmarkAll(isolate());
|
| @@ -301,7 +298,7 @@ class SizeExcludingClassVisitor : public SizeVisitor {
|
| };
|
|
|
| intptr_t ObjectGraph::SizeRetainedByInstance(const Object& obj) {
|
| - HeapIterationScope iteration_scope(true);
|
| + HeapIterationScope iteration_scope(Thread::Current(), true);
|
| SizeVisitor total;
|
| IterateObjects(&total);
|
| intptr_t size_total = total.size();
|
| @@ -312,14 +309,14 @@ intptr_t ObjectGraph::SizeRetainedByInstance(const Object& obj) {
|
| }
|
|
|
| intptr_t ObjectGraph::SizeReachableByInstance(const Object& obj) {
|
| - HeapIterationScope iteration_scope(true);
|
| + HeapIterationScope iteration_scope(Thread::Current(), true);
|
| SizeVisitor total;
|
| IterateObjectsFrom(obj, &total);
|
| return total.size();
|
| }
|
|
|
| intptr_t ObjectGraph::SizeRetainedByClass(intptr_t class_id) {
|
| - HeapIterationScope iteration_scope(true);
|
| + HeapIterationScope iteration_scope(Thread::Current(), true);
|
| SizeVisitor total;
|
| IterateObjects(&total);
|
| intptr_t size_total = total.size();
|
| @@ -330,7 +327,7 @@ intptr_t ObjectGraph::SizeRetainedByClass(intptr_t class_id) {
|
| }
|
|
|
| intptr_t ObjectGraph::SizeReachableByClass(intptr_t class_id) {
|
| - HeapIterationScope iteration_scope(true);
|
| + HeapIterationScope iteration_scope(Thread::Current(), true);
|
| SizeVisitor total;
|
| IterateObjectsFrom(class_id, &total);
|
| return total.size();
|
| @@ -341,7 +338,6 @@ class RetainingPathVisitor : public ObjectGraph::Visitor {
|
| // We cannot use a GrowableObjectArray, since we must not trigger GC.
|
| RetainingPathVisitor(RawObject* obj, const Array& path)
|
| : thread_(Thread::Current()), obj_(obj), path_(path), length_(0) {
|
| - ASSERT(Thread::Current()->no_safepoint_scope_depth() != 0);
|
| }
|
|
|
| intptr_t length() const { return length_; }
|
| @@ -424,8 +420,7 @@ class RetainingPathVisitor : public ObjectGraph::Visitor {
|
| };
|
|
|
| intptr_t ObjectGraph::RetainingPath(Object* obj, const Array& path) {
|
| - NoSafepointScope no_safepoint_scope_;
|
| - HeapIterationScope iteration_scope(true);
|
| + HeapIterationScope iteration_scope(Thread::Current(), true);
|
| // To break the trivial path, the handle 'obj' is temporarily cleared during
|
| // the search, but restored before returning.
|
| RawObject* raw = obj->raw();
|
| @@ -504,9 +499,9 @@ class InboundReferencesVisitor : public ObjectVisitor,
|
|
|
| intptr_t ObjectGraph::InboundReferences(Object* obj, const Array& references) {
|
| Object& scratch = Object::Handle();
|
| - NoSafepointScope no_safepoint_scope;
|
| + HeapIterationScope iteration(Thread::Current());
|
| InboundReferencesVisitor visitor(isolate(), obj->raw(), references, &scratch);
|
| - isolate()->heap()->IterateObjects(&visitor);
|
| + iteration.IterateObjects(&visitor);
|
| return visitor.length();
|
| }
|
|
|
| @@ -609,7 +604,7 @@ intptr_t ObjectGraph::Serialize(WriteStream* stream,
|
| }
|
| // Current encoding assumes objects do not move, so promote everything to old.
|
| isolate()->heap()->new_space()->Evacuate();
|
| - HeapIterationScope iteration_scope(true);
|
| + HeapIterationScope iteration_scope(Thread::Current(), true);
|
|
|
| RawObject* kRootAddress = reinterpret_cast<RawObject*>(kHeapObjectTag);
|
| const intptr_t kRootCid = kIllegalCid;
|
|
|