| Index: runtime/vm/service.cc
|
| diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
|
| index 797e060b6821e14c14ba8ca61c80ec008caa553b..c659d7d5590baa32af10d31a1849f44b37c58534 100644
|
| --- a/runtime/vm/service.cc
|
| +++ b/runtime/vm/service.cc
|
| @@ -529,7 +529,7 @@ T EnumMapper(const char* value, const char** enums, T* values) {
|
| }
|
|
|
|
|
| -typedef bool (*ServiceMethodEntry)(Isolate* isolate, JSONStream* js);
|
| +typedef bool (*ServiceMethodEntry)(Thread* thread, JSONStream* js);
|
|
|
|
|
| struct ServiceMethodDescriptor {
|
| @@ -650,7 +650,7 @@ void Service::InvokeMethod(Isolate* I, const Array& msg) {
|
| js.PostReply();
|
| return;
|
| }
|
| - if (method->entry(I, &js)) {
|
| + if (method->entry(T, &js)) {
|
| js.PostReply();
|
| } else {
|
| // NOTE(turnidge): All message handlers currently return true,
|
| @@ -1011,8 +1011,8 @@ static const MethodParameter* get_isolate_params[] = {
|
| };
|
|
|
|
|
| -static bool GetIsolate(Isolate* isolate, JSONStream* js) {
|
| - isolate->PrintJSON(js, false);
|
| +static bool GetIsolate(Thread* thread, JSONStream* js) {
|
| + thread->isolate()->PrintJSON(js, false);
|
| return true;
|
| }
|
|
|
| @@ -1024,7 +1024,8 @@ static const MethodParameter* get_stack_params[] = {
|
| };
|
|
|
|
|
| -static bool GetStack(Isolate* isolate, JSONStream* js) {
|
| +static bool GetStack(Thread* thread, JSONStream* js) {
|
| + Isolate* isolate = thread->isolate();
|
| DebuggerStackTrace* stack = isolate->debugger()->StackTrace();
|
| // Do we want the complete script object and complete local variable objects?
|
| // This is true for dump requests.
|
| @@ -1089,20 +1090,20 @@ void Service::SendEchoEvent(Isolate* isolate, const char* text) {
|
| }
|
|
|
|
|
| -static bool TriggerEchoEvent(Isolate* isolate, JSONStream* js) {
|
| +static bool TriggerEchoEvent(Thread* thread, JSONStream* js) {
|
| if (Service::echo_stream.enabled()) {
|
| - Service::SendEchoEvent(isolate, js->LookupParam("text"));
|
| + Service::SendEchoEvent(thread->isolate(), js->LookupParam("text"));
|
| }
|
| JSONObject jsobj(js);
|
| return HandleCommonEcho(&jsobj, js);
|
| }
|
|
|
|
|
| -static bool DumpIdZone(Isolate* isolate, JSONStream* js) {
|
| +static bool DumpIdZone(Thread* thread, JSONStream* js) {
|
| // TODO(johnmccutchan): Respect _idZone parameter passed to RPC. For now,
|
| // always send the ObjectIdRing.
|
| //
|
| - ObjectIdRing* ring = isolate->object_id_ring();
|
| + ObjectIdRing* ring = thread->isolate()->object_id_ring();
|
| ASSERT(ring != NULL);
|
| // When printing the ObjectIdRing, force object id reuse policy.
|
| RingServiceIdZone reuse_zone;
|
| @@ -1113,7 +1114,7 @@ static bool DumpIdZone(Isolate* isolate, JSONStream* js) {
|
| }
|
|
|
|
|
| -static bool Echo(Isolate* isolate, JSONStream* js) {
|
| +static bool Echo(Thread* thread, JSONStream* js) {
|
| JSONObject jsobj(js);
|
| return HandleCommonEcho(&jsobj, js);
|
| }
|
| @@ -1421,7 +1422,7 @@ static RawObject* LookupHeapObjectCode(Isolate* isolate,
|
| }
|
|
|
|
|
| -static RawObject* LookupHeapObjectMessage(Isolate* isolate,
|
| +static RawObject* LookupHeapObjectMessage(Thread* thread,
|
| char** parts, int num_parts) {
|
| if (num_parts != 2) {
|
| return Object::sentinel().raw();
|
| @@ -1431,7 +1432,7 @@ static RawObject* LookupHeapObjectMessage(Isolate* isolate,
|
| return Object::sentinel().raw();
|
| }
|
| MessageHandler::AcquiredQueues aq;
|
| - isolate->message_handler()->AcquireQueues(&aq);
|
| + thread->isolate()->message_handler()->AcquireQueues(&aq);
|
| Message* message = aq.queue()->FindMessageById(message_id);
|
| if (message == NULL) {
|
| // The user may try to load an expired message.
|
| @@ -1439,15 +1440,14 @@ static RawObject* LookupHeapObjectMessage(Isolate* isolate,
|
| }
|
| MessageSnapshotReader reader(message->data(),
|
| message->len(),
|
| - Thread::Current());
|
| + thread);
|
| return reader.ReadObject();
|
| }
|
|
|
|
|
| -static RawObject* LookupHeapObject(Isolate* isolate,
|
| +static RawObject* LookupHeapObject(Thread* thread,
|
| const char* id_original,
|
| ObjectIdRing::LookupResult* result) {
|
| - Thread* thread = Thread::Current();
|
| char* id = thread->zone()->MakeCopyOfString(id_original);
|
|
|
| // Parse the id by splitting at each '/'.
|
| @@ -1476,6 +1476,7 @@ static RawObject* LookupHeapObject(Isolate* isolate,
|
| *result = ObjectIdRing::kValid;
|
| }
|
|
|
| + Isolate* isolate = thread->isolate();
|
| if (strcmp(parts[0], "objects") == 0) {
|
| // Object ids look like "objects/1123"
|
| Object& obj = Object::Handle(thread->zone());
|
| @@ -1498,7 +1499,7 @@ static RawObject* LookupHeapObject(Isolate* isolate,
|
| } else if (strcmp(parts[0], "code") == 0) {
|
| return LookupHeapObjectCode(isolate, parts, num_parts);
|
| } else if (strcmp(parts[0], "messages") == 0) {
|
| - return LookupHeapObjectMessage(isolate, parts, num_parts);
|
| + return LookupHeapObjectMessage(thread, parts, num_parts);
|
| }
|
|
|
| // Not found.
|
| @@ -1620,10 +1621,7 @@ static const MethodParameter* get_inbound_references_params[] = {
|
| };
|
|
|
|
|
| -static bool GetInboundReferences(Isolate* isolate, JSONStream* js) {
|
| - Thread* thread = Thread::Current();
|
| - ASSERT(isolate == thread->isolate());
|
| -
|
| +static bool GetInboundReferences(Thread* thread, JSONStream* js) {
|
| const char* target_id = js->LookupParam("targetId");
|
| if (target_id == NULL) {
|
| PrintMissingParamError(js, "targetId");
|
| @@ -1644,7 +1642,7 @@ static bool GetInboundReferences(Isolate* isolate, JSONStream* js) {
|
| ObjectIdRing::LookupResult lookup_result;
|
| {
|
| HANDLESCOPE(thread);
|
| - obj = LookupHeapObject(isolate, target_id, &lookup_result);
|
| + obj = LookupHeapObject(thread, target_id, &lookup_result);
|
| }
|
| if (obj.raw() == Object::sentinel().raw()) {
|
| if (lookup_result == ObjectIdRing::kCollected) {
|
| @@ -1722,10 +1720,7 @@ static const MethodParameter* get_retaining_path_params[] = {
|
| };
|
|
|
|
|
| -static bool GetRetainingPath(Isolate* isolate, JSONStream* js) {
|
| - Thread* thread = Thread::Current();
|
| - ASSERT(isolate == thread->isolate());
|
| -
|
| +static bool GetRetainingPath(Thread* thread, JSONStream* js) {
|
| const char* target_id = js->LookupParam("targetId");
|
| if (target_id == NULL) {
|
| PrintMissingParamError(js, "targetId");
|
| @@ -1746,7 +1741,7 @@ static bool GetRetainingPath(Isolate* isolate, JSONStream* js) {
|
| ObjectIdRing::LookupResult lookup_result;
|
| {
|
| HANDLESCOPE(thread);
|
| - obj = LookupHeapObject(isolate, target_id, &lookup_result);
|
| + obj = LookupHeapObject(thread, target_id, &lookup_result);
|
| }
|
| if (obj.raw() == Object::sentinel().raw()) {
|
| if (lookup_result == ObjectIdRing::kCollected) {
|
| @@ -1768,14 +1763,14 @@ static const MethodParameter* get_retained_size_params[] = {
|
| };
|
|
|
|
|
| -static bool GetRetainedSize(Isolate* isolate, JSONStream* js) {
|
| +static bool GetRetainedSize(Thread* thread, JSONStream* js) {
|
| const char* target_id = js->LookupParam("targetId");
|
| if (target_id == NULL) {
|
| PrintMissingParamError(js, "targetId");
|
| return true;
|
| }
|
| ObjectIdRing::LookupResult lookup_result;
|
| - Object& obj = Object::Handle(LookupHeapObject(isolate, target_id,
|
| + Object& obj = Object::Handle(LookupHeapObject(thread, target_id,
|
| &lookup_result));
|
| if (obj.raw() == Object::sentinel().raw()) {
|
| if (lookup_result == ObjectIdRing::kCollected) {
|
| @@ -1787,7 +1782,6 @@ static bool GetRetainedSize(Isolate* isolate, JSONStream* js) {
|
| }
|
| return true;
|
| }
|
| - Thread* thread = Thread::Current();
|
| // TODO(rmacnak): There is no way to get the size retained by a class object.
|
| // SizeRetainedByClass should be a separate RPC.
|
| if (obj.IsClass()) {
|
| @@ -1813,8 +1807,8 @@ static const MethodParameter* evaluate_params[] = {
|
| };
|
|
|
|
|
| -static bool Evaluate(Isolate* isolate, JSONStream* js) {
|
| - if (!isolate->compilation_allowed()) {
|
| +static bool Evaluate(Thread* thread, JSONStream* js) {
|
| + if (!thread->isolate()->compilation_allowed()) {
|
| js->PrintError(kFeatureDisabled,
|
| "Cannot evaluate when running a precompiled program.");
|
| return true;
|
| @@ -1829,10 +1823,10 @@ static bool Evaluate(Isolate* isolate, JSONStream* js) {
|
| PrintMissingParamError(js, "expression");
|
| return true;
|
| }
|
| - Zone* zone = Thread::Current()->zone();
|
| + Zone* zone = thread->zone();
|
| const String& expr_str = String::Handle(zone, String::New(expr));
|
| ObjectIdRing::LookupResult lookup_result;
|
| - Object& obj = Object::Handle(zone, LookupHeapObject(isolate, target_id,
|
| + Object& obj = Object::Handle(zone, LookupHeapObject(thread, target_id,
|
| &lookup_result));
|
| if (obj.raw() == Object::sentinel().raw()) {
|
| if (lookup_result == ObjectIdRing::kCollected) {
|
| @@ -1886,7 +1880,8 @@ static const MethodParameter* evaluate_in_frame_params[] = {
|
| };
|
|
|
|
|
| -static bool EvaluateInFrame(Isolate* isolate, JSONStream* js) {
|
| +static bool EvaluateInFrame(Thread* thread, JSONStream* js) {
|
| + Isolate* isolate = thread->isolate();
|
| if (!isolate->compilation_allowed()) {
|
| js->PrintError(kFeatureDisabled,
|
| "Cannot evaluate when running a precompiled program.");
|
| @@ -1900,7 +1895,7 @@ static bool EvaluateInFrame(Isolate* isolate, JSONStream* js) {
|
| }
|
| ActivationFrame* frame = stack->FrameAt(framePos);
|
|
|
| - Zone* zone = Thread::Current()->zone();
|
| + Zone* zone = thread->zone();
|
| const char* expr = js->LookupParam("expression");
|
| const String& expr_str = String::Handle(zone, String::New(expr));
|
|
|
| @@ -1948,7 +1943,7 @@ static const MethodParameter* get_instances_params[] = {
|
| };
|
|
|
|
|
| -static bool GetInstances(Isolate* isolate, JSONStream* js) {
|
| +static bool GetInstances(Thread* thread, JSONStream* js) {
|
| const char* target_id = js->LookupParam("classId");
|
| if (target_id == NULL) {
|
| PrintMissingParamError(js, "classId");
|
| @@ -1965,7 +1960,7 @@ static bool GetInstances(Isolate* isolate, JSONStream* js) {
|
| return true;
|
| }
|
| const Object& obj =
|
| - Object::Handle(LookupHeapObject(isolate, target_id, NULL));
|
| + Object::Handle(LookupHeapObject(thread, target_id, NULL));
|
| if (obj.raw() == Object::sentinel().raw() ||
|
| !obj.IsClass()) {
|
| PrintInvalidParamError(js, "classId");
|
| @@ -1974,7 +1969,7 @@ static bool GetInstances(Isolate* isolate, JSONStream* js) {
|
| const Class& cls = Class::Cast(obj);
|
| Array& storage = Array::Handle(Array::New(limit));
|
| GetInstancesVisitor visitor(cls, storage);
|
| - ObjectGraph graph(Thread::Current());
|
| + ObjectGraph graph(thread);
|
| graph.IterateObjects(&visitor);
|
| intptr_t count = visitor.count();
|
| if (count < limit) {
|
| @@ -2055,14 +2050,13 @@ class FunctionCoverageFilter : public CoverageFilter {
|
| };
|
|
|
|
|
| -static bool GetHitsOrSites(Isolate* isolate, JSONStream* js, bool as_sites) {
|
| - Thread* thread = Thread::Current();
|
| +static bool GetHitsOrSites(Thread* thread, JSONStream* js, bool as_sites) {
|
| if (!js->HasParam("targetId")) {
|
| CodeCoverage::PrintJSON(thread, js, NULL, as_sites);
|
| return true;
|
| }
|
| const char* target_id = js->LookupParam("targetId");
|
| - Object& obj = Object::Handle(LookupHeapObject(isolate, target_id, NULL));
|
| + Object& obj = Object::Handle(LookupHeapObject(thread, target_id, NULL));
|
| if (obj.raw() == Object::sentinel().raw()) {
|
| PrintInvalidParamError(js, "targetId");
|
| return true;
|
| @@ -2103,9 +2097,9 @@ static const MethodParameter* get_coverage_params[] = {
|
| };
|
|
|
|
|
| -static bool GetCoverage(Isolate* isolate, JSONStream* js) {
|
| +static bool GetCoverage(Thread* thread, JSONStream* js) {
|
| // TODO(rmacnak): Remove this response; it is subsumed by GetCallSiteData.
|
| - return GetHitsOrSites(isolate, js, false);
|
| + return GetHitsOrSites(thread, js, false);
|
| }
|
|
|
|
|
| @@ -2116,12 +2110,12 @@ static const MethodParameter* get_call_site_data_params[] = {
|
| };
|
|
|
|
|
| -static bool GetCallSiteData(Isolate* isolate, JSONStream* js) {
|
| - return GetHitsOrSites(isolate, js, true);
|
| +static bool GetCallSiteData(Thread* thread, JSONStream* js) {
|
| + return GetHitsOrSites(thread, js, true);
|
| }
|
|
|
|
|
| -static bool AddBreakpointCommon(Isolate* isolate,
|
| +static bool AddBreakpointCommon(Thread* thread,
|
| JSONStream* js,
|
| const String& script_uri) {
|
| const char* line_param = js->LookupParam("line");
|
| @@ -2138,7 +2132,8 @@ static bool AddBreakpointCommon(Isolate* isolate,
|
| }
|
| ASSERT(!script_uri.IsNull());
|
| Breakpoint* bpt = NULL;
|
| - bpt = isolate->debugger()->SetBreakpointAtLineCol(script_uri, line, col);
|
| + bpt = thread->isolate()->debugger()->
|
| + SetBreakpointAtLineCol(script_uri, line, col);
|
| if (bpt == NULL) {
|
| js->PrintError(kCannotAddBreakpoint,
|
| "%s: Cannot add breakpoint at line '%s'",
|
| @@ -2159,10 +2154,9 @@ static const MethodParameter* add_breakpoint_params[] = {
|
| };
|
|
|
|
|
| -static bool AddBreakpoint(Isolate* isolate, JSONStream* js) {
|
| +static bool AddBreakpoint(Thread* thread, JSONStream* js) {
|
| const char* script_id_param = js->LookupParam("scriptId");
|
| - Object& obj =
|
| - Object::Handle(LookupHeapObject(isolate, script_id_param, NULL));
|
| + Object& obj = Object::Handle(LookupHeapObject(thread, script_id_param, NULL));
|
| if (obj.raw() == Object::sentinel().raw() || !obj.IsScript()) {
|
| PrintInvalidParamError(js, "scriptId");
|
| return true;
|
| @@ -2170,7 +2164,7 @@ static bool AddBreakpoint(Isolate* isolate, JSONStream* js) {
|
| const Script& script = Script::Cast(obj);
|
| const String& script_uri = String::Handle(script.url());
|
| ASSERT(!script_uri.IsNull());
|
| - return AddBreakpointCommon(isolate, js, script_uri);
|
| + return AddBreakpointCommon(thread, js, script_uri);
|
| }
|
|
|
|
|
| @@ -2183,10 +2177,10 @@ static const MethodParameter* add_breakpoint_with_script_uri_params[] = {
|
| };
|
|
|
|
|
| -static bool AddBreakpointWithScriptUri(Isolate* isolate, JSONStream* js) {
|
| +static bool AddBreakpointWithScriptUri(Thread* thread, JSONStream* js) {
|
| const char* script_uri_param = js->LookupParam("scriptUri");
|
| const String& script_uri = String::Handle(String::New(script_uri_param));
|
| - return AddBreakpointCommon(isolate, js, script_uri);
|
| + return AddBreakpointCommon(thread, js, script_uri);
|
| }
|
|
|
|
|
| @@ -2197,16 +2191,16 @@ static const MethodParameter* add_breakpoint_at_entry_params[] = {
|
| };
|
|
|
|
|
| -static bool AddBreakpointAtEntry(Isolate* isolate, JSONStream* js) {
|
| +static bool AddBreakpointAtEntry(Thread* thread, JSONStream* js) {
|
| const char* function_id = js->LookupParam("functionId");
|
| - Object& obj = Object::Handle(LookupHeapObject(isolate, function_id, NULL));
|
| + Object& obj = Object::Handle(LookupHeapObject(thread, function_id, NULL));
|
| if (obj.raw() == Object::sentinel().raw() || !obj.IsFunction()) {
|
| PrintInvalidParamError(js, "functionId");
|
| return true;
|
| }
|
| const Function& function = Function::Cast(obj);
|
| Breakpoint* bpt =
|
| - isolate->debugger()->SetBreakpointAtEntry(function, false);
|
| + thread->isolate()->debugger()->SetBreakpointAtEntry(function, false);
|
| if (bpt == NULL) {
|
| js->PrintError(kCannotAddBreakpoint,
|
| "%s: Cannot add breakpoint at function '%s'",
|
| @@ -2225,16 +2219,16 @@ static const MethodParameter* add_breakpoint_at_activation_params[] = {
|
| };
|
|
|
|
|
| -static bool AddBreakpointAtActivation(Isolate* isolate, JSONStream* js) {
|
| +static bool AddBreakpointAtActivation(Thread* thread, JSONStream* js) {
|
| const char* object_id = js->LookupParam("objectId");
|
| - Object& obj = Object::Handle(LookupHeapObject(isolate, object_id, NULL));
|
| + Object& obj = Object::Handle(LookupHeapObject(thread, object_id, NULL));
|
| if (obj.raw() == Object::sentinel().raw() || !obj.IsInstance()) {
|
| PrintInvalidParamError(js, "objectId");
|
| return true;
|
| }
|
| const Instance& closure = Instance::Cast(obj);
|
| Breakpoint* bpt =
|
| - isolate->debugger()->SetBreakpointAtActivation(closure);
|
| + thread->isolate()->debugger()->SetBreakpointAtActivation(closure);
|
| if (bpt == NULL) {
|
| js->PrintError(kCannotAddBreakpoint,
|
| "%s: Cannot add breakpoint at activation",
|
| @@ -2252,13 +2246,14 @@ static const MethodParameter* remove_breakpoint_params[] = {
|
| };
|
|
|
|
|
| -static bool RemoveBreakpoint(Isolate* isolate, JSONStream* js) {
|
| +static bool RemoveBreakpoint(Thread* thread, JSONStream* js) {
|
| if (!js->HasParam("breakpointId")) {
|
| PrintMissingParamError(js, "breakpointId");
|
| return true;
|
| }
|
| const char* bpt_id = js->LookupParam("breakpointId");
|
| ObjectIdRing::LookupResult lookup_result;
|
| + Isolate* isolate = thread->isolate();
|
| Breakpoint* bpt = LookupBreakpoint(isolate, bpt_id, &lookup_result);
|
| // TODO(turnidge): Should we return a different error for bpts whic
|
| // have been already removed?
|
| @@ -2272,8 +2267,8 @@ static bool RemoveBreakpoint(Isolate* isolate, JSONStream* js) {
|
| }
|
|
|
|
|
| -static RawClass* GetMetricsClass(Isolate* isolate) {
|
| - Zone* zone = isolate->current_zone();
|
| +static RawClass* GetMetricsClass(Thread* thread) {
|
| + Zone* zone = thread->zone();
|
| const Library& prof_lib =
|
| Library::Handle(zone, Library::DeveloperLibrary());
|
| ASSERT(!prof_lib.IsNull());
|
| @@ -2288,12 +2283,12 @@ static RawClass* GetMetricsClass(Isolate* isolate) {
|
|
|
|
|
|
|
| -static bool HandleNativeMetricsList(Isolate* isolate, JSONStream* js) {
|
| +static bool HandleNativeMetricsList(Thread* thread, JSONStream* js) {
|
| JSONObject obj(js);
|
| obj.AddProperty("type", "MetricList");
|
| {
|
| JSONArray metrics(&obj, "metrics");
|
| - Metric* current = isolate->metrics_list_head();
|
| + Metric* current = thread->isolate()->metrics_list_head();
|
| while (current != NULL) {
|
| metrics.AddValue(current);
|
| current = current->next();
|
| @@ -2303,10 +2298,8 @@ static bool HandleNativeMetricsList(Isolate* isolate, JSONStream* js) {
|
| }
|
|
|
|
|
| -static bool HandleNativeMetric(Isolate* isolate,
|
| - JSONStream* js,
|
| - const char* id) {
|
| - Metric* current = isolate->metrics_list_head();
|
| +static bool HandleNativeMetric(Thread* thread, JSONStream* js, const char* id) {
|
| + Metric* current = thread->isolate()->metrics_list_head();
|
| while (current != NULL) {
|
| const char* name = current->name();
|
| ASSERT(name != NULL);
|
| @@ -2321,9 +2314,10 @@ static bool HandleNativeMetric(Isolate* isolate,
|
| }
|
|
|
|
|
| -static bool HandleDartMetricsList(Isolate* isolate, JSONStream* js) {
|
| - Zone* zone = isolate->current_zone();
|
| - const Class& metrics_cls = Class::Handle(zone, GetMetricsClass(isolate));
|
| +static bool HandleDartMetricsList(Thread* thread, JSONStream* js) {
|
| + Zone* zone = thread->zone();
|
| + const Class& metrics_cls =
|
| + Class::Handle(zone, GetMetricsClass(thread));
|
| const String& print_metrics_name =
|
| String::Handle(String::New("_printMetrics"));
|
| ASSERT(!print_metrics_name.IsNull());
|
| @@ -2342,9 +2336,10 @@ static bool HandleDartMetricsList(Isolate* isolate, JSONStream* js) {
|
| }
|
|
|
|
|
| -static bool HandleDartMetric(Isolate* isolate, JSONStream* js, const char* id) {
|
| - Zone* zone = isolate->current_zone();
|
| - const Class& metrics_cls = Class::Handle(zone, GetMetricsClass(isolate));
|
| +static bool HandleDartMetric(Thread* thread, JSONStream* js, const char* id) {
|
| + Zone* zone = thread->zone();
|
| + const Class& metrics_cls =
|
| + Class::Handle(zone, GetMetricsClass(thread));
|
| const String& print_metric_name =
|
| String::Handle(String::New("_printMetric"));
|
| ASSERT(!print_metric_name.IsNull());
|
| @@ -2376,7 +2371,7 @@ static const MethodParameter* get_isolate_metric_list_params[] = {
|
| };
|
|
|
|
|
| -static bool GetIsolateMetricList(Isolate* isolate, JSONStream* js) {
|
| +static bool GetIsolateMetricList(Thread* thread, JSONStream* js) {
|
| bool native_metrics = false;
|
| if (js->HasParam("type")) {
|
| if (js->ParamIs("type", "Native")) {
|
| @@ -2392,9 +2387,9 @@ static bool GetIsolateMetricList(Isolate* isolate, JSONStream* js) {
|
| return true;
|
| }
|
| if (native_metrics) {
|
| - return HandleNativeMetricsList(isolate, js);
|
| + return HandleNativeMetricsList(thread, js);
|
| }
|
| - return HandleDartMetricsList(isolate, js);
|
| + return HandleDartMetricsList(thread, js);
|
| }
|
|
|
|
|
| @@ -2404,7 +2399,7 @@ static const MethodParameter* get_isolate_metric_params[] = {
|
| };
|
|
|
|
|
| -static bool GetIsolateMetric(Isolate* isolate, JSONStream* js) {
|
| +static bool GetIsolateMetric(Thread* thread, JSONStream* js) {
|
| const char* metric_id = js->LookupParam("metricId");
|
| if (metric_id == NULL) {
|
| PrintMissingParamError(js, "metricId");
|
| @@ -2424,10 +2419,10 @@ static bool GetIsolateMetric(Isolate* isolate, JSONStream* js) {
|
| strncmp(metric_id, kNativeMetricIdPrefix, kNativeMetricIdPrefixLen) == 0;
|
| if (native_metric) {
|
| const char* id = metric_id + kNativeMetricIdPrefixLen;
|
| - return HandleNativeMetric(isolate, js, id);
|
| + return HandleNativeMetric(thread, js, id);
|
| }
|
| const char* id = metric_id + kMetricIdPrefixLen;
|
| - return HandleDartMetric(isolate, js, id);
|
| + return HandleDartMetric(thread, js, id);
|
| }
|
|
|
|
|
| @@ -2437,7 +2432,7 @@ static const MethodParameter* get_vm_metric_list_params[] = {
|
| };
|
|
|
|
|
| -static bool GetVMMetricList(Isolate* isolate, JSONStream* js) {
|
| +static bool GetVMMetricList(Thread* thread, JSONStream* js) {
|
| return false;
|
| }
|
|
|
| @@ -2448,7 +2443,7 @@ static const MethodParameter* get_vm_metric_params[] = {
|
| };
|
|
|
|
|
| -static bool GetVMMetric(Isolate* isolate, JSONStream* js) {
|
| +static bool GetVMMetric(Thread* thread, JSONStream* js) {
|
| const char* metric_id = js->LookupParam("metricId");
|
| if (metric_id == NULL) {
|
| PrintMissingParamError(js, "metricId");
|
| @@ -2463,8 +2458,9 @@ static const MethodParameter* resume_params[] = {
|
| };
|
|
|
|
|
| -static bool Resume(Isolate* isolate, JSONStream* js) {
|
| +static bool Resume(Thread* thread, JSONStream* js) {
|
| const char* step_param = js->LookupParam("step");
|
| + Isolate* isolate = thread->isolate();
|
| if (isolate->message_handler()->paused_on_start()) {
|
| // If the user is issuing a 'Over' or an 'Out' step, that is the
|
| // same as a regular resume request.
|
| @@ -2515,11 +2511,12 @@ static const MethodParameter* pause_params[] = {
|
| };
|
|
|
|
|
| -static bool Pause(Isolate* isolate, JSONStream* js) {
|
| +static bool Pause(Thread* thread, JSONStream* js) {
|
| // TODO(turnidge): This interrupt message could have been sent from
|
| // the service isolate directly, but would require some special case
|
| // code. That would prevent this isolate getting double-interrupted
|
| // with OOB messages.
|
| + Isolate* isolate = thread->isolate();
|
| isolate->SendInternalLibMessage(Isolate::kInterruptMsg,
|
| isolate->pause_capability());
|
| PrintSuccess(js);
|
| @@ -2533,10 +2530,10 @@ static const MethodParameter* get_tag_profile_params[] = {
|
| };
|
|
|
|
|
| -static bool GetTagProfile(Isolate* isolate, JSONStream* js) {
|
| +static bool GetTagProfile(Thread* thread, JSONStream* js) {
|
| JSONObject miniProfile(js);
|
| miniProfile.AddProperty("type", "TagProfile");
|
| - isolate->vm_tag_counters()->PrintToJSONObject(&miniProfile);
|
| + thread->isolate()->vm_tag_counters()->PrintToJSONObject(&miniProfile);
|
| return true;
|
| }
|
|
|
| @@ -2570,7 +2567,7 @@ static const MethodParameter* get_cpu_profile_params[] = {
|
|
|
|
|
| // TODO(johnmccutchan): Rename this to GetCpuSamples.
|
| -static bool GetCpuProfile(Isolate* isolate, JSONStream* js) {
|
| +static bool GetCpuProfile(Thread* thread, JSONStream* js) {
|
| Profile::TagOrder tag_order =
|
| EnumMapper(js->LookupParam("tags"), tags_enum_names, tags_enum_values);
|
| intptr_t extra_tags = 0;
|
| @@ -2590,12 +2587,13 @@ static const MethodParameter* get_allocation_samples_params[] = {
|
| };
|
|
|
|
|
| -static bool GetAllocationSamples(Isolate* isolate, JSONStream* js) {
|
| +static bool GetAllocationSamples(Thread* thread, JSONStream* js) {
|
| Profile::TagOrder tag_order =
|
| EnumMapper(js->LookupParam("tags"), tags_enum_names, tags_enum_values);
|
| const char* class_id = js->LookupParam("classId");
|
| intptr_t cid = -1;
|
| GetPrefixedIntegerId(class_id, "classes/", &cid);
|
| + Isolate* isolate = thread->isolate();
|
| if (IsValidClassId(isolate, cid)) {
|
| const Class& cls = Class::Handle(GetClassForId(isolate, cid));
|
| ProfilerService::PrintAllocationJSON(js, tag_order, cls);
|
| @@ -2612,7 +2610,7 @@ static const MethodParameter* clear_cpu_profile_params[] = {
|
| };
|
|
|
|
|
| -static bool ClearCpuProfile(Isolate* isolate, JSONStream* js) {
|
| +static bool ClearCpuProfile(Thread* thread, JSONStream* js) {
|
| ProfilerService::ClearSamples();
|
| PrintSuccess(js);
|
| return true;
|
| @@ -2625,7 +2623,7 @@ static const MethodParameter* get_allocation_profile_params[] = {
|
| };
|
|
|
|
|
| -static bool GetAllocationProfile(Isolate* isolate, JSONStream* js) {
|
| +static bool GetAllocationProfile(Thread* thread, JSONStream* js) {
|
| bool should_reset_accumulator = false;
|
| bool should_collect = false;
|
| if (js->HasParam("reset")) {
|
| @@ -2644,6 +2642,7 @@ static bool GetAllocationProfile(Isolate* isolate, JSONStream* js) {
|
| return true;
|
| }
|
| }
|
| + Isolate* isolate = thread->isolate();
|
| if (should_reset_accumulator) {
|
| isolate->UpdateLastAllocationProfileAccumulatorResetTimestamp();
|
| isolate->class_table()->ResetAllocationAccumulators();
|
| @@ -2663,7 +2662,8 @@ static const MethodParameter* get_heap_map_params[] = {
|
| };
|
|
|
|
|
| -static bool GetHeapMap(Isolate* isolate, JSONStream* js) {
|
| +static bool GetHeapMap(Thread* thread, JSONStream* js) {
|
| + Isolate* isolate = thread->isolate();
|
| isolate->heap()->PrintHeapMapToJSONStream(isolate, js);
|
| return true;
|
| }
|
| @@ -2675,9 +2675,9 @@ static const MethodParameter* request_heap_snapshot_params[] = {
|
| };
|
|
|
|
|
| -static bool RequestHeapSnapshot(Isolate* isolate, JSONStream* js) {
|
| +static bool RequestHeapSnapshot(Thread* thread, JSONStream* js) {
|
| if (Service::graph_stream.enabled()) {
|
| - Service::SendGraphEvent(isolate);
|
| + Service::SendGraphEvent(thread);
|
| }
|
| // TODO(koda): Provide some id that ties this request to async response(s).
|
| JSONObject jsobj(js);
|
| @@ -2686,10 +2686,10 @@ static bool RequestHeapSnapshot(Isolate* isolate, JSONStream* js) {
|
| }
|
|
|
|
|
| -void Service::SendGraphEvent(Isolate* isolate) {
|
| +void Service::SendGraphEvent(Thread* thread) {
|
| uint8_t* buffer = NULL;
|
| WriteStream stream(&buffer, &allocator, 1 * MB);
|
| - ObjectGraph graph(Thread::Current());
|
| + ObjectGraph graph(thread);
|
| intptr_t node_count = graph.Serialize(&stream);
|
|
|
| // Chrome crashes receiving a single tens-of-megabytes blob, so send the
|
| @@ -2710,7 +2710,7 @@ void Service::SendGraphEvent(Isolate* isolate) {
|
| JSONObject event(¶ms, "event");
|
| event.AddProperty("type", "Event");
|
| event.AddProperty("kind", "_Graph");
|
| - event.AddProperty("isolate", isolate);
|
| + event.AddProperty("isolate", thread->isolate());
|
| event.AddPropertyTimeMillis("timestamp", OS::GetCurrentTimeMillis());
|
|
|
| event.AddProperty("chunkIndex", i);
|
| @@ -2811,11 +2811,12 @@ static const MethodParameter* get_object_by_address_params[] = {
|
| };
|
|
|
|
|
| -static RawObject* GetObjectHelper(Isolate* isolate, uword addr) {
|
| - Object& object = Object::Handle(isolate->current_zone());
|
| +static RawObject* GetObjectHelper(Thread* thread, uword addr) {
|
| + Object& object = Object::Handle(thread->zone());
|
|
|
| {
|
| NoSafepointScope no_safepoint;
|
| + Isolate* isolate = thread->isolate();
|
| ContainsAddressVisitor visitor(isolate, addr);
|
| object = isolate->heap()->FindObject(&visitor);
|
| }
|
| @@ -2834,7 +2835,7 @@ static RawObject* GetObjectHelper(Isolate* isolate, uword addr) {
|
| }
|
|
|
|
|
| -static bool GetObjectByAddress(Isolate* isolate, JSONStream* js) {
|
| +static bool GetObjectByAddress(Thread* thread, JSONStream* js) {
|
| const char* addr_str = js->LookupParam("address");
|
| if (addr_str == NULL) {
|
| PrintMissingParamError(js, "address");
|
| @@ -2848,8 +2849,8 @@ static bool GetObjectByAddress(Isolate* isolate, JSONStream* js) {
|
| return true;
|
| }
|
| bool ref = js->HasParam("ref") && js->ParamIs("ref", "true");
|
| - const Object& obj = Object::Handle(isolate->current_zone(),
|
| - GetObjectHelper(isolate, addr));
|
| + const Object& obj = Object::Handle(thread->zone(),
|
| + GetObjectHelper(thread, addr));
|
| if (obj.IsNull()) {
|
| PrintSentinel(js, kFreeSentinel);
|
| } else {
|
| @@ -2865,15 +2866,14 @@ static const MethodParameter* get_ports_params[] = {
|
| };
|
|
|
|
|
| -static bool GetPorts(Isolate* isolate, JSONStream* js) {
|
| - MessageHandler* message_handler = isolate->message_handler();
|
| +static bool GetPorts(Thread* thread, JSONStream* js) {
|
| + MessageHandler* message_handler = thread->isolate()->message_handler();
|
| PortMap::PrintPortsForMessageHandler(message_handler, js);
|
| return true;
|
| }
|
|
|
|
|
| -static bool RespondWithMalformedJson(Isolate* isolate,
|
| - JSONStream* js) {
|
| +static bool RespondWithMalformedJson(Thread* thread, JSONStream* js) {
|
| JSONObject jsobj(js);
|
| jsobj.AddProperty("a", "a");
|
| JSONObject jsobj1(js);
|
| @@ -2886,8 +2886,7 @@ static bool RespondWithMalformedJson(Isolate* isolate,
|
| }
|
|
|
|
|
| -static bool RespondWithMalformedObject(Isolate* isolate,
|
| - JSONStream* js) {
|
| +static bool RespondWithMalformedObject(Thread* thread, JSONStream* js) {
|
| JSONObject jsobj(js);
|
| jsobj.AddProperty("bart", "simpson");
|
| return true;
|
| @@ -2902,7 +2901,7 @@ static const MethodParameter* get_object_params[] = {
|
| };
|
|
|
|
|
| -static bool GetObject(Isolate* isolate, JSONStream* js) {
|
| +static bool GetObject(Thread* thread, JSONStream* js) {
|
| const char* id = js->LookupParam("objectId");
|
| if (id == NULL) {
|
| PrintMissingParamError(js, "objectId");
|
| @@ -2928,7 +2927,7 @@ static bool GetObject(Isolate* isolate, JSONStream* js) {
|
| // Handle heap objects.
|
| ObjectIdRing::LookupResult lookup_result;
|
| const Object& obj =
|
| - Object::Handle(LookupHeapObject(isolate, id, &lookup_result));
|
| + Object::Handle(LookupHeapObject(thread, id, &lookup_result));
|
| if (obj.raw() != Object::sentinel().raw()) {
|
| // We found a heap object for this id. Return it.
|
| obj.PrintJSON(js, false);
|
| @@ -2942,7 +2941,7 @@ static bool GetObject(Isolate* isolate, JSONStream* js) {
|
| }
|
|
|
| // Handle non-heap objects.
|
| - Breakpoint* bpt = LookupBreakpoint(isolate, id, &lookup_result);
|
| + Breakpoint* bpt = LookupBreakpoint(thread->isolate(), id, &lookup_result);
|
| if (bpt != NULL) {
|
| bpt->PrintJSON(js);
|
| return true;
|
| @@ -2962,8 +2961,8 @@ static const MethodParameter* get_class_list_params[] = {
|
| };
|
|
|
|
|
| -static bool GetClassList(Isolate* isolate, JSONStream* js) {
|
| - ClassTable* table = isolate->class_table();
|
| +static bool GetClassList(Thread* thread, JSONStream* js) {
|
| + ClassTable* table = thread->isolate()->class_table();
|
| JSONObject jsobj(js);
|
| table->PrintToJSONObject(&jsobj);
|
| return true;
|
| @@ -2976,12 +2975,12 @@ static const MethodParameter* get_type_arguments_list_params[] = {
|
| };
|
|
|
|
|
| -static bool GetTypeArgumentsList(Isolate* isolate, JSONStream* js) {
|
| +static bool GetTypeArgumentsList(Thread* thread, JSONStream* js) {
|
| bool only_with_instantiations = false;
|
| if (js->ParamIs("onlyWithInstantiations", "true")) {
|
| only_with_instantiations = true;
|
| }
|
| - ObjectStore* object_store = isolate->object_store();
|
| + ObjectStore* object_store = thread->isolate()->object_store();
|
| const Array& table = Array::Handle(object_store->canonical_type_arguments());
|
| ASSERT(table.Length() > 0);
|
| TypeArguments& type_args = TypeArguments::Handle();
|
| @@ -3010,7 +3009,7 @@ static const MethodParameter* get_version_params[] = {
|
| };
|
|
|
|
|
| -static bool GetVersion(Isolate* isolate, JSONStream* js) {
|
| +static bool GetVersion(Thread* thread, JSONStream* js) {
|
| JSONObject jsobj(js);
|
| jsobj.AddProperty("type", "Version");
|
| jsobj.AddProperty("major", static_cast<intptr_t>(3));
|
| @@ -3072,7 +3071,7 @@ void Service::PrintJSONForVM(JSONStream* js, bool ref) {
|
| }
|
|
|
|
|
| -static bool GetVM(Isolate* isolate, JSONStream* js) {
|
| +static bool GetVM(Thread* thread, JSONStream* js) {
|
| Service::PrintJSONForVM(js, false);
|
| return true;
|
| }
|
| @@ -3084,7 +3083,7 @@ static const MethodParameter* restart_vm_params[] = {
|
| };
|
|
|
|
|
| -static bool RestartVM(Isolate* isolate, JSONStream* js) {
|
| +static bool RestartVM(Thread* thread, JSONStream* js) {
|
| Isolate::KillAllIsolates(Isolate::kVMRestartMsg);
|
| PrintSuccess(js);
|
| return true;
|
| @@ -3114,7 +3113,7 @@ static const MethodParameter* set_exception_pause_mode_params[] = {
|
| };
|
|
|
|
|
| -static bool SetExceptionPauseMode(Isolate* isolate, JSONStream* js) {
|
| +static bool SetExceptionPauseMode(Thread* thread, JSONStream* js) {
|
| const char* mode = js->LookupParam("mode");
|
| if (mode == NULL) {
|
| PrintMissingParamError(js, "mode");
|
| @@ -3126,6 +3125,7 @@ static bool SetExceptionPauseMode(Isolate* isolate, JSONStream* js) {
|
| PrintInvalidParamError(js, "mode");
|
| return true;
|
| }
|
| + Isolate* isolate = thread->isolate();
|
| isolate->debugger()->SetExceptionPauseInfo(info);
|
| if (Service::debug_stream.enabled()) {
|
| ServiceEvent event(isolate, ServiceEvent::kDebuggerSettingsUpdate);
|
| @@ -3142,7 +3142,7 @@ static const MethodParameter* get_flag_list_params[] = {
|
| };
|
|
|
|
|
| -static bool GetFlagList(Isolate* isolate, JSONStream* js) {
|
| +static bool GetFlagList(Thread* thread, JSONStream* js) {
|
| Flags::PrintJSON(js);
|
| return true;
|
| }
|
| @@ -3154,7 +3154,7 @@ static const MethodParameter* set_flags_params[] = {
|
| };
|
|
|
|
|
| -static bool SetFlag(Isolate* isolate, JSONStream* js) {
|
| +static bool SetFlag(Thread* thread, JSONStream* js) {
|
| const char* flag_name = js->LookupParam("name");
|
| if (flag_name == NULL) {
|
| PrintMissingParamError(js, "name");
|
| @@ -3186,10 +3186,10 @@ static const MethodParameter* set_library_debuggable_params[] = {
|
| };
|
|
|
|
|
| -static bool SetLibraryDebuggable(Isolate* isolate, JSONStream* js) {
|
| +static bool SetLibraryDebuggable(Thread* thread, JSONStream* js) {
|
| const char* lib_id = js->LookupParam("libraryId");
|
| ObjectIdRing::LookupResult lookup_result;
|
| - Object& obj = Object::Handle(LookupHeapObject(isolate, lib_id,
|
| + Object& obj = Object::Handle(LookupHeapObject(thread, lib_id,
|
| &lookup_result));
|
| const bool is_debuggable =
|
| BoolParameter::Parse(js->LookupParam("isDebuggable"), false);
|
| @@ -3211,7 +3211,8 @@ static const MethodParameter* set_name_params[] = {
|
| };
|
|
|
|
|
| -static bool SetName(Isolate* isolate, JSONStream* js) {
|
| +static bool SetName(Thread* thread, JSONStream* js) {
|
| + Isolate* isolate = thread->isolate();
|
| isolate->set_debugger_name(js->LookupParam("name"));
|
| if (Service::isolate_stream.enabled()) {
|
| ServiceEvent event(isolate, ServiceEvent::kIsolateUpdate);
|
| @@ -3228,7 +3229,7 @@ static const MethodParameter* set_vm_name_params[] = {
|
| };
|
|
|
|
|
| -static bool SetVMName(Isolate* isolate, JSONStream* js) {
|
| +static bool SetVMName(Thread* thread, JSONStream* js) {
|
| const char* name_param = js->LookupParam("name");
|
| free(vm_name);
|
| vm_name = strdup(name_param);
|
| @@ -3249,11 +3250,12 @@ static const MethodParameter* set_trace_class_allocation_params[] = {
|
| };
|
|
|
|
|
| -static bool SetTraceClassAllocation(Isolate* isolate, JSONStream* js) {
|
| +static bool SetTraceClassAllocation(Thread* thread, JSONStream* js) {
|
| const char* class_id = js->LookupParam("classId");
|
| const bool enable = BoolParameter::Parse(js->LookupParam("enable"));
|
| intptr_t cid = -1;
|
| GetPrefixedIntegerId(class_id, "classes/", &cid);
|
| + Isolate* isolate = thread->isolate();
|
| if (!IsValidClassId(isolate, cid)) {
|
| PrintInvalidParamError(js, "classId");
|
| return true;
|
|
|