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
This commit is contained in:
mikhail.naganov@gmail.com 2011-03-21 17:40:40 +00:00
parent 12615106d7
commit d98baf8098
5 changed files with 19 additions and 9 deletions

View 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_;

View File

@ -283,6 +283,7 @@ class CpuProfiler {
ProfileGenerator* generator_;
ProfilerEventsProcessor* processor_;
int saved_logging_nesting_;
bool need_to_stop_sampler_;
Atomic32 is_profiling_;
#else

View 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();

View 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();
}
}

View 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();