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

Unified Diff: runtime/vm/heap_profiler.cc

Issue 11879008: Emit fake classes to please the third party HPROF tool infrastructure. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: address review comments Created 7 years, 11 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
« no previous file with comments | « runtime/vm/heap_profiler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/heap_profiler.cc
diff --git a/runtime/vm/heap_profiler.cc b/runtime/vm/heap_profiler.cc
index 7f5b01aaaded06c606c6bff3ad20440f0b73bba5..348f477e7e3a57ce858768f3230bd3eabe86c252 100644
--- a/runtime/vm/heap_profiler.cc
+++ b/runtime/vm/heap_profiler.cc
@@ -119,7 +119,24 @@ HeapProfiler::HeapProfiler(Dart_FileWriteCallback callback, void* stream)
heap_dump_record_(NULL) {
WriteHeader();
WriteStackTrace();
+ WriteFakeLoadClass(kJavaLangClass, "java.lang.Class");
+ WriteFakeLoadClass(kJavaLangClassLoader, "java.lang.ClassLoader");
+ WriteFakeLoadClass(kJavaLangObject, "java.lang.Object");
+ WriteFakeLoadClass(kJavaLangString, "java.lang.String");
+ WriteFakeLoadClass(kArrayObject, "Object[]");
+ WriteFakeLoadClass(kArrayBoolean, "bool[]");
+ WriteFakeLoadClass(kArrayChar, "char[]");
+ WriteFakeLoadClass(kArrayFloat, "float[]");
+ WriteFakeLoadClass(kArrayDouble, "double[]");
+ WriteFakeLoadClass(kArrayByte, "byte[]");
+ WriteFakeLoadClass(kArrayShort, "short[]");
+ WriteFakeLoadClass(kArrayInt, "int[]");
+ WriteFakeLoadClass(kArrayLong, "long[]");
heap_dump_record_ = new Record(kHeapDump, this);
+ WriteFakeClassDump(kJavaLangClass, static_cast<FakeClass>(0));
+ WriteFakeClassDump(kJavaLangClassLoader, kJavaLangObject);
+ WriteFakeClassDump(kJavaLangObject, static_cast<FakeClass>(0));
+ WriteFakeClassDump(kJavaLangString, kJavaLangObject);
}
@@ -414,6 +431,20 @@ void HeapProfiler::WriteLoadClass(const RawClass* raw_class) {
}
+void HeapProfiler::WriteFakeLoadClass(FakeClass fake_class,
+ const char* class_name) {
+ Record record(kLoadClass, this);
+ // class serial number (always > 0)
+ record.Write32(1);
+ // class object ID
+ record.WriteObjectId(reinterpret_cast<void*>(fake_class));
+ // stack trace serial number
+ record.Write32(0);
+ // class name string ID
+ record.WriteObjectId(StringId(class_name));
+}
+
+
// STACK TRACE - 0x05
//
// u4 - stack trace serial number
@@ -566,6 +597,36 @@ void HeapProfiler::WriteClassDump(const RawClass* raw_class) {
}
}
+void HeapProfiler::WriteFakeClassDump(FakeClass fake_class,
+ FakeClass fake_super_class) {
+ SubRecord sub(kClassDump, this);
+ // class object ID
+ sub.WriteObjectId(reinterpret_cast<void*>(fake_class));
+ // stack trace serial number
+ sub.Write32(0);
+ // super class object ID
+ sub.WriteObjectId(reinterpret_cast<void*>(fake_super_class));
+ // class loader object ID
+ sub.WriteObjectId(NULL);
+ // signers object ID
+ sub.WriteObjectId(NULL);
+ // protection domain object ID
+ sub.WriteObjectId(NULL);
+ // reserved
+ sub.WriteObjectId(NULL);
+ // reserved
+ sub.WriteObjectId(NULL);
+ // instance size (in bytes)
+ sub.Write32(0);
+ // size of constant pool and number of records that follow:
+ sub.Write16(0);
+ // Number of static fields
+ sub.Write16(0);
+ // Number of instance fields (not include super class's)
+ sub.Write16(0);
+}
+
+
// INSTANCE DUMP - 0x21
//
@@ -645,7 +706,7 @@ void HeapProfiler::WriteObjectArrayDump(const RawArray* raw_array) {
intptr_t length = Smi::Value(raw_array->ptr()->length_);
sub.Write32(length);
// array class object ID
- sub.WriteObjectId(NULL);
+ sub.WriteObjectId(reinterpret_cast<void*>(kArrayObject));
// elements
for (intptr_t i = 0; i < length; ++i) {
sub.WriteObjectId(ObjectId(raw_array->ptr()->data()[i]));
« no previous file with comments | « runtime/vm/heap_profiler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698