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