| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/object_graph.h" | 5 #include "vm/object_graph.h" |
| 6 | 6 |
| 7 #include "vm/dart.h" | 7 #include "vm/dart.h" |
| 8 #include "vm/growable_array.h" | 8 #include "vm/growable_array.h" |
| 9 #include "vm/isolate.h" | 9 #include "vm/isolate.h" |
| 10 #include "vm/object.h" | 10 #include "vm/object.h" |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 Unmarker() {} | 142 Unmarker() {} |
| 143 | 143 |
| 144 void VisitObject(RawObject* obj) { | 144 void VisitObject(RawObject* obj) { |
| 145 if (obj->IsMarked()) { | 145 if (obj->IsMarked()) { |
| 146 obj->ClearMarkBit(); | 146 obj->ClearMarkBit(); |
| 147 } | 147 } |
| 148 } | 148 } |
| 149 | 149 |
| 150 static void UnmarkAll(Isolate* isolate) { | 150 static void UnmarkAll(Isolate* isolate) { |
| 151 Unmarker unmarker; | 151 Unmarker unmarker; |
| 152 isolate->heap()->VisitObjectsNoExternalPages(&unmarker); | 152 isolate->heap()->VisitObjectsNoImagePages(&unmarker); |
| 153 } | 153 } |
| 154 | 154 |
| 155 private: | 155 private: |
| 156 DISALLOW_COPY_AND_ASSIGN(Unmarker); | 156 DISALLOW_COPY_AND_ASSIGN(Unmarker); |
| 157 }; | 157 }; |
| 158 | 158 |
| 159 | 159 |
| 160 ObjectGraph::ObjectGraph(Thread* thread) : StackResource(thread) { | 160 ObjectGraph::ObjectGraph(Thread* thread) : StackResource(thread) { |
| 161 // The VM isolate has all its objects pre-marked, so iterating over it | 161 // The VM isolate has all its objects pre-marked, so iterating over it |
| 162 // would be a no-op. | 162 // would be a no-op. |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 DISALLOW_COPY_AND_ASSIGN(InstanceAccumulator); | 206 DISALLOW_COPY_AND_ASSIGN(InstanceAccumulator); |
| 207 }; | 207 }; |
| 208 | 208 |
| 209 | 209 |
| 210 void ObjectGraph::IterateObjectsFrom(intptr_t class_id, | 210 void ObjectGraph::IterateObjectsFrom(intptr_t class_id, |
| 211 ObjectGraph::Visitor* visitor) { | 211 ObjectGraph::Visitor* visitor) { |
| 212 NoSafepointScope no_safepoint_scope_; | 212 NoSafepointScope no_safepoint_scope_; |
| 213 Stack stack(isolate()); | 213 Stack stack(isolate()); |
| 214 | 214 |
| 215 InstanceAccumulator accumulator(&stack, class_id); | 215 InstanceAccumulator accumulator(&stack, class_id); |
| 216 isolate()->heap()->VisitObjectsNoExternalPages(&accumulator); | 216 isolate()->heap()->VisitObjectsNoImagePages(&accumulator); |
| 217 | 217 |
| 218 stack.TraverseGraph(visitor); | 218 stack.TraverseGraph(visitor); |
| 219 Unmarker::UnmarkAll(isolate()); | 219 Unmarker::UnmarkAll(isolate()); |
| 220 } | 220 } |
| 221 | 221 |
| 222 | 222 |
| 223 class SizeVisitor : public ObjectGraph::Visitor { | 223 class SizeVisitor : public ObjectGraph::Visitor { |
| 224 public: | 224 public: |
| 225 SizeVisitor() : size_(0) {} | 225 SizeVisitor() : size_(0) {} |
| 226 intptr_t size() const { return size_; } | 226 intptr_t size() const { return size_; } |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 intptr_t object_count = visitor.count(); | 654 intptr_t object_count = visitor.count(); |
| 655 if (roots == kVM) { | 655 if (roots == kVM) { |
| 656 object_count += 1; // root | 656 object_count += 1; // root |
| 657 } else { | 657 } else { |
| 658 object_count += 2; // root and stack | 658 object_count += 2; // root and stack |
| 659 } | 659 } |
| 660 return object_count; | 660 return object_count; |
| 661 } | 661 } |
| 662 | 662 |
| 663 } // namespace dart | 663 } // namespace dart |
| OLD | NEW |