- Dump Smi objects into the heap profile.

Review URL: https://codereview.chromium.org//11881010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@17036 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
iposva@google.com 2013-01-14 23:38:00 +00:00
parent e723b69be9
commit 4726853cfe
2 changed files with 22 additions and 0 deletions

View file

@ -141,6 +141,11 @@ HeapProfiler::HeapProfiler(Dart_FileWriteCallback callback, void* stream)
HeapProfiler::~HeapProfiler() {
for (std::set<const RawSmi*>::iterator it = smi_table_.begin();
it != smi_table_.end();
++it) {
WriteSmiInstanceDump(*it);
}
delete heap_dump_record_;
}
@ -637,6 +642,7 @@ void HeapProfiler::WriteFakeClassDump(FakeClass fake_class,
// u4 - number of bytes that follow
// [value]* - instance field values (this class, followed by super class, etc)
void HeapProfiler::WriteInstanceDump(const RawObject* raw_obj) {
ASSERT(raw_obj->IsHeapObject());
SubRecord sub(kInstanceDump, this);
// object ID
sub.WriteObjectId(raw_obj);
@ -688,6 +694,21 @@ void HeapProfiler::WriteInstanceDump(const RawObject* raw_obj) {
}
// Write a specialized instance dump for "referenced" Smi objects.
void HeapProfiler::WriteSmiInstanceDump(const RawSmi* raw_smi) {
ASSERT(!raw_smi->IsHeapObject());
SubRecord sub(kInstanceDump, this);
// object ID
sub.WriteObjectId(raw_smi);
// stack trace serial number
sub.Write32(0);
// class object ID
sub.WriteObjectId(Isolate::Current()->class_table()->At(kSmiCid));
// number of bytes that follow
sub.Write32(0);
}
// OBJECT ARRAY DUMP - 0x22
//
// Format:

View file

@ -264,6 +264,7 @@ class HeapProfiler {
void WriteClassDump(const RawClass* raw_class);
void WriteFakeClassDump(FakeClass fake_class, FakeClass fake_super_class);
void WriteInstanceDump(const RawObject* raw_obj);
void WriteSmiInstanceDump(const RawSmi* raw_smi);
void WriteObjectArrayDump(const RawArray* raw_array);
void WritePrimitiveArrayDump(const RawByteArray* raw_byte_array,
uint8_t tag,