Revision: 5972 Author: [email protected] Date: Fri Dec 10 06:49:24 2010 Log: Fix bug that disabled optimization when profiling.
Review URL: http://codereview.chromium.org/5720003 http://code.google.com/p/v8/source/detail?r=5972 Modified: /branches/bleeding_edge/src/runtime-profiler.cc ======================================= --- /branches/bleeding_edge/src/runtime-profiler.cc Fri Dec 10 04:00:26 2010 +++ /branches/bleeding_edge/src/runtime-profiler.cc Fri Dec 10 06:49:24 2010 @@ -348,9 +348,32 @@ node->set_next(optimize_soon_list); optimize_soon_list = node; } + + +static void UpdateStateRatio(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); +} void RuntimeProfiler::NotifyTick() { + // Record state sample. + SamplerState state = Top::IsInJSState() + ? IN_JS_STATE + : IN_NON_JS_STATE; + UpdateStateRatio(state); StackGuard::RequestRuntimeProfilerTick(); } @@ -402,24 +425,6 @@ int RuntimeProfiler::SamplerWindowSize() { return kSamplerWindowSize; } - - -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() { @@ -431,10 +436,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 { -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
