Chromium Code Reviews| Index: runtime/vm/isolate.cc |
| diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc |
| index 673fa0b72f1f76797b4c546e470f302248403245..b95c4c35deb365959f595aef5f1103d3bb7fd7fe 100644 |
| --- a/runtime/vm/isolate.cc |
| +++ b/runtime/vm/isolate.cc |
| @@ -368,9 +368,11 @@ void Isolate::SetCurrent(Isolate* current) { |
| if (old_current != NULL) { |
| old_current->set_thread_state(NULL); |
| Profiler::EndExecution(old_current); |
| + old_current->set_vm_tag(VMTag::kIdleTagId); |
| } |
| Thread::SetThreadLocal(isolate_key, reinterpret_cast<uword>(current)); |
| if (current != NULL) { |
| + current->set_vm_tag(VMTag::kVMTagId); |
| ASSERT(current->thread_state() == NULL); |
| InterruptableThreadState* thread_state = |
| ThreadInterrupter::GetCurrentThreadState(); |
| @@ -923,6 +925,12 @@ void Isolate::PrintToJSONStream(JSONStream* stream, bool ref) { |
| timer_list().PrintTimersToJSONProperty(&jsobj); |
| + if (object_store()->sticky_error() != Object::null()) { |
| + Error& error = Error::Handle(this, object_store()->sticky_error()); |
| + ASSERT(!error.IsNull()); |
| + jsobj.AddProperty("stickyError", error, false); |
|
turnidge
2014/03/24 20:22:13
rename to "error"?
Cutch
2014/03/25 14:39:06
Done.
|
| + } |
| + |
| { |
| JSONObject typeargsRef(&jsobj, "canonicalTypeArguments"); |
| typeargsRef.AddProperty("type", "@TypeArgumentsList"); |
| @@ -932,6 +940,23 @@ void Isolate::PrintToJSONStream(JSONStream* stream, bool ref) { |
| } |
| +void Isolate::ProfileInterrupt() { |
| + InterruptableThreadState* state = thread_state(); |
| + if (state == NULL) { |
| + // Isolate is not scheduled on a thread. |
| + ProfileIdle(); |
| + return; |
| + } |
| + ASSERT(state->id != Thread::kInvalidThreadId); |
| + ThreadInterrupter::InterruptThread(state); |
| +} |
| + |
| + |
| +void Isolate::ProfileIdle() { |
| + vm_tag_counters_.Increment(vm_tag()); |
|
turnidge
2014/03/24 20:22:13
Is the vm_tag always the kIdleTagId here? Or are
Cutch
2014/03/25 14:39:06
It will always be kIdleTagId or kVMTagId (there is
|
| +} |
| + |
| + |
| void Isolate::VisitIsolates(IsolateVisitor* visitor) { |
| if (visitor == NULL) { |
| return; |