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
token_enumerator_(new TokenEnumerator()),
generator_(NULL),
processor_(NULL),
+ need_to_stop_sampler_(false),
is_profiling_(false) {
}
}
// 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();
}
}
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_;
ProfileGenerator* generator_;
ProfilerEventsProcessor* processor_;
int saved_logging_nesting_;
+ bool need_to_stop_sampler_;
Atomic32 is_profiling_;
#else
// 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();
// 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();
}
}
OS::Sleep(interval_);
- state = SamplerRegistry::GetState();
}
}
// 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();