Fix DevTools CPU profiler after isolates merge.
authormikhail.naganov@gmail.com <mikhail.naganov@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 21 Mar 2011 17:40:40 +0000 (17:40 +0000)
committermikhail.naganov@gmail.com <mikhail.naganov@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 21 Mar 2011 17:40:40 +0000 (17:40 +0000)
There was an obvious bug with missing call to SamplerRegistry::GetState.
I've also updated CpuProfiler to avoid stopping sampler, if it didn't started it.

R=vitalyr@chromium.org
BUG=none
TEST=none

Review URL: http://codereview.chromium.org/6712062

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7293 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/cpu-profiler.cc
src/cpu-profiler.h
src/platform-linux.cc
src/platform-macos.cc
src/platform-win32.cc

index c0a2c2b..7387a4c 100644 (file)
@@ -441,6 +441,7 @@ CpuProfiler::CpuProfiler()
       token_enumerator_(new TokenEnumerator()),
       generator_(NULL),
       processor_(NULL),
+      need_to_stop_sampler_(false),
       is_profiling_(false) {
 }
 
@@ -486,7 +487,10 @@ void CpuProfiler::StartProcessorIfNotStarted() {
     }
     // Enable stack sampling.
     Sampler* sampler = reinterpret_cast<Sampler*>(LOGGER->ticker_);
-    if (!sampler->IsActive()) sampler->Start();
+    if (!sampler->IsActive()) {
+      sampler->Start();
+      need_to_stop_sampler_ = true;
+    }
     sampler->IncreaseProfilingDepth();
   }
 }
@@ -520,7 +524,10 @@ void CpuProfiler::StopProcessorIfLastProfile(const char* title) {
   if (profiles_->IsLastProfile(title)) {
     Sampler* sampler = reinterpret_cast<Sampler*>(LOGGER->ticker_);
     sampler->DecreaseProfilingDepth();
-    sampler->Stop();
+    if (need_to_stop_sampler_) {
+      sampler->Stop();
+      need_to_stop_sampler_ = false;
+    }
     processor_->Stop();
     processor_->Join();
     delete processor_;
index 9485d0c..b06f6ab 100644 (file)
@@ -283,6 +283,7 @@ class CpuProfiler {
   ProfileGenerator* generator_;
   ProfilerEventsProcessor* processor_;
   int saved_logging_nesting_;
+  bool need_to_stop_sampler_;
   Atomic32 is_profiling_;
 
 #else
index 5e378a7..7590ad0 100644 (file)
@@ -927,8 +927,9 @@ class SignalSender : public Thread {
 
   // Implement Thread::Run().
   virtual void Run() {
-    SamplerRegistry::State state = SamplerRegistry::GetState();
-    while (state != SamplerRegistry::HAS_NO_SAMPLERS) {
+    SamplerRegistry::State state;
+    while ((state = SamplerRegistry::GetState()) !=
+           SamplerRegistry::HAS_NO_SAMPLERS) {
       bool cpu_profiling_enabled =
           (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
       bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
index 66c86c6..17e3042 100644 (file)
@@ -663,8 +663,9 @@ class SamplerThread : public Thread {
 
   // Implement Thread::Run().
   virtual void Run() {
-    SamplerRegistry::State state = SamplerRegistry::GetState();
-    while (state != SamplerRegistry::HAS_NO_SAMPLERS) {
+    SamplerRegistry::State state;
+    while ((state = SamplerRegistry::GetState()) !=
+           SamplerRegistry::HAS_NO_SAMPLERS) {
       bool cpu_profiling_enabled =
           (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
       bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();
@@ -684,7 +685,6 @@ class SamplerThread : public Thread {
         }
       }
       OS::Sleep(interval_);
-      state = SamplerRegistry::GetState();
     }
   }
 
index 5945527..e7a25fa 100644 (file)
@@ -1914,8 +1914,9 @@ class SamplerThread : public Thread {
 
   // Implement Thread::Run().
   virtual void Run() {
-    SamplerRegistry::State state = SamplerRegistry::GetState();
-    while (state != SamplerRegistry::HAS_NO_SAMPLERS) {
+    SamplerRegistry::State state;
+    while ((state = SamplerRegistry::GetState()) !=
+           SamplerRegistry::HAS_NO_SAMPLERS) {
       bool cpu_profiling_enabled =
           (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS);
       bool runtime_profiler_enabled = RuntimeProfiler::IsEnabled();