| Index: src/cpu-profiler.h
 | 
| diff --git a/src/cpu-profiler.h b/src/cpu-profiler.h
 | 
| index 42d5d0abd32f22a784968e249babf6fec3bb1e23..864df78ea3fbe9ca12bd3e76af4f57905425bd1a 100644
 | 
| --- a/src/cpu-profiler.h
 | 
| +++ b/src/cpu-profiler.h
 | 
| @@ -31,11 +31,18 @@
 | 
|  #ifdef ENABLE_CPP_PROFILES_PROCESSOR
 | 
|  
 | 
|  #include "circular-queue.h"
 | 
| -#include "profile-generator.h"
 | 
|  
 | 
|  namespace v8 {
 | 
|  namespace internal {
 | 
|  
 | 
| +// Forward declarations.
 | 
| +class CodeEntry;
 | 
| +class CodeMap;
 | 
| +class CpuProfile;
 | 
| +class CpuProfilesCollection;
 | 
| +class ProfileGenerator;
 | 
| +
 | 
| +
 | 
|  #define CODE_EVENTS_TYPE_LIST(V)                \
 | 
|    V(CODE_CREATION, CodeCreateEventRecord)       \
 | 
|    V(CODE_MOVE,     CodeMoveEventRecord)         \
 | 
| @@ -64,9 +71,7 @@ class CodeCreateEventRecord : public CodeEventRecord {
 | 
|    CodeEntry* entry;
 | 
|    unsigned size;
 | 
|  
 | 
| -  INLINE(void UpdateCodeMap(CodeMap* code_map)) {
 | 
| -    code_map->AddCode(start, entry, size);
 | 
| -  }
 | 
| +  INLINE(void UpdateCodeMap(CodeMap* code_map));
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -75,9 +80,7 @@ class CodeMoveEventRecord : public CodeEventRecord {
 | 
|    Address from;
 | 
|    Address to;
 | 
|  
 | 
| -  INLINE(void UpdateCodeMap(CodeMap* code_map)) {
 | 
| -    code_map->MoveCode(from, to);
 | 
| -  }
 | 
| +  INLINE(void UpdateCodeMap(CodeMap* code_map));
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -85,9 +88,7 @@ class CodeDeleteEventRecord : public CodeEventRecord {
 | 
|   public:
 | 
|    Address start;
 | 
|  
 | 
| -  INLINE(void UpdateCodeMap(CodeMap* code_map)) {
 | 
| -    code_map->DeleteCode(start);
 | 
| -  }
 | 
| +  INLINE(void UpdateCodeMap(CodeMap* code_map));
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -96,9 +97,7 @@ class CodeAliasEventRecord : public CodeEventRecord {
 | 
|    Address alias;
 | 
|    Address start;
 | 
|  
 | 
| -  INLINE(void UpdateCodeMap(CodeMap* code_map)) {
 | 
| -    code_map->AddAlias(alias, start);
 | 
| -  }
 | 
| +  INLINE(void UpdateCodeMap(CodeMap* code_map));
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -133,6 +132,9 @@ class ProfilerEventsProcessor : public Thread {
 | 
|    INLINE(bool running()) { return running_; }
 | 
|  
 | 
|    // Events adding methods. Called by VM threads.
 | 
| +  void CallbackCreateEvent(Logger::LogEventsAndTags tag,
 | 
| +                           const char* prefix, String* name,
 | 
| +                           Address start);
 | 
|    void CodeCreateEvent(Logger::LogEventsAndTags tag,
 | 
|                         String* name,
 | 
|                         String* resource_name, int line_number,
 | 
| @@ -176,6 +178,91 @@ class ProfilerEventsProcessor : public Thread {
 | 
|  
 | 
|  } }  // namespace v8::internal
 | 
|  
 | 
| +
 | 
| +#define PROFILE(Call)                                  \
 | 
| +  LOG(Call);                                           \
 | 
| +  do {                                                 \
 | 
| +    if (v8::internal::CpuProfiler::is_profiling()) {   \
 | 
| +      v8::internal::CpuProfiler::Call;                 \
 | 
| +    }                                                  \
 | 
| +  } while (false)
 | 
| +#else
 | 
| +#define PROFILE(Call) LOG(Call)
 | 
| +#endif  // ENABLE_CPP_PROFILES_PROCESSOR
 | 
| +
 | 
| +
 | 
| +namespace v8 {
 | 
| +namespace internal {
 | 
| +
 | 
| +class CpuProfiler {
 | 
| + public:
 | 
| +  static void Setup();
 | 
| +  static void TearDown();
 | 
| +
 | 
| +#ifdef ENABLE_CPP_PROFILES_PROCESSOR
 | 
| +  static void StartProfiling(const char* title);
 | 
| +  static void StartProfiling(String* title);
 | 
| +  static CpuProfile* StopProfiling(const char* title);
 | 
| +  static CpuProfile* StopProfiling(String* title);
 | 
| +  static int GetProfilesCount();
 | 
| +  static CpuProfile* GetProfile(int index);
 | 
| +  static CpuProfile* FindProfile(unsigned uid);
 | 
| +
 | 
| +  // Invoked from stack sampler (thread or signal handler.)
 | 
| +  static TickSample* TickSampleEvent();
 | 
| +
 | 
| +  // Must be called via PROFILE macro, otherwise will crash when
 | 
| +  // profiling is not enabled.
 | 
| +  static void CallbackEvent(String* name, Address entry_point);
 | 
| +  static void CodeCreateEvent(Logger::LogEventsAndTags tag,
 | 
| +                              Code* code, const char* comment);
 | 
| +  static void CodeCreateEvent(Logger::LogEventsAndTags tag,
 | 
| +                              Code* code, String* name);
 | 
| +  static void CodeCreateEvent(Logger::LogEventsAndTags tag,
 | 
| +                              Code* code, String* name,
 | 
| +                              String* source, int line);
 | 
| +  static void CodeCreateEvent(Logger::LogEventsAndTags tag,
 | 
| +                              Code* code, int args_count);
 | 
| +  static void CodeMoveEvent(Address from, Address to);
 | 
| +  static void CodeDeleteEvent(Address from);
 | 
| +  static void FunctionCreateEvent(JSFunction* function);
 | 
| +  static void FunctionMoveEvent(Address from, Address to);
 | 
| +  static void FunctionDeleteEvent(Address from);
 | 
| +  static void GetterCallbackEvent(String* name, Address entry_point);
 | 
| +  static void RegExpCodeCreateEvent(Code* code, String* source);
 | 
| +  static void SetterCallbackEvent(String* name, Address entry_point);
 | 
| +
 | 
| +  static INLINE(bool is_profiling()) {
 | 
| +    ASSERT(singleton_ != NULL);
 | 
| +    return singleton_->processor_ != NULL;
 | 
| +  }
 | 
| +
 | 
| + private:
 | 
| +  CpuProfiler();
 | 
| +  ~CpuProfiler();
 | 
| +  void StartCollectingProfile(const char* title);
 | 
| +  void StartCollectingProfile(String* title);
 | 
| +  void StartProcessorIfNotStarted();
 | 
| +  CpuProfile* StopCollectingProfile(const char* title);
 | 
| +  CpuProfile* StopCollectingProfile(String* title);
 | 
| +  void StopProcessorIfLastProfile();
 | 
| +
 | 
| +  CpuProfilesCollection* profiles_;
 | 
| +  unsigned next_profile_uid_;
 | 
| +  ProfileGenerator* generator_;
 | 
| +  ProfilerEventsProcessor* processor_;
 | 
| +
 | 
| +  static CpuProfiler* singleton_;
 | 
| +
 | 
| +#else
 | 
| +  static INLINE(bool is_profiling()) { return false; }
 | 
|  #endif  // ENABLE_CPP_PROFILES_PROCESSOR
 | 
|  
 | 
| + private:
 | 
| +  DISALLOW_COPY_AND_ASSIGN(CpuProfiler);
 | 
| +};
 | 
| +
 | 
| +} }  // namespace v8::internal
 | 
| +
 | 
| +
 | 
|  #endif  // V8_CPU_PROFILER_H_
 | 
| 
 |