Index: src/isolate.h |
diff --git a/src/isolate.h b/src/isolate.h |
index 638658ba7a67a21a4c6cc68cb05765c4cfc4ad5c..7c9573802e9900c0a44c52524ac929bcb4aafafe 100644 |
--- a/src/isolate.h |
+++ b/src/isolate.h |
@@ -897,13 +897,19 @@ class Isolate { |
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; |