From: mikhail.naganov@gmail.com Date: Mon, 21 Mar 2011 17:40:40 +0000 (+0000) Subject: Fix DevTools CPU profiler after isolates merge. X-Git-Tag: upstream/4.7.83~19862 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d98baf8098d1fe23a01ac6490129362317665b5d;p=platform%2Fupstream%2Fv8.git Fix DevTools CPU profiler after isolates merge. 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 --- diff --git a/src/cpu-profiler.cc b/src/cpu-profiler.cc index c0a2c2b..7387a4c 100644 --- a/src/cpu-profiler.cc +++ b/src/cpu-profiler.cc @@ -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(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(LOGGER->ticker_); sampler->DecreaseProfilingDepth(); - sampler->Stop(); + if (need_to_stop_sampler_) { + sampler->Stop(); + need_to_stop_sampler_ = false; + } processor_->Stop(); processor_->Join(); delete processor_; diff --git a/src/cpu-profiler.h b/src/cpu-profiler.h index 9485d0c..b06f6ab 100644 --- a/src/cpu-profiler.h +++ b/src/cpu-profiler.h @@ -283,6 +283,7 @@ class CpuProfiler { ProfileGenerator* generator_; ProfilerEventsProcessor* processor_; int saved_logging_nesting_; + bool need_to_stop_sampler_; Atomic32 is_profiling_; #else diff --git a/src/platform-linux.cc b/src/platform-linux.cc index 5e378a7..7590ad0 100644 --- a/src/platform-linux.cc +++ b/src/platform-linux.cc @@ -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(); diff --git a/src/platform-macos.cc b/src/platform-macos.cc index 66c86c6..17e3042 100644 --- a/src/platform-macos.cc +++ b/src/platform-macos.cc @@ -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(); } } diff --git a/src/platform-win32.cc b/src/platform-win32.cc index 5945527..e7a25fa 100644 --- a/src/platform-win32.cc +++ b/src/platform-win32.cc @@ -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();