| Index: src/heap-profiler.cc | 
| diff --git a/src/heap-profiler.cc b/src/heap-profiler.cc | 
| index 90544f1174e75ff2bee12e54d1ad0b4b3bd5ff2e..ea17abc33d930dbf2dc2e2fcb755a063eb4380d6 100644 | 
| --- a/src/heap-profiler.cc | 
| +++ b/src/heap-profiler.cc | 
| @@ -30,8 +30,8 @@ | 
| #include "heap-profiler.h" | 
| #include "frames-inl.h" | 
| #include "global-handles.h" | 
| +#include "profile-generator.h" | 
| #include "string-stream.h" | 
| -#include "zone-inl.h" | 
|  | 
| namespace v8 { | 
| namespace internal { | 
| @@ -314,6 +314,75 @@ void RetainerTreeAggregator::Call(const JSObjectsCluster& cluster, | 
| }  // namespace | 
|  | 
|  | 
| +HeapProfiler* HeapProfiler::singleton_ = NULL; | 
| + | 
| +HeapProfiler::HeapProfiler() | 
| +    : snapshots_(new HeapSnapshotsCollection()), | 
| +      next_snapshot_uid_(1) { | 
| +} | 
| + | 
| + | 
| +HeapProfiler::~HeapProfiler() { | 
| +  delete snapshots_; | 
| +} | 
| + | 
| + | 
| +void HeapProfiler::Setup() { | 
| +  if (singleton_ == NULL) { | 
| +    singleton_ = new HeapProfiler(); | 
| +  } | 
| +} | 
| + | 
| + | 
| +void HeapProfiler::TearDown() { | 
| +  delete singleton_; | 
| +  singleton_ = NULL; | 
| +} | 
| + | 
| + | 
| +HeapSnapshot* HeapProfiler::TakeSnapshot(const char* name) { | 
| +  ASSERT(singleton_ != NULL); | 
| +  return singleton_->TakeSnapshotImpl(name); | 
| +} | 
| + | 
| + | 
| +HeapSnapshot* HeapProfiler::TakeSnapshot(String* name) { | 
| +  ASSERT(singleton_ != NULL); | 
| +  return singleton_->TakeSnapshotImpl(name); | 
| +} | 
| + | 
| + | 
| +HeapSnapshot* HeapProfiler::TakeSnapshotImpl(const char* name) { | 
| +  HeapSnapshot* result = snapshots_->NewSnapshot(name, next_snapshot_uid_++); | 
| +  HeapSnapshotGenerator generator(result); | 
| +  generator.GenerateSnapshot(); | 
| +  return result; | 
| +} | 
| + | 
| + | 
| +HeapSnapshot* HeapProfiler::TakeSnapshotImpl(String* name) { | 
| +  return TakeSnapshotImpl(snapshots_->GetName(name)); | 
| +} | 
| + | 
| + | 
| +int HeapProfiler::GetSnapshotsCount() { | 
| +  ASSERT(singleton_ != NULL); | 
| +  return singleton_->snapshots_->snapshots()->length(); | 
| +} | 
| + | 
| + | 
| +HeapSnapshot* HeapProfiler::GetSnapshot(int index) { | 
| +  ASSERT(singleton_ != NULL); | 
| +  return singleton_->snapshots_->snapshots()->at(index); | 
| +} | 
| + | 
| + | 
| +HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) { | 
| +  ASSERT(singleton_ != NULL); | 
| +  return singleton_->snapshots_->GetSnapshot(uid); | 
| +} | 
| + | 
| + | 
| const JSObjectsClusterTreeConfig::Key JSObjectsClusterTreeConfig::kNoKey; | 
| const JSObjectsClusterTreeConfig::Value JSObjectsClusterTreeConfig::kNoValue; | 
|  | 
|  |