Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Unified Diff: runtime/vm/pages.cc

Issue 10452006: Implement a heap profiler for the Dart managed heap. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: added basic test code Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/pages.cc
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 965e5b984fce0d1c7aa1b86239d4359b1435eb10..866ed4a9ec4ad1228b4c0b69cab55c8eb5982a43 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -45,6 +45,18 @@ void HeapPage::Deallocate() {
}
+void HeapPage::VisitObjects(ObjectVisitor* visitor) const {
+ uword obj_addr = first_object_start();
+ uword end_addr = top();
+ while (obj_addr < end_addr) {
+ RawObject* raw_obj = RawObject::FromAddr(obj_addr);
+ visitor->VisitObject(raw_obj);
+ obj_addr += raw_obj->Size();
+ }
+ ASSERT(obj_addr == end_addr);
+}
+
+
void HeapPage::VisitObjectPointers(ObjectPointerVisitor* visitor) const {
uword obj_addr = first_object_start();
uword end_addr = top();
@@ -249,6 +261,21 @@ bool PageSpace::Contains(uword addr) const {
}
+void PageSpace::VisitObjects(ObjectVisitor* visitor) const {
+ HeapPage* page = pages_;
+ while (page != NULL) {
+ page->VisitObjects(visitor);
+ page = page->next();
+ }
+
+ page = large_pages_;
+ while (page != NULL) {
+ page->VisitObjects(visitor);
+ page = page->next();
+ }
+}
+
+
void PageSpace::VisitObjectPointers(ObjectPointerVisitor* visitor) const {
HeapPage* page = pages_;
while (page != NULL) {

Powered by Google App Engine
This is Rietveld 408576698