Index: src/heap-profiler.cc |
diff --git a/src/heap-profiler.cc b/src/heap-profiler.cc |
index 5c1badf9c90f16851255bc2edd03e1c170755283..c9f1d501daf18e311d53754d3e6d05e215b9a51c 100644 |
--- a/src/heap-profiler.cc |
+++ b/src/heap-profiler.cc |
@@ -44,13 +44,72 @@ HeapProfiler::~HeapProfiler() { |
} |
-void HeapProfiler::DeleteAllSnapshots() { |
+void HeapProfiler::ResetSnapshots() { |
Heap* the_heap = heap(); |
delete snapshots_; |
snapshots_ = new HeapSnapshotsCollection(the_heap); |
} |
+void HeapProfiler::SetUp() { |
+ Isolate* isolate = Isolate::Current(); |
+ if (isolate->heap_profiler() == NULL) { |
+ isolate->set_heap_profiler(new HeapProfiler(isolate->heap())); |
+ } |
+} |
+ |
+ |
+void HeapProfiler::TearDown() { |
+ Isolate* isolate = Isolate::Current(); |
+ delete isolate->heap_profiler(); |
+ isolate->set_heap_profiler(NULL); |
+} |
+ |
+ |
+HeapSnapshot* HeapProfiler::TakeSnapshot( |
+ const char* name, |
+ int type, |
+ v8::ActivityControl* control, |
+ v8::HeapProfiler::ObjectNameResolver* resolver) { |
+ ASSERT(Isolate::Current()->heap_profiler() != NULL); |
+ return Isolate::Current()->heap_profiler()->TakeSnapshotImpl(name, |
+ type, |
+ control, |
+ resolver); |
+} |
+ |
+ |
+HeapSnapshot* HeapProfiler::TakeSnapshot( |
+ String* name, |
+ int type, |
+ v8::ActivityControl* control, |
+ v8::HeapProfiler::ObjectNameResolver* resolver) { |
+ ASSERT(Isolate::Current()->heap_profiler() != NULL); |
+ return Isolate::Current()->heap_profiler()->TakeSnapshotImpl(name, |
+ type, |
+ control, |
+ resolver); |
+} |
+ |
+ |
+void HeapProfiler::StartHeapObjectsTracking() { |
+ ASSERT(Isolate::Current()->heap_profiler() != NULL); |
+ Isolate::Current()->heap_profiler()->StartHeapObjectsTrackingImpl(); |
+} |
+ |
+ |
+void HeapProfiler::StopHeapObjectsTracking() { |
+ ASSERT(Isolate::Current()->heap_profiler() != NULL); |
+ Isolate::Current()->heap_profiler()->StopHeapObjectsTrackingImpl(); |
+} |
+ |
+ |
+SnapshotObjectId HeapProfiler::PushHeapObjectsStats(v8::OutputStream* stream) { |
+ ASSERT(Isolate::Current()->heap_profiler() != NULL); |
+ return Isolate::Current()->heap_profiler()->PushHeapObjectsStatsImpl(stream); |
+} |
+ |
+ |
void HeapProfiler::DefineWrapperClass( |
uint16_t class_id, v8::HeapProfiler::WrapperInfoCallback callback) { |
ASSERT(class_id != v8::HeapProfiler::kPersistentHandleNoClassId); |
@@ -70,69 +129,99 @@ v8::RetainedObjectInfo* HeapProfiler::ExecuteWrapperClassCallback( |
} |
-HeapSnapshot* HeapProfiler::TakeSnapshot( |
+HeapSnapshot* HeapProfiler::TakeSnapshotImpl( |
const char* name, |
+ int type, |
v8::ActivityControl* control, |
v8::HeapProfiler::ObjectNameResolver* resolver) { |
- HeapSnapshot* result = snapshots_->NewSnapshot(name, next_snapshot_uid_++); |
- { |
- HeapSnapshotGenerator generator(result, control, resolver, heap()); |
- if (!generator.GenerateSnapshot()) { |
- delete result; |
- result = NULL; |
+ HeapSnapshot::Type s_type = static_cast<HeapSnapshot::Type>(type); |
+ HeapSnapshot* result = |
+ snapshots_->NewSnapshot(s_type, name, next_snapshot_uid_++); |
+ bool generation_completed = true; |
+ switch (s_type) { |
+ case HeapSnapshot::kFull: { |
+ HeapSnapshotGenerator generator(result, control, resolver, heap()); |
+ generation_completed = generator.GenerateSnapshot(); |
+ break; |
} |
+ default: |
+ UNREACHABLE(); |
+ } |
+ if (!generation_completed) { |
+ delete result; |
+ result = NULL; |
} |
snapshots_->SnapshotGenerationFinished(result); |
return result; |
} |
-HeapSnapshot* HeapProfiler::TakeSnapshot( |
+HeapSnapshot* HeapProfiler::TakeSnapshotImpl( |
String* name, |
+ int type, |
v8::ActivityControl* control, |
v8::HeapProfiler::ObjectNameResolver* resolver) { |
- return TakeSnapshot(snapshots_->names()->GetName(name), control, resolver); |
+ return TakeSnapshotImpl(snapshots_->names()->GetName(name), type, control, |
+ resolver); |
} |
-void HeapProfiler::StartHeapObjectsTracking() { |
+void HeapProfiler::StartHeapObjectsTrackingImpl() { |
snapshots_->StartHeapObjectsTracking(); |
} |
-SnapshotObjectId HeapProfiler::PushHeapObjectsStats(OutputStream* stream) { |
+SnapshotObjectId HeapProfiler::PushHeapObjectsStatsImpl(OutputStream* stream) { |
return snapshots_->PushHeapObjectsStats(stream); |
} |
-void HeapProfiler::StopHeapObjectsTracking() { |
+void HeapProfiler::StopHeapObjectsTrackingImpl() { |
snapshots_->StopHeapObjectsTracking(); |
} |
size_t HeapProfiler::GetMemorySizeUsedByProfiler() { |
- return snapshots_->GetUsedMemorySize(); |
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler(); |
+ ASSERT(profiler != NULL); |
+ size_t size = profiler->snapshots_->GetUsedMemorySize(); |
+ return size; |
} |
int HeapProfiler::GetSnapshotsCount() { |
- return snapshots_->snapshots()->length(); |
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler(); |
+ ASSERT(profiler != NULL); |
+ return profiler->snapshots_->snapshots()->length(); |
} |
HeapSnapshot* HeapProfiler::GetSnapshot(int index) { |
- return snapshots_->snapshots()->at(index); |
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler(); |
+ ASSERT(profiler != NULL); |
+ return profiler->snapshots_->snapshots()->at(index); |
} |
HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) { |
- return snapshots_->GetSnapshot(uid); |
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler(); |
+ ASSERT(profiler != NULL); |
+ return profiler->snapshots_->GetSnapshot(uid); |
} |
SnapshotObjectId HeapProfiler::GetSnapshotObjectId(Handle<Object> obj) { |
if (!obj->IsHeapObject()) |
return v8::HeapProfiler::kUnknownObjectId; |
- return snapshots_->FindObjectId(HeapObject::cast(*obj)->address()); |
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler(); |
+ ASSERT(profiler != NULL); |
+ return profiler->snapshots_->FindObjectId(HeapObject::cast(*obj)->address()); |
+} |
+ |
+ |
+void HeapProfiler::DeleteAllSnapshots() { |
+ HeapProfiler* profiler = Isolate::Current()->heap_profiler(); |
+ ASSERT(profiler != NULL); |
+ profiler->ResetSnapshots(); |
} |