| Index: src/platform-macos.cc
|
| diff --git a/src/platform-macos.cc b/src/platform-macos.cc
|
| index 45029879f4bcf16cdbaddae2732da971d87582b6..1537ffc914db82fc4cdb8da0f6a1d4488a837b94 100644
|
| --- a/src/platform-macos.cc
|
| +++ b/src/platform-macos.cc
|
| @@ -544,12 +544,18 @@ class Sampler::PlatformData : public Malloced {
|
|
|
| // Sampler thread handler.
|
| void Runner() {
|
| - // Loop until the sampler is disengaged.
|
| - while (sampler_->IsActive()) {
|
| - TickSample sample;
|
| + // Loop until the sampler is disengaged, keeping the specified samling freq.
|
| + for ( ; sampler_->IsActive(); OS::Sleep(sampler_->interval_)) {
|
| +#ifdef ENABLE_CPP_PROFILES_PROCESSOR
|
| + if (Logger::state() == GC) continue;
|
| +
|
| + TickSample* sample = NULL;
|
| +#else
|
| + TickSample sample_obj, *sample = &sample_obj;
|
|
|
| // We always sample the VM state.
|
| - sample.state = Logger::state();
|
| + sample->state = Logger::state();
|
| +#endif // ENABLE_CPP_PROFILES_PROCESSOR
|
|
|
| // If profiling, we record the pc and sp of the profiled thread.
|
| if (sampler_->IsProfiling()
|
| @@ -580,19 +586,23 @@ class Sampler::PlatformData : public Malloced {
|
| flavor,
|
| reinterpret_cast<natural_t*>(&state),
|
| &count) == KERN_SUCCESS) {
|
| - sample.pc = reinterpret_cast<Address>(state.REGISTER_FIELD(ip));
|
| - sample.sp = reinterpret_cast<Address>(state.REGISTER_FIELD(sp));
|
| - sample.fp = reinterpret_cast<Address>(state.REGISTER_FIELD(bp));
|
| - sampler_->SampleStack(&sample);
|
| +#ifdef ENABLE_CPP_PROFILES_PROCESSOR
|
| + sample = CpuProfiler::TickSampleEvent();
|
| +#endif
|
| + if (sample != NULL) {
|
| + sample->pc = reinterpret_cast<Address>(state.REGISTER_FIELD(ip));
|
| + sample->sp = reinterpret_cast<Address>(state.REGISTER_FIELD(sp));
|
| + sample->fp = reinterpret_cast<Address>(state.REGISTER_FIELD(bp));
|
| + sampler_->SampleStack(sample);
|
| + }
|
| }
|
| thread_resume(profiled_thread_);
|
| }
|
|
|
| +#ifndef ENABLE_CPP_PROFILES_PROCESSOR
|
| // Invoke tick handler with program counter and stack pointer.
|
| - sampler_->Tick(&sample);
|
| -
|
| - // Wait until next sampling.
|
| - usleep(sampler_->interval_ * 1000);
|
| + sampler_->Tick(sample);
|
| +#endif
|
| }
|
| }
|
| };
|
|
|