| Index: src/heap-profiler.cc | 
| =================================================================== | 
| --- src/heap-profiler.cc	(revision 7267) | 
| +++ src/heap-profiler.cc	(working copy) | 
| @@ -72,14 +72,14 @@ | 
| String* constructor = GetConstructorNameForHeapProfile( | 
| JSObject::cast(js_obj)); | 
| // Differentiate Object and Array instances. | 
| -    if (fine_grain && (constructor == Heap::Object_symbol() || | 
| -                       constructor == Heap::Array_symbol())) { | 
| +    if (fine_grain && (constructor == HEAP->Object_symbol() || | 
| +                       constructor == HEAP->Array_symbol())) { | 
| return JSObjectsCluster(constructor, obj); | 
| } else { | 
| return JSObjectsCluster(constructor); | 
| } | 
| } else if (obj->IsString()) { | 
| -    return JSObjectsCluster(Heap::String_symbol()); | 
| +    return JSObjectsCluster(HEAP->String_symbol()); | 
| } else if (obj->IsJSGlobalPropertyCell()) { | 
| return JSObjectsCluster(JSObjectsCluster::GLOBAL_PROPERTY); | 
| } else if (obj->IsCode() || obj->IsSharedFunctionInfo() || obj->IsScript()) { | 
| @@ -112,10 +112,10 @@ | 
| int size = obj->Size(); | 
| // If 'properties' and 'elements' are non-empty (thus, non-shared), | 
| // take their size into account. | 
| -  if (obj->properties() != Heap::empty_fixed_array()) { | 
| +  if (obj->properties() != HEAP->empty_fixed_array()) { | 
| size += obj->properties()->Size(); | 
| } | 
| -  if (obj->elements() != Heap::empty_fixed_array()) { | 
| +  if (obj->elements() != HEAP->empty_fixed_array()) { | 
| size += obj->elements()->Size(); | 
| } | 
| // For functions, also account non-empty context and literals sizes. | 
| @@ -174,7 +174,8 @@ | 
| HeapStringAllocator allocator; | 
| StringStream stream(&allocator); | 
| cluster.Print(&stream); | 
| -    LOG(HeapSampleJSRetainersEvent( | 
| +    LOG(ISOLATE, | 
| +        HeapSampleJSRetainersEvent( | 
| *(stream.ToCString()), *(retainers.ToCString()))); | 
| } | 
| }; | 
| @@ -315,8 +316,6 @@ | 
| } | 
|  | 
|  | 
| -HeapProfiler* HeapProfiler::singleton_ = NULL; | 
| - | 
| HeapProfiler::HeapProfiler() | 
| : snapshots_(new HeapSnapshotsCollection()), | 
| next_snapshot_uid_(1) { | 
| @@ -331,8 +330,9 @@ | 
|  | 
| void HeapProfiler::Setup() { | 
| #ifdef ENABLE_LOGGING_AND_PROFILING | 
| -  if (singleton_ == NULL) { | 
| -    singleton_ = new HeapProfiler(); | 
| +  Isolate* isolate = Isolate::Current(); | 
| +  if (isolate->heap_profiler() == NULL) { | 
| +    isolate->set_heap_profiler(new HeapProfiler()); | 
| } | 
| #endif | 
| } | 
| @@ -340,8 +340,9 @@ | 
|  | 
| void HeapProfiler::TearDown() { | 
| #ifdef ENABLE_LOGGING_AND_PROFILING | 
| -  delete singleton_; | 
| -  singleton_ = NULL; | 
| +  Isolate* isolate = Isolate::Current(); | 
| +  delete isolate->heap_profiler(); | 
| +  isolate->set_heap_profiler(NULL); | 
| #endif | 
| } | 
|  | 
| @@ -351,36 +352,38 @@ | 
| HeapSnapshot* HeapProfiler::TakeSnapshot(const char* name, | 
| int type, | 
| v8::ActivityControl* control) { | 
| -  ASSERT(singleton_ != NULL); | 
| -  return singleton_->TakeSnapshotImpl(name, type, control); | 
| +  ASSERT(Isolate::Current()->heap_profiler() != NULL); | 
| +  return Isolate::Current()->heap_profiler()->TakeSnapshotImpl(name, | 
| +                                                               type, | 
| +                                                               control); | 
| } | 
|  | 
|  | 
| HeapSnapshot* HeapProfiler::TakeSnapshot(String* name, | 
| int type, | 
| v8::ActivityControl* control) { | 
| -  ASSERT(singleton_ != NULL); | 
| -  return singleton_->TakeSnapshotImpl(name, type, control); | 
| +  ASSERT(Isolate::Current()->heap_profiler() != NULL); | 
| +  return Isolate::Current()->heap_profiler()->TakeSnapshotImpl(name, | 
| +                                                               type, | 
| +                                                               control); | 
| } | 
|  | 
|  | 
| void HeapProfiler::DefineWrapperClass( | 
| uint16_t class_id, v8::HeapProfiler::WrapperInfoCallback callback) { | 
| -  ASSERT(singleton_ != NULL); | 
| ASSERT(class_id != v8::HeapProfiler::kPersistentHandleNoClassId); | 
| -  if (singleton_->wrapper_callbacks_.length() <= class_id) { | 
| -    singleton_->wrapper_callbacks_.AddBlock( | 
| -        NULL, class_id - singleton_->wrapper_callbacks_.length() + 1); | 
| +  if (wrapper_callbacks_.length() <= class_id) { | 
| +    wrapper_callbacks_.AddBlock( | 
| +        NULL, class_id - wrapper_callbacks_.length() + 1); | 
| } | 
| -  singleton_->wrapper_callbacks_[class_id] = callback; | 
| +  wrapper_callbacks_[class_id] = callback; | 
| } | 
|  | 
|  | 
| v8::RetainedObjectInfo* HeapProfiler::ExecuteWrapperClassCallback( | 
| uint16_t class_id, Object** wrapper) { | 
| -  ASSERT(singleton_ != NULL); | 
| -  if (singleton_->wrapper_callbacks_.length() <= class_id) return NULL; | 
| -  return singleton_->wrapper_callbacks_[class_id]( | 
| +  if (wrapper_callbacks_.length() <= class_id) return NULL; | 
| +  return wrapper_callbacks_[class_id]( | 
| class_id, Utils::ToLocal(Handle<Object>(wrapper))); | 
| } | 
|  | 
| @@ -394,13 +397,13 @@ | 
| bool generation_completed = true; | 
| switch (s_type) { | 
| case HeapSnapshot::kFull: { | 
| -      Heap::CollectAllGarbage(true); | 
| +      HEAP->CollectAllGarbage(true); | 
| HeapSnapshotGenerator generator(result, control); | 
| generation_completed = generator.GenerateSnapshot(); | 
| break; | 
| } | 
| case HeapSnapshot::kAggregated: { | 
| -      Heap::CollectAllGarbage(true); | 
| +      HEAP->CollectAllGarbage(true); | 
| AggregatedHeapSnapshot agg_snapshot; | 
| AggregatedHeapSnapshotGenerator generator(&agg_snapshot); | 
| generator.GenerateSnapshot(); | 
| @@ -427,26 +430,28 @@ | 
|  | 
|  | 
| int HeapProfiler::GetSnapshotsCount() { | 
| -  ASSERT(singleton_ != NULL); | 
| -  return singleton_->snapshots_->snapshots()->length(); | 
| +  HeapProfiler* profiler = Isolate::Current()->heap_profiler(); | 
| +  ASSERT(profiler != NULL); | 
| +  return profiler->snapshots_->snapshots()->length(); | 
| } | 
|  | 
|  | 
| HeapSnapshot* HeapProfiler::GetSnapshot(int index) { | 
| -  ASSERT(singleton_ != NULL); | 
| -  return singleton_->snapshots_->snapshots()->at(index); | 
| +  HeapProfiler* profiler = Isolate::Current()->heap_profiler(); | 
| +  ASSERT(profiler != NULL); | 
| +  return profiler->snapshots_->snapshots()->at(index); | 
| } | 
|  | 
|  | 
| HeapSnapshot* HeapProfiler::FindSnapshot(unsigned uid) { | 
| -  ASSERT(singleton_ != NULL); | 
| -  return singleton_->snapshots_->GetSnapshot(uid); | 
| +  HeapProfiler* profiler = Isolate::Current()->heap_profiler(); | 
| +  ASSERT(profiler != NULL); | 
| +  return profiler->snapshots_->GetSnapshot(uid); | 
| } | 
|  | 
|  | 
| void HeapProfiler::ObjectMoveEvent(Address from, Address to) { | 
| -  ASSERT(singleton_ != NULL); | 
| -  singleton_->snapshots_->ObjectMoveEvent(from, to); | 
| +  snapshots_->ObjectMoveEvent(from, to); | 
| } | 
|  | 
|  | 
| @@ -464,7 +469,8 @@ | 
| HeapStringAllocator allocator; | 
| StringStream stream(&allocator); | 
| cluster.Print(&stream); | 
| -  LOG(HeapSampleJSConstructorEvent(*(stream.ToCString()), | 
| +  LOG(ISOLATE, | 
| +      HeapSampleJSConstructorEvent(*(stream.ToCString()), | 
| number_and_size.number(), | 
| number_and_size.bytes())); | 
| } | 
| @@ -683,7 +689,7 @@ | 
| aggregator_(NULL) { | 
| JSObjectsCluster roots(JSObjectsCluster::ROOTS); | 
| ReferencesExtractor extractor(roots, this); | 
| -  Heap::IterateRoots(&extractor, VISIT_ONLY_STRONG); | 
| +  HEAP->IterateRoots(&extractor, VISIT_ONLY_STRONG); | 
| } | 
|  | 
|  | 
| @@ -753,15 +759,18 @@ | 
| String* constructor = GetConstructorNameForHeapProfile(JSObject::cast(obj)); | 
| SmartPointer<char> s_name( | 
| constructor->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL)); | 
| -  LOG(HeapSampleJSProducerEvent(GetConstructorName(*s_name), | 
| +  LOG(ISOLATE, | 
| +      HeapSampleJSProducerEvent(GetConstructorName(*s_name), | 
| reinterpret_cast<Address*>(trace))); | 
| } | 
|  | 
|  | 
| void HeapProfiler::WriteSample() { | 
| -  LOG(HeapSampleBeginEvent("Heap", "allocated")); | 
| -  LOG(HeapSampleStats( | 
| -      "Heap", "allocated", Heap::CommittedMemory(), Heap::SizeOfObjects())); | 
| +  Isolate* isolate = Isolate::Current(); | 
| +  LOG(isolate, HeapSampleBeginEvent("Heap", "allocated")); | 
| +  LOG(isolate, | 
| +      HeapSampleStats( | 
| +          "Heap", "allocated", HEAP->CommittedMemory(), HEAP->SizeOfObjects())); | 
|  | 
| AggregatedHeapSnapshot snapshot; | 
| AggregatedHeapSnapshotGenerator generator(&snapshot); | 
| @@ -772,7 +781,8 @@ | 
| i <= AggregatedHeapSnapshotGenerator::kAllStringsType; | 
| ++i) { | 
| if (info[i].bytes() > 0) { | 
| -      LOG(HeapSampleItemEvent(info[i].name(), info[i].number(), | 
| +      LOG(isolate, | 
| +          HeapSampleItemEvent(info[i].name(), info[i].number(), | 
| info[i].bytes())); | 
| } | 
| } | 
| @@ -780,10 +790,10 @@ | 
| snapshot.js_cons_profile()->PrintStats(); | 
| snapshot.js_retainer_profile()->PrintStats(); | 
|  | 
| -  GlobalHandles::IterateWeakRoots(PrintProducerStackTrace, | 
| -                                  StackWeakReferenceCallback); | 
| +  isolate->global_handles()->IterateWeakRoots(PrintProducerStackTrace, | 
| +                                              StackWeakReferenceCallback); | 
|  | 
| -  LOG(HeapSampleEndEvent("Heap", "allocated")); | 
| +  LOG(isolate, HeapSampleEndEvent("Heap", "allocated")); | 
| } | 
|  | 
|  | 
| @@ -1117,8 +1127,6 @@ | 
| } | 
|  | 
|  | 
| -bool ProducerHeapProfile::can_log_ = false; | 
| - | 
| void ProducerHeapProfile::Setup() { | 
| can_log_ = true; | 
| } | 
| @@ -1138,10 +1146,10 @@ | 
| stack[i++] = it.frame()->pc(); | 
| } | 
| stack[i] = NULL; | 
| -  Handle<Object> handle = GlobalHandles::Create(obj); | 
| -  GlobalHandles::MakeWeak(handle.location(), | 
| -                          static_cast<void*>(stack.start()), | 
| -                          StackWeakReferenceCallback); | 
| +  Handle<Object> handle = isolate_->global_handles()->Create(obj); | 
| +  isolate_->global_handles()->MakeWeak(handle.location(), | 
| +                                       static_cast<void*>(stack.start()), | 
| +                                       StackWeakReferenceCallback); | 
| } | 
|  | 
|  | 
|  |