| Index: runtime/vm/isolate.cc
|
| diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
|
| index 673fa0b72f1f76797b4c546e470f302248403245..fdaf5a62441142dd772095520eb4e9c0c498c297 100644
|
| --- a/runtime/vm/isolate.cc
|
| +++ b/runtime/vm/isolate.cc
|
| @@ -338,7 +338,7 @@ Isolate::Isolate()
|
| REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_INITIALIZERS)
|
| REUSABLE_HANDLE_LIST(REUSABLE_HANDLE_SCOPE_INIT)
|
| reusable_handles_() {
|
| - set_vm_tag(VMTag::kVMTagId);
|
| + set_vm_tag(VMTag::kIdleTagId);
|
| }
|
| #undef REUSABLE_HANDLE_SCOPE_INIT
|
| #undef REUSABLE_HANDLE_INITIALIZERS
|
| @@ -366,6 +366,7 @@ Isolate::~Isolate() {
|
| void Isolate::SetCurrent(Isolate* current) {
|
| Isolate* old_current = Current();
|
| if (old_current != NULL) {
|
| + old_current->set_vm_tag(VMTag::kIdleTagId);
|
| old_current->set_thread_state(NULL);
|
| Profiler::EndExecution(old_current);
|
| }
|
| @@ -379,6 +380,7 @@ void Isolate::SetCurrent(Isolate* current) {
|
| #endif
|
| Profiler::BeginExecution(current);
|
| current->set_thread_state(thread_state);
|
| + current->set_vm_tag(VMTag::kVMTagId);
|
| }
|
| }
|
|
|
| @@ -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("error", error, false);
|
| + }
|
| +
|
| {
|
| 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());
|
| +}
|
| +
|
| +
|
| void Isolate::VisitIsolates(IsolateVisitor* visitor) {
|
| if (visitor == NULL) {
|
| return;
|
|
|