| 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;
|
|
|