| 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();
|
| }
|
|
|
|
|
|
|