| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/service.h" | 5 #include "vm/service.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "include/dart_native_api.h" | 8 #include "include/dart_native_api.h" |
| 9 #include "platform/globals.h" | 9 #include "platform/globals.h" |
| 10 | 10 |
| (...skipping 1095 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1106 ObjectIdRing::LookupResult* kind) { | 1106 ObjectIdRing::LookupResult* kind) { |
| 1107 *kind = ObjectIdRing::kValid; | 1107 *kind = ObjectIdRing::kValid; |
| 1108 if (strncmp(arg, "int-", 4) == 0) { | 1108 if (strncmp(arg, "int-", 4) == 0) { |
| 1109 arg += 4; | 1109 arg += 4; |
| 1110 int64_t value = 0; | 1110 int64_t value = 0; |
| 1111 if (!OS::StringToInt64(arg, &value) || | 1111 if (!OS::StringToInt64(arg, &value) || |
| 1112 !Smi::IsValid(value)) { | 1112 !Smi::IsValid(value)) { |
| 1113 *kind = ObjectIdRing::kInvalid; | 1113 *kind = ObjectIdRing::kInvalid; |
| 1114 return Object::null(); | 1114 return Object::null(); |
| 1115 } | 1115 } |
| 1116 const Integer& obj = | 1116 const Integer& obj = Integer::Handle(isolate->current_zone(), |
| 1117 Integer::Handle(isolate, Smi::New(static_cast<intptr_t>(value))); | 1117 Smi::New(static_cast<intptr_t>(value))); |
| 1118 return obj.raw(); | 1118 return obj.raw(); |
| 1119 } else if (strcmp(arg, "bool-true") == 0) { | 1119 } else if (strcmp(arg, "bool-true") == 0) { |
| 1120 return Bool::True().raw(); | 1120 return Bool::True().raw(); |
| 1121 } else if (strcmp(arg, "bool-false") == 0) { | 1121 } else if (strcmp(arg, "bool-false") == 0) { |
| 1122 return Bool::False().raw(); | 1122 return Bool::False().raw(); |
| 1123 } else if (strcmp(arg, "null") == 0) { | 1123 } else if (strcmp(arg, "null") == 0) { |
| 1124 return Object::null(); | 1124 return Object::null(); |
| 1125 } | 1125 } |
| 1126 | 1126 |
| 1127 ObjectIdRing* ring = isolate->object_id_ring(); | 1127 ObjectIdRing* ring = isolate->object_id_ring(); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1231 return Object::sentinel().raw(); | 1231 return Object::sentinel().raw(); |
| 1232 } | 1232 } |
| 1233 return field.raw(); | 1233 return field.raw(); |
| 1234 | 1234 |
| 1235 } else if (strcmp(parts[2], "functions") == 0) { | 1235 } else if (strcmp(parts[2], "functions") == 0) { |
| 1236 // Function ids look like: "classes/17/functions/11" | 1236 // Function ids look like: "classes/17/functions/11" |
| 1237 if (num_parts != 4) { | 1237 if (num_parts != 4) { |
| 1238 return Object::sentinel().raw(); | 1238 return Object::sentinel().raw(); |
| 1239 } | 1239 } |
| 1240 const char* encoded_id = parts[3]; | 1240 const char* encoded_id = parts[3]; |
| 1241 String& id = String::Handle(isolate, String::New(encoded_id)); | 1241 String& id = String::Handle(isolate->current_zone(), |
| 1242 String::New(encoded_id)); |
| 1242 id = String::DecodeIRI(id); | 1243 id = String::DecodeIRI(id); |
| 1243 if (id.IsNull()) { | 1244 if (id.IsNull()) { |
| 1244 return Object::sentinel().raw(); | 1245 return Object::sentinel().raw(); |
| 1245 } | 1246 } |
| 1246 Function& func = Function::Handle(cls.LookupFunction(id)); | 1247 Function& func = Function::Handle(cls.LookupFunction(id)); |
| 1247 if (func.IsNull()) { | 1248 if (func.IsNull()) { |
| 1248 return Object::sentinel().raw(); | 1249 return Object::sentinel().raw(); |
| 1249 } | 1250 } |
| 1250 return func.raw(); | 1251 return func.raw(); |
| 1251 | 1252 |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1421 if (num_parts < MAX_PARTS) { | 1422 if (num_parts < MAX_PARTS) { |
| 1422 parts[num_parts++] = &id[start_pos]; | 1423 parts[num_parts++] = &id[start_pos]; |
| 1423 } | 1424 } |
| 1424 | 1425 |
| 1425 if (result != NULL) { | 1426 if (result != NULL) { |
| 1426 *result = ObjectIdRing::kValid; | 1427 *result = ObjectIdRing::kValid; |
| 1427 } | 1428 } |
| 1428 | 1429 |
| 1429 if (strcmp(parts[0], "objects") == 0) { | 1430 if (strcmp(parts[0], "objects") == 0) { |
| 1430 // Object ids look like "objects/1123" | 1431 // Object ids look like "objects/1123" |
| 1431 Object& obj = Object::Handle(isolate); | 1432 Object& obj = Object::Handle(isolate->current_zone()); |
| 1432 ObjectIdRing::LookupResult lookup_result; | 1433 ObjectIdRing::LookupResult lookup_result; |
| 1433 obj = LookupObjectId(isolate, parts[1], &lookup_result); | 1434 obj = LookupObjectId(isolate, parts[1], &lookup_result); |
| 1434 if (lookup_result != ObjectIdRing::kValid) { | 1435 if (lookup_result != ObjectIdRing::kValid) { |
| 1435 if (result != NULL) { | 1436 if (result != NULL) { |
| 1436 *result = lookup_result; | 1437 *result = lookup_result; |
| 1437 } | 1438 } |
| 1438 return Object::sentinel().raw(); | 1439 return Object::sentinel().raw(); |
| 1439 } | 1440 } |
| 1440 return obj.raw(); | 1441 return obj.raw(); |
| 1441 | 1442 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1583 if (limit_cstr == NULL) { | 1584 if (limit_cstr == NULL) { |
| 1584 PrintMissingParamError(js, "limit"); | 1585 PrintMissingParamError(js, "limit"); |
| 1585 return true; | 1586 return true; |
| 1586 } | 1587 } |
| 1587 intptr_t limit; | 1588 intptr_t limit; |
| 1588 if (!GetIntegerId(limit_cstr, &limit)) { | 1589 if (!GetIntegerId(limit_cstr, &limit)) { |
| 1589 PrintInvalidParamError(js, "limit"); | 1590 PrintInvalidParamError(js, "limit"); |
| 1590 return true; | 1591 return true; |
| 1591 } | 1592 } |
| 1592 | 1593 |
| 1593 Object& obj = Object::Handle(isolate); | 1594 Object& obj = Object::Handle(thread->zone()); |
| 1594 ObjectIdRing::LookupResult lookup_result; | 1595 ObjectIdRing::LookupResult lookup_result; |
| 1595 { | 1596 { |
| 1596 HANDLESCOPE(thread); | 1597 HANDLESCOPE(thread); |
| 1597 obj = LookupHeapObject(isolate, target_id, &lookup_result); | 1598 obj = LookupHeapObject(isolate, target_id, &lookup_result); |
| 1598 } | 1599 } |
| 1599 if (obj.raw() == Object::sentinel().raw()) { | 1600 if (obj.raw() == Object::sentinel().raw()) { |
| 1600 if (lookup_result == ObjectIdRing::kCollected) { | 1601 if (lookup_result == ObjectIdRing::kCollected) { |
| 1601 PrintSentinel(js, kCollectedSentinel); | 1602 PrintSentinel(js, kCollectedSentinel); |
| 1602 } else if (lookup_result == ObjectIdRing::kExpired) { | 1603 } else if (lookup_result == ObjectIdRing::kExpired) { |
| 1603 PrintSentinel(js, kExpiredSentinel); | 1604 PrintSentinel(js, kExpiredSentinel); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1685 if (limit_cstr == NULL) { | 1686 if (limit_cstr == NULL) { |
| 1686 PrintMissingParamError(js, "limit"); | 1687 PrintMissingParamError(js, "limit"); |
| 1687 return true; | 1688 return true; |
| 1688 } | 1689 } |
| 1689 intptr_t limit; | 1690 intptr_t limit; |
| 1690 if (!GetIntegerId(limit_cstr, &limit)) { | 1691 if (!GetIntegerId(limit_cstr, &limit)) { |
| 1691 PrintInvalidParamError(js, "limit"); | 1692 PrintInvalidParamError(js, "limit"); |
| 1692 return true; | 1693 return true; |
| 1693 } | 1694 } |
| 1694 | 1695 |
| 1695 Object& obj = Object::Handle(isolate); | 1696 Object& obj = Object::Handle(thread->zone()); |
| 1696 ObjectIdRing::LookupResult lookup_result; | 1697 ObjectIdRing::LookupResult lookup_result; |
| 1697 { | 1698 { |
| 1698 HANDLESCOPE(thread); | 1699 HANDLESCOPE(thread); |
| 1699 obj = LookupHeapObject(isolate, target_id, &lookup_result); | 1700 obj = LookupHeapObject(isolate, target_id, &lookup_result); |
| 1700 } | 1701 } |
| 1701 if (obj.raw() == Object::sentinel().raw()) { | 1702 if (obj.raw() == Object::sentinel().raw()) { |
| 1702 if (lookup_result == ObjectIdRing::kCollected) { | 1703 if (lookup_result == ObjectIdRing::kCollected) { |
| 1703 PrintSentinel(js, kCollectedSentinel); | 1704 PrintSentinel(js, kCollectedSentinel); |
| 1704 } else if (lookup_result == ObjectIdRing::kExpired) { | 1705 } else if (lookup_result == ObjectIdRing::kExpired) { |
| 1705 PrintSentinel(js, kExpiredSentinel); | 1706 PrintSentinel(js, kExpiredSentinel); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1766 const char* target_id = js->LookupParam("targetId"); | 1767 const char* target_id = js->LookupParam("targetId"); |
| 1767 if (target_id == NULL) { | 1768 if (target_id == NULL) { |
| 1768 PrintMissingParamError(js, "targetId"); | 1769 PrintMissingParamError(js, "targetId"); |
| 1769 return true; | 1770 return true; |
| 1770 } | 1771 } |
| 1771 const char* expr = js->LookupParam("expression"); | 1772 const char* expr = js->LookupParam("expression"); |
| 1772 if (expr == NULL) { | 1773 if (expr == NULL) { |
| 1773 PrintMissingParamError(js, "expression"); | 1774 PrintMissingParamError(js, "expression"); |
| 1774 return true; | 1775 return true; |
| 1775 } | 1776 } |
| 1776 const String& expr_str = String::Handle(isolate, String::New(expr)); | 1777 const String& expr_str = |
| 1778 String::Handle(isolate->current_zone(), String::New(expr)); |
| 1777 ObjectIdRing::LookupResult lookup_result; | 1779 ObjectIdRing::LookupResult lookup_result; |
| 1778 Object& obj = Object::Handle(LookupHeapObject(isolate, target_id, | 1780 Object& obj = Object::Handle(LookupHeapObject(isolate, target_id, |
| 1779 &lookup_result)); | 1781 &lookup_result)); |
| 1780 if (obj.raw() == Object::sentinel().raw()) { | 1782 if (obj.raw() == Object::sentinel().raw()) { |
| 1781 if (lookup_result == ObjectIdRing::kCollected) { | 1783 if (lookup_result == ObjectIdRing::kCollected) { |
| 1782 PrintSentinel(js, kCollectedSentinel); | 1784 PrintSentinel(js, kCollectedSentinel); |
| 1783 } else if (lookup_result == ObjectIdRing::kExpired) { | 1785 } else if (lookup_result == ObjectIdRing::kExpired) { |
| 1784 PrintSentinel(js, kExpiredSentinel); | 1786 PrintSentinel(js, kExpiredSentinel); |
| 1785 } else { | 1787 } else { |
| 1786 PrintInvalidParamError(js, "targetId"); | 1788 PrintInvalidParamError(js, "targetId"); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1799 const Class& cls = Class::Cast(obj); | 1801 const Class& cls = Class::Cast(obj); |
| 1800 const Object& result = Object::Handle(cls.Evaluate(expr_str, | 1802 const Object& result = Object::Handle(cls.Evaluate(expr_str, |
| 1801 Array::empty_array(), | 1803 Array::empty_array(), |
| 1802 Array::empty_array())); | 1804 Array::empty_array())); |
| 1803 result.PrintJSON(js, true); | 1805 result.PrintJSON(js, true); |
| 1804 return true; | 1806 return true; |
| 1805 } | 1807 } |
| 1806 if ((obj.IsInstance() || obj.IsNull()) && | 1808 if ((obj.IsInstance() || obj.IsNull()) && |
| 1807 !ContainsNonInstance(obj)) { | 1809 !ContainsNonInstance(obj)) { |
| 1808 // We don't use Instance::Cast here because it doesn't allow null. | 1810 // We don't use Instance::Cast here because it doesn't allow null. |
| 1809 Instance& instance = Instance::Handle(isolate); | 1811 Instance& instance = Instance::Handle(isolate->current_zone()); |
| 1810 instance ^= obj.raw(); | 1812 instance ^= obj.raw(); |
| 1811 const Object& result = | 1813 const Object& result = |
| 1812 Object::Handle(instance.Evaluate(expr_str, | 1814 Object::Handle(instance.Evaluate(expr_str, |
| 1813 Array::empty_array(), | 1815 Array::empty_array(), |
| 1814 Array::empty_array())); | 1816 Array::empty_array())); |
| 1815 result.PrintJSON(js, true); | 1817 result.PrintJSON(js, true); |
| 1816 return true; | 1818 return true; |
| 1817 } | 1819 } |
| 1818 js->PrintError(kInvalidParams, | 1820 js->PrintError(kInvalidParams, |
| 1819 "%s: invalid 'targetId' parameter: " | 1821 "%s: invalid 'targetId' parameter: " |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1834 static bool EvaluateInFrame(Isolate* isolate, JSONStream* js) { | 1836 static bool EvaluateInFrame(Isolate* isolate, JSONStream* js) { |
| 1835 DebuggerStackTrace* stack = isolate->debugger()->StackTrace(); | 1837 DebuggerStackTrace* stack = isolate->debugger()->StackTrace(); |
| 1836 intptr_t framePos = UIntParameter::Parse(js->LookupParam("frameIndex")); | 1838 intptr_t framePos = UIntParameter::Parse(js->LookupParam("frameIndex")); |
| 1837 if (framePos > stack->Length()) { | 1839 if (framePos > stack->Length()) { |
| 1838 PrintInvalidParamError(js, "frameIndex"); | 1840 PrintInvalidParamError(js, "frameIndex"); |
| 1839 return true; | 1841 return true; |
| 1840 } | 1842 } |
| 1841 ActivationFrame* frame = stack->FrameAt(framePos); | 1843 ActivationFrame* frame = stack->FrameAt(framePos); |
| 1842 | 1844 |
| 1843 const char* expr = js->LookupParam("expression"); | 1845 const char* expr = js->LookupParam("expression"); |
| 1844 const String& expr_str = String::Handle(isolate, String::New(expr)); | 1846 const String& expr_str = String::Handle(isolate->current_zone(), |
| 1847 String::New(expr)); |
| 1845 | 1848 |
| 1846 const Object& result = Object::Handle(frame->Evaluate(expr_str)); | 1849 const Object& result = Object::Handle(frame->Evaluate(expr_str)); |
| 1847 result.PrintJSON(js, true); | 1850 result.PrintJSON(js, true); |
| 1848 return true; | 1851 return true; |
| 1849 } | 1852 } |
| 1850 | 1853 |
| 1851 | 1854 |
| 1852 class GetInstancesVisitor : public ObjectGraph::Visitor { | 1855 class GetInstancesVisitor : public ObjectGraph::Visitor { |
| 1853 public: | 1856 public: |
| 1854 GetInstancesVisitor(const Class& cls, const Array& storage) | 1857 GetInstancesVisitor(const Class& cls, const Array& storage) |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1988 const Class& cls, | 1991 const Class& cls, |
| 1989 const Function& func) const { | 1992 const Function& func) const { |
| 1990 return func.raw() == func_.raw(); | 1993 return func.raw() == func_.raw(); |
| 1991 } | 1994 } |
| 1992 private: | 1995 private: |
| 1993 const Function& func_; | 1996 const Function& func_; |
| 1994 }; | 1997 }; |
| 1995 | 1998 |
| 1996 | 1999 |
| 1997 static bool GetHitsOrSites(Isolate* isolate, JSONStream* js, bool as_sites) { | 2000 static bool GetHitsOrSites(Isolate* isolate, JSONStream* js, bool as_sites) { |
| 2001 Thread* thread = Thread::Current(); |
| 1998 if (!js->HasParam("targetId")) { | 2002 if (!js->HasParam("targetId")) { |
| 1999 CodeCoverage::PrintJSON(isolate, js, NULL, as_sites); | 2003 CodeCoverage::PrintJSON(thread, js, NULL, as_sites); |
| 2000 return true; | 2004 return true; |
| 2001 } | 2005 } |
| 2002 const char* target_id = js->LookupParam("targetId"); | 2006 const char* target_id = js->LookupParam("targetId"); |
| 2003 Object& obj = Object::Handle(LookupHeapObject(isolate, target_id, NULL)); | 2007 Object& obj = Object::Handle(LookupHeapObject(isolate, target_id, NULL)); |
| 2004 if (obj.raw() == Object::sentinel().raw()) { | 2008 if (obj.raw() == Object::sentinel().raw()) { |
| 2005 PrintInvalidParamError(js, "targetId"); | 2009 PrintInvalidParamError(js, "targetId"); |
| 2006 return true; | 2010 return true; |
| 2007 } | 2011 } |
| 2008 if (obj.IsScript()) { | 2012 if (obj.IsScript()) { |
| 2009 ScriptCoverageFilter sf(Script::Cast(obj)); | 2013 ScriptCoverageFilter sf(Script::Cast(obj)); |
| 2010 CodeCoverage::PrintJSON(isolate, js, &sf, as_sites); | 2014 CodeCoverage::PrintJSON(thread, js, &sf, as_sites); |
| 2011 return true; | 2015 return true; |
| 2012 } | 2016 } |
| 2013 if (obj.IsLibrary()) { | 2017 if (obj.IsLibrary()) { |
| 2014 LibraryCoverageFilter lf(Library::Cast(obj)); | 2018 LibraryCoverageFilter lf(Library::Cast(obj)); |
| 2015 CodeCoverage::PrintJSON(isolate, js, &lf, as_sites); | 2019 CodeCoverage::PrintJSON(thread, js, &lf, as_sites); |
| 2016 return true; | 2020 return true; |
| 2017 } | 2021 } |
| 2018 if (obj.IsClass()) { | 2022 if (obj.IsClass()) { |
| 2019 ClassCoverageFilter cf(Class::Cast(obj)); | 2023 ClassCoverageFilter cf(Class::Cast(obj)); |
| 2020 CodeCoverage::PrintJSON(isolate, js, &cf, as_sites); | 2024 CodeCoverage::PrintJSON(thread, js, &cf, as_sites); |
| 2021 return true; | 2025 return true; |
| 2022 } | 2026 } |
| 2023 if (obj.IsFunction()) { | 2027 if (obj.IsFunction()) { |
| 2024 FunctionCoverageFilter ff(Function::Cast(obj)); | 2028 FunctionCoverageFilter ff(Function::Cast(obj)); |
| 2025 CodeCoverage::PrintJSON(isolate, js, &ff, as_sites); | 2029 CodeCoverage::PrintJSON(thread, js, &ff, as_sites); |
| 2026 return true; | 2030 return true; |
| 2027 } | 2031 } |
| 2028 js->PrintError(kInvalidParams, | 2032 js->PrintError(kInvalidParams, |
| 2029 "%s: invalid 'targetId' parameter: " | 2033 "%s: invalid 'targetId' parameter: " |
| 2030 "id '%s' does not correspond to a " | 2034 "id '%s' does not correspond to a " |
| 2031 "script, library, class, or function", | 2035 "script, library, class, or function", |
| 2032 js->method(), target_id); | 2036 js->method(), target_id); |
| 2033 return true; | 2037 return true; |
| 2034 } | 2038 } |
| 2035 | 2039 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2204 PrintInvalidParamError(js, "breakpointId"); | 2208 PrintInvalidParamError(js, "breakpointId"); |
| 2205 return true; | 2209 return true; |
| 2206 } | 2210 } |
| 2207 isolate->debugger()->RemoveBreakpoint(bpt->id()); | 2211 isolate->debugger()->RemoveBreakpoint(bpt->id()); |
| 2208 PrintSuccess(js); | 2212 PrintSuccess(js); |
| 2209 return true; | 2213 return true; |
| 2210 } | 2214 } |
| 2211 | 2215 |
| 2212 | 2216 |
| 2213 static RawClass* GetMetricsClass(Isolate* isolate) { | 2217 static RawClass* GetMetricsClass(Isolate* isolate) { |
| 2218 Zone* zone = isolate->current_zone(); |
| 2214 const Library& prof_lib = | 2219 const Library& prof_lib = |
| 2215 Library::Handle(isolate, Library::DeveloperLibrary()); | 2220 Library::Handle(zone, Library::DeveloperLibrary()); |
| 2216 ASSERT(!prof_lib.IsNull()); | 2221 ASSERT(!prof_lib.IsNull()); |
| 2217 const String& metrics_cls_name = | 2222 const String& metrics_cls_name = |
| 2218 String::Handle(isolate, String::New("Metrics")); | 2223 String::Handle(zone, String::New("Metrics")); |
| 2219 ASSERT(!metrics_cls_name.IsNull()); | 2224 ASSERT(!metrics_cls_name.IsNull()); |
| 2220 const Class& metrics_cls = | 2225 const Class& metrics_cls = |
| 2221 Class::Handle(isolate, prof_lib.LookupClass(metrics_cls_name)); | 2226 Class::Handle(zone, prof_lib.LookupClass(metrics_cls_name)); |
| 2222 ASSERT(!metrics_cls.IsNull()); | 2227 ASSERT(!metrics_cls.IsNull()); |
| 2223 return metrics_cls.raw(); | 2228 return metrics_cls.raw(); |
| 2224 } | 2229 } |
| 2225 | 2230 |
| 2226 | 2231 |
| 2227 | 2232 |
| 2228 static bool HandleNativeMetricsList(Isolate* isolate, JSONStream* js) { | 2233 static bool HandleNativeMetricsList(Isolate* isolate, JSONStream* js) { |
| 2229 JSONObject obj(js); | 2234 JSONObject obj(js); |
| 2230 obj.AddProperty("type", "MetricList"); | 2235 obj.AddProperty("type", "MetricList"); |
| 2231 { | 2236 { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2252 return true; | 2257 return true; |
| 2253 } | 2258 } |
| 2254 current = current->next(); | 2259 current = current->next(); |
| 2255 } | 2260 } |
| 2256 PrintInvalidParamError(js, "metricId"); | 2261 PrintInvalidParamError(js, "metricId"); |
| 2257 return true; | 2262 return true; |
| 2258 } | 2263 } |
| 2259 | 2264 |
| 2260 | 2265 |
| 2261 static bool HandleDartMetricsList(Isolate* isolate, JSONStream* js) { | 2266 static bool HandleDartMetricsList(Isolate* isolate, JSONStream* js) { |
| 2262 const Class& metrics_cls = Class::Handle(isolate, GetMetricsClass(isolate)); | 2267 Zone* zone = isolate->current_zone(); |
| 2268 const Class& metrics_cls = Class::Handle(zone, GetMetricsClass(isolate)); |
| 2263 const String& print_metrics_name = | 2269 const String& print_metrics_name = |
| 2264 String::Handle(String::New("_printMetrics")); | 2270 String::Handle(String::New("_printMetrics")); |
| 2265 ASSERT(!print_metrics_name.IsNull()); | 2271 ASSERT(!print_metrics_name.IsNull()); |
| 2266 const Function& print_metrics = Function::Handle( | 2272 const Function& print_metrics = Function::Handle( |
| 2267 isolate, | 2273 zone, |
| 2268 metrics_cls.LookupStaticFunctionAllowPrivate(print_metrics_name)); | 2274 metrics_cls.LookupStaticFunctionAllowPrivate(print_metrics_name)); |
| 2269 ASSERT(!print_metrics.IsNull()); | 2275 ASSERT(!print_metrics.IsNull()); |
| 2270 const Array& args = Object::empty_array(); | 2276 const Array& args = Object::empty_array(); |
| 2271 const Object& result = | 2277 const Object& result = |
| 2272 Object::Handle(isolate, DartEntry::InvokeFunction(print_metrics, args)); | 2278 Object::Handle(zone, DartEntry::InvokeFunction(print_metrics, args)); |
| 2273 ASSERT(!result.IsNull()); | 2279 ASSERT(!result.IsNull()); |
| 2274 ASSERT(result.IsString()); | 2280 ASSERT(result.IsString()); |
| 2275 TextBuffer* buffer = js->buffer(); | 2281 TextBuffer* buffer = js->buffer(); |
| 2276 buffer->AddString(String::Cast(result).ToCString()); | 2282 buffer->AddString(String::Cast(result).ToCString()); |
| 2277 return true; | 2283 return true; |
| 2278 } | 2284 } |
| 2279 | 2285 |
| 2280 | 2286 |
| 2281 static bool HandleDartMetric(Isolate* isolate, JSONStream* js, const char* id) { | 2287 static bool HandleDartMetric(Isolate* isolate, JSONStream* js, const char* id) { |
| 2282 const Class& metrics_cls = Class::Handle(isolate, GetMetricsClass(isolate)); | 2288 Zone* zone = isolate->current_zone(); |
| 2289 const Class& metrics_cls = Class::Handle(zone, GetMetricsClass(isolate)); |
| 2283 const String& print_metric_name = | 2290 const String& print_metric_name = |
| 2284 String::Handle(String::New("_printMetric")); | 2291 String::Handle(String::New("_printMetric")); |
| 2285 ASSERT(!print_metric_name.IsNull()); | 2292 ASSERT(!print_metric_name.IsNull()); |
| 2286 const Function& print_metric = Function::Handle( | 2293 const Function& print_metric = Function::Handle( |
| 2287 isolate, | 2294 zone, |
| 2288 metrics_cls.LookupStaticFunctionAllowPrivate(print_metric_name)); | 2295 metrics_cls.LookupStaticFunctionAllowPrivate(print_metric_name)); |
| 2289 ASSERT(!print_metric.IsNull()); | 2296 ASSERT(!print_metric.IsNull()); |
| 2290 const String& arg0 = String::Handle(String::New(id)); | 2297 const String& arg0 = String::Handle(String::New(id)); |
| 2291 ASSERT(!arg0.IsNull()); | 2298 ASSERT(!arg0.IsNull()); |
| 2292 const Array& args = Array::Handle(Array::New(1)); | 2299 const Array& args = Array::Handle(Array::New(1)); |
| 2293 ASSERT(!args.IsNull()); | 2300 ASSERT(!args.IsNull()); |
| 2294 args.SetAt(0, arg0); | 2301 args.SetAt(0, arg0); |
| 2295 const Object& result = | 2302 const Object& result = |
| 2296 Object::Handle(isolate, DartEntry::InvokeFunction(print_metric, args)); | 2303 Object::Handle(zone, DartEntry::InvokeFunction(print_metric, args)); |
| 2297 if (!result.IsNull()) { | 2304 if (!result.IsNull()) { |
| 2298 ASSERT(result.IsString()); | 2305 ASSERT(result.IsString()); |
| 2299 TextBuffer* buffer = js->buffer(); | 2306 TextBuffer* buffer = js->buffer(); |
| 2300 buffer->AddString(String::Cast(result).ToCString()); | 2307 buffer->AddString(String::Cast(result).ToCString()); |
| 2301 return true; | 2308 return true; |
| 2302 } | 2309 } |
| 2303 PrintInvalidParamError(js, "metricId"); | 2310 PrintInvalidParamError(js, "metricId"); |
| 2304 return true; | 2311 return true; |
| 2305 } | 2312 } |
| 2306 | 2313 |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2740 }; | 2747 }; |
| 2741 | 2748 |
| 2742 | 2749 |
| 2743 static const MethodParameter* get_object_by_address_params[] = { | 2750 static const MethodParameter* get_object_by_address_params[] = { |
| 2744 ISOLATE_PARAMETER, | 2751 ISOLATE_PARAMETER, |
| 2745 NULL, | 2752 NULL, |
| 2746 }; | 2753 }; |
| 2747 | 2754 |
| 2748 | 2755 |
| 2749 static RawObject* GetObjectHelper(Isolate* isolate, uword addr) { | 2756 static RawObject* GetObjectHelper(Isolate* isolate, uword addr) { |
| 2750 Object& object = Object::Handle(isolate); | 2757 Object& object = Object::Handle(isolate->current_zone()); |
| 2751 | 2758 |
| 2752 { | 2759 { |
| 2753 NoSafepointScope no_safepoint; | 2760 NoSafepointScope no_safepoint; |
| 2754 ContainsAddressVisitor visitor(isolate, addr); | 2761 ContainsAddressVisitor visitor(isolate, addr); |
| 2755 object = isolate->heap()->FindObject(&visitor); | 2762 object = isolate->heap()->FindObject(&visitor); |
| 2756 } | 2763 } |
| 2757 | 2764 |
| 2758 if (!object.IsNull()) { | 2765 if (!object.IsNull()) { |
| 2759 return object.raw(); | 2766 return object.raw(); |
| 2760 } | 2767 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2776 return true; | 2783 return true; |
| 2777 } | 2784 } |
| 2778 | 2785 |
| 2779 // Handle heap objects. | 2786 // Handle heap objects. |
| 2780 uword addr = 0; | 2787 uword addr = 0; |
| 2781 if (!GetUnsignedIntegerId(addr_str, &addr, 16)) { | 2788 if (!GetUnsignedIntegerId(addr_str, &addr, 16)) { |
| 2782 PrintInvalidParamError(js, "address"); | 2789 PrintInvalidParamError(js, "address"); |
| 2783 return true; | 2790 return true; |
| 2784 } | 2791 } |
| 2785 bool ref = js->HasParam("ref") && js->ParamIs("ref", "true"); | 2792 bool ref = js->HasParam("ref") && js->ParamIs("ref", "true"); |
| 2786 const Object& obj = Object::Handle(isolate, GetObjectHelper(isolate, addr)); | 2793 const Object& obj = Object::Handle(isolate->current_zone(), |
| 2794 GetObjectHelper(isolate, addr)); |
| 2787 if (obj.IsNull()) { | 2795 if (obj.IsNull()) { |
| 2788 PrintSentinel(js, kFreeSentinel); | 2796 PrintSentinel(js, kFreeSentinel); |
| 2789 } else { | 2797 } else { |
| 2790 obj.PrintJSON(js, ref); | 2798 obj.PrintJSON(js, ref); |
| 2791 } | 2799 } |
| 2792 return true; | 2800 return true; |
| 2793 } | 2801 } |
| 2794 | 2802 |
| 2795 | 2803 |
| 2796 static const MethodParameter* get_ports_params[] = { | 2804 static const MethodParameter* get_ports_params[] = { |
| (...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3288 ServiceMethodDescriptor& method = service_methods_[i]; | 3296 ServiceMethodDescriptor& method = service_methods_[i]; |
| 3289 if (strcmp(method_name, method.name) == 0) { | 3297 if (strcmp(method_name, method.name) == 0) { |
| 3290 return &method; | 3298 return &method; |
| 3291 } | 3299 } |
| 3292 } | 3300 } |
| 3293 return NULL; | 3301 return NULL; |
| 3294 } | 3302 } |
| 3295 | 3303 |
| 3296 | 3304 |
| 3297 } // namespace dart | 3305 } // namespace dart |
| OLD | NEW |