Index: src/isolate.h |
=================================================================== |
--- src/isolate.h (revision 7548) |
+++ src/isolate.h (working copy) |
@@ -897,13 +897,19 @@ |
void SetCurrentVMState(StateTag state) { |
if (RuntimeProfiler::IsEnabled()) { |
- if (state == JS) { |
- // JS or non-JS -> JS transition. |
+ StateTag current_state = thread_local_top_.current_vm_state_; |
+ if (current_state != JS && state == JS) { |
+ // Non-JS -> JS transition. |
RuntimeProfiler::IsolateEnteredJS(this); |
- } else if (thread_local_top_.current_vm_state_ == JS) { |
+ } else if (current_state == JS && state != JS) { |
// JS -> non-JS transition. |
ASSERT(RuntimeProfiler::IsSomeIsolateInJS()); |
RuntimeProfiler::IsolateExitedJS(this); |
+ } else { |
+ // Other types of state transitions are not interesting to the |
+ // runtime profiler, because they don't affect whether we're |
+ // in JS or not. |
+ ASSERT((current_state == JS) == (state == JS)); |
} |
} |
thread_local_top_.current_vm_state_ = state; |