Chromium Code Reviews| Index: src/runtime-profiler.cc |
| =================================================================== |
| --- src/runtime-profiler.cc (revision 5961) |
| +++ src/runtime-profiler.cc (working copy) |
| @@ -350,7 +350,31 @@ |
| } |
| +static void AddStateSample(SamplerState current_state) { |
|
Vitaly Repeshko
2010/12/10 14:40:40
Rename to "UpdateStateRatio"?
Karl Klose
2010/12/10 14:45:06
Done.
|
| + static const int kStateWindowSize = 128; |
| + static SamplerState state_window[kStateWindowSize]; |
| + static int state_window_position = 0; |
| + static int state_counts[2] = { kStateWindowSize, 0 }; |
| + |
| + SamplerState old_state = state_window[state_window_position]; |
| + state_counts[old_state]--; |
| + state_window[state_window_position] = current_state; |
| + state_counts[current_state]++; |
| + ASSERT(IsPowerOf2(kStateWindowSize)); |
| + state_window_position = (state_window_position + 1) & |
| + (kStateWindowSize - 1); |
| + NoBarrier_Store(&js_ratio, state_counts[IN_JS_STATE] * 100 / |
| + kStateWindowSize); |
| +} |
| + |
| + |
| void RuntimeProfiler::NotifyTick() { |
| + // Record state sample. |
| + if (Top::IsInJSState()) { |
| + AddStateSample(IN_JS_STATE); |
|
Vitaly Repeshko
2010/12/10 14:40:40
Nice place to use ?: operator. Up to you though.
Karl Klose
2010/12/10 14:45:06
Done.
|
| + } else { |
| + AddStateSample(IN_NON_JS_STATE); |
| + } |
| StackGuard::RequestRuntimeProfilerTick(); |
| } |
| @@ -404,24 +428,6 @@ |
| } |
| -static void AddStateSample(SamplerState current_state) { |
| - static const int kStateWindowSize = 128; |
| - static SamplerState state_window[kStateWindowSize]; |
| - static int state_window_position = 0; |
| - static int state_counts[2] = { kStateWindowSize, 0 }; |
| - |
| - SamplerState old_state = state_window[state_window_position]; |
| - state_counts[old_state]--; |
| - state_window[state_window_position] = current_state; |
| - state_counts[current_state]++; |
| - ASSERT(IsPowerOf2(kStateWindowSize)); |
| - state_window_position = (state_window_position + 1) & |
| - (kStateWindowSize - 1); |
| - NoBarrier_Store(&js_ratio, state_counts[IN_JS_STATE] * 100 / |
| - kStateWindowSize); |
| -} |
| - |
| - |
| bool RuntimeProfilerRateLimiter::SuspendIfNecessary() { |
| static const int kNonJSTicksThreshold = 100; |
| // We suspend the runtime profiler thread when not running |
| @@ -431,10 +437,8 @@ |
| !CpuProfiler::is_profiling() && |
| !(FLAG_prof && FLAG_prof_auto)) { |
| if (Top::IsInJSState()) { |
| - AddStateSample(IN_JS_STATE); |
| non_js_ticks_ = 0; |
| } else { |
| - AddStateSample(IN_NON_JS_STATE); |
| if (non_js_ticks_ < kNonJSTicksThreshold) { |
| ++non_js_ticks_; |
| } else { |