Index: src/platform-solaris.cc |
diff --git a/src/platform-solaris.cc b/src/platform-solaris.cc |
index 56527416962038d6c3673fd26846d9308f6deb5e..70f86596e838444e5e2481eab14b44496dd9fb7f 100644 |
--- a/src/platform-solaris.cc |
+++ b/src/platform-solaris.cc |
@@ -701,11 +701,6 @@ class Sampler::PlatformData : public Malloced { |
class SignalSender : public Thread { |
public: |
- enum SleepInterval { |
- HALF_INTERVAL, |
- FULL_INTERVAL |
- }; |
- |
static const int kSignalSenderStackSize = 64 * KB; |
explicit SignalSender(int interval) |
@@ -760,44 +755,16 @@ class SignalSender : public Thread { |
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(); |
- if (cpu_profiling_enabled && !signal_handler_installed_) { |
- InstallSignalHandler(); |
- } else if (!cpu_profiling_enabled && signal_handler_installed_) { |
- RestoreSignalHandler(); |
- } |
- |
// When CPU profiling is enabled both JavaScript and C++ code is |
// profiled. We must not suspend. |
- if (!cpu_profiling_enabled) { |
- if (rate_limiter_.SuspendIfNecessary()) continue; |
- } |
- if (cpu_profiling_enabled && runtime_profiler_enabled) { |
- if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this)) { |
- return; |
- } |
- Sleep(HALF_INTERVAL); |
- if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, NULL)) { |
- return; |
- } |
- Sleep(HALF_INTERVAL); |
+ if (state == SamplerRegistry::HAS_CPU_PROFILING_SAMPLERS) { |
+ if (!signal_handler_installed_) InstallSignalHandler(); |
+ SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, this); |
} else { |
- if (cpu_profiling_enabled) { |
- if (!SamplerRegistry::IterateActiveSamplers(&DoCpuProfile, |
- this)) { |
- return; |
- } |
- } |
- if (runtime_profiler_enabled) { |
- if (!SamplerRegistry::IterateActiveSamplers(&DoRuntimeProfile, |
- NULL)) { |
- return; |
- } |
- } |
- Sleep(FULL_INTERVAL); |
+ if (signal_handler_installed_) RestoreSignalHandler(); |
+ if (rate_limiter_.SuspendIfNecessary()) continue; |
} |
+ Sleep(); // TODO(svenpanne) Figure out if OS:Sleep(interval_) is enough. |
} |
} |
@@ -807,21 +774,15 @@ class SignalSender : public Thread { |
sender->SendProfilingSignal(sampler->platform_data()->vm_tid()); |
} |
- static void DoRuntimeProfile(Sampler* sampler, void* ignored) { |
- if (!sampler->isolate()->IsInitialized()) return; |
- sampler->isolate()->runtime_profiler()->NotifyTick(); |
- } |
- |
void SendProfilingSignal(pthread_t tid) { |
if (!signal_handler_installed_) return; |
pthread_kill(tid, SIGPROF); |
} |
- void Sleep(SleepInterval full_or_half) { |
+ void Sleep() { |
// Convert ms to us and subtract 100 us to compensate delays |
// occuring during signal delivery. |
useconds_t interval = interval_ * 1000 - 100; |
- if (full_or_half == HALF_INTERVAL) interval /= 2; |
int result = usleep(interval); |
#ifdef DEBUG |
if (result != 0 && errno != EINTR) { |