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 |
} |
} |
}; |