Index: runtime/vm/isolate.cc |
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc |
index cb5b63d11c36867926f4dc2bbb2f7bcdb9c13493..5d1813d51527bdd1b0a6ece37ef8d69bced1b26c 100644 |
--- a/runtime/vm/isolate.cc |
+++ b/runtime/vm/isolate.cc |
@@ -541,6 +541,7 @@ Isolate::Isolate() |
store_buffer_(), |
message_notify_callback_(NULL), |
name_(NULL), |
+ debugger_name_(NULL), |
start_time_(OS::GetCurrentTimeMicros()), |
main_port_(0), |
origin_id_(0), |
@@ -609,6 +610,7 @@ Isolate::Isolate(Isolate* original) |
class_table_(original->class_table()), |
message_notify_callback_(NULL), |
name_(NULL), |
+ debugger_name_(NULL), |
start_time_(OS::GetCurrentTimeMicros()), |
main_port_(0), |
pause_capability_(0), |
@@ -666,6 +668,7 @@ Isolate::Isolate(Isolate* original) |
Isolate::~Isolate() { |
free(name_); |
+ free(debugger_name_); |
delete heap_; |
delete object_store_; |
delete api_state_; |
@@ -771,7 +774,6 @@ Isolate* Isolate::Init(const char* name_prefix, bool is_vm_isolate) { |
result->set_terminate_capability(result->random()->NextUInt64()); |
result->BuildName(name_prefix); |
- |
result->debugger_ = new Debugger(); |
result->debugger_->Initialize(result); |
if (FLAG_trace_isolates) { |
@@ -815,11 +817,18 @@ uword Isolate::GetCurrentStackPointer() { |
} |
+void Isolate::set_debugger_name(const char* name) { |
+ free(debugger_name_); |
+ debugger_name_ = strdup(name); |
+} |
+ |
+ |
void Isolate::BuildName(const char* name_prefix) { |
ASSERT(name_ == NULL); |
if (name_prefix == NULL) { |
name_prefix = "isolate"; |
} |
+ set_debugger_name(name_prefix); |
if (ServiceIsolate::NameEquals(name_prefix)) { |
name_ = strdup(name_prefix); |
return; |
@@ -931,6 +940,7 @@ void Isolate::DoneLoading() { |
bool Isolate::MakeRunnable() { |
ASSERT(Isolate::Current() == NULL); |
+ |
MutexLocker ml(mutex_); |
// Check if we are in a valid state to make the isolate runnable. |
if (is_runnable_ == true) { |
@@ -1535,23 +1545,16 @@ void Isolate::PrintJSON(JSONStream* stream, bool ref) { |
jsobj.AddProperty("type", (ref ? "@Isolate" : "Isolate")); |
jsobj.AddPropertyF("id", "isolates/%" Pd "", |
static_cast<intptr_t>(main_port())); |
- jsobj.AddPropertyF("mainPort", "%" Pd "", |
- static_cast<intptr_t>(main_port())); |
- // Assign an isolate name based on the entry function. |
- IsolateSpawnState* state = spawn_state(); |
- if (state == NULL) { |
- jsobj.AddPropertyF("name", "root"); |
- } else if (state->class_name() != NULL) { |
- jsobj.AddPropertyF("name", "%s.%s", |
- state->class_name(), |
- state->function_name()); |
- } else { |
- jsobj.AddPropertyF("name", "%s", state->function_name()); |
- } |
+ jsobj.AddProperty("name", debugger_name()); |
+ jsobj.AddPropertyF("number", "%" Pd "", |
+ static_cast<intptr_t>(main_port())); |
if (ref) { |
return; |
} |
+ int64_t start_time_millis = start_time() / kMicrosecondsPerMillisecond; |
+ jsobj.AddProperty64("startTime", start_time_millis); |
+ IsolateSpawnState* state = spawn_state(); |
if (state != NULL) { |
const Object& entry = Object::Handle(this, state->ResolveFunction()); |
if (!entry.IsNull() && entry.IsFunction()) { |