Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: runtime/vm/service.cc

Issue 1965493004: Canonicalize generic types in an isolate specific hash table (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: address-merge-conflicts Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/type_table.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 17 matching lines...) Expand all
28 #include "vm/parser.h" 28 #include "vm/parser.h"
29 #include "vm/port.h" 29 #include "vm/port.h"
30 #include "vm/profiler_service.h" 30 #include "vm/profiler_service.h"
31 #include "vm/reusable_handles.h" 31 #include "vm/reusable_handles.h"
32 #include "vm/service_event.h" 32 #include "vm/service_event.h"
33 #include "vm/service_isolate.h" 33 #include "vm/service_isolate.h"
34 #include "vm/source_report.h" 34 #include "vm/source_report.h"
35 #include "vm/stack_frame.h" 35 #include "vm/stack_frame.h"
36 #include "vm/symbols.h" 36 #include "vm/symbols.h"
37 #include "vm/timeline.h" 37 #include "vm/timeline.h"
38 #include "vm/type_table.h"
38 #include "vm/unicode.h" 39 #include "vm/unicode.h"
39 #include "vm/version.h" 40 #include "vm/version.h"
40 41
41 namespace dart { 42 namespace dart {
42 43
43 #define Z (T->zone()) 44 #define Z (T->zone())
44 45
45 46
46 DECLARE_FLAG(bool, trace_service); 47 DECLARE_FLAG(bool, trace_service);
47 DECLARE_FLAG(bool, trace_service_pause_events); 48 DECLARE_FLAG(bool, trace_service_pause_events);
(...skipping 1542 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 1591
1591 } else if (strcmp(parts[2], "types") == 0) { 1592 } else if (strcmp(parts[2], "types") == 0) {
1592 // Type ids look like: "classes/17/types/11" 1593 // Type ids look like: "classes/17/types/11"
1593 if (num_parts != 4) { 1594 if (num_parts != 4) {
1594 return Object::sentinel().raw(); 1595 return Object::sentinel().raw();
1595 } 1596 }
1596 intptr_t id; 1597 intptr_t id;
1597 if (!GetIntegerId(parts[3], &id)) { 1598 if (!GetIntegerId(parts[3], &id)) {
1598 return Object::sentinel().raw(); 1599 return Object::sentinel().raw();
1599 } 1600 }
1600 Type& type = Type::Handle(zone); 1601 if (id != 0) {
1601 type ^= cls.CanonicalTypeFromIndex(id);
1602 if (type.IsNull()) {
1603 return Object::sentinel().raw(); 1602 return Object::sentinel().raw();
1604 } 1603 }
1605 return type.raw(); 1604 const Type& type = Type::Handle(zone, cls.CanonicalType());
1605 if (!type.IsNull()) {
1606 return type.raw();
1607 }
1606 } 1608 }
1607 1609
1608 // Not found. 1610 // Not found.
1609 return Object::sentinel().raw(); 1611 return Object::sentinel().raw();
1610 } 1612 }
1611 1613
1612 1614
1613 static RawObject* LookupHeapObjectTypeArguments(Thread* thread, 1615 static RawObject* LookupHeapObjectTypeArguments(Thread* thread,
1614 char** parts, int num_parts) { 1616 char** parts, int num_parts) {
1615 Isolate* isolate = thread->isolate(); 1617 Isolate* isolate = thread->isolate();
(...skipping 1997 matching lines...) Expand 10 before | Expand all | Expand 10 after
3613 RUNNABLE_ISOLATE_PARAMETER, 3615 RUNNABLE_ISOLATE_PARAMETER,
3614 NULL, 3616 NULL,
3615 }; 3617 };
3616 3618
3617 3619
3618 static bool GetTypeArgumentsList(Thread* thread, JSONStream* js) { 3620 static bool GetTypeArgumentsList(Thread* thread, JSONStream* js) {
3619 bool only_with_instantiations = false; 3621 bool only_with_instantiations = false;
3620 if (js->ParamIs("onlyWithInstantiations", "true")) { 3622 if (js->ParamIs("onlyWithInstantiations", "true")) {
3621 only_with_instantiations = true; 3623 only_with_instantiations = true;
3622 } 3624 }
3625 Zone* zone = thread->zone();
3623 ObjectStore* object_store = thread->isolate()->object_store(); 3626 ObjectStore* object_store = thread->isolate()->object_store();
3624 const Array& table = Array::Handle(object_store->canonical_type_arguments()); 3627 CanonicalTypeArgumentsSet typeargs_table(
3625 ASSERT(table.Length() > 0); 3628 zone, object_store->canonical_type_arguments());
3626 TypeArguments& type_args = TypeArguments::Handle(); 3629 const intptr_t table_size = typeargs_table.NumEntries();
3627 const intptr_t table_size = table.Length() - 1; 3630 const intptr_t table_used = typeargs_table.NumOccupied();
3628 const intptr_t table_used = Smi::Value(Smi::RawCast(table.At(table_size))); 3631 const Array& typeargs_array = Array::Handle(
3632 zone, HashTables::ToArray(typeargs_table, false));
3633 ASSERT(typeargs_array.Length() == table_used);
3634 TypeArguments& typeargs = TypeArguments::Handle(zone);
3629 JSONObject jsobj(js); 3635 JSONObject jsobj(js);
3630 jsobj.AddProperty("type", "TypeArgumentsList"); 3636 jsobj.AddProperty("type", "TypeArgumentsList");
3631 jsobj.AddProperty("canonicalTypeArgumentsTableSize", table_size); 3637 jsobj.AddProperty("canonicalTypeArgumentsTableSize", table_size);
3632 jsobj.AddProperty("canonicalTypeArgumentsTableUsed", table_used); 3638 jsobj.AddProperty("canonicalTypeArgumentsTableUsed", table_used);
3633 JSONArray members(&jsobj, "typeArguments"); 3639 JSONArray members(&jsobj, "typeArguments");
3634 for (intptr_t i = 0; i < table_size; i++) { 3640 for (intptr_t i = 0; i < table_used; i++) {
3635 type_args ^= table.At(i); 3641 typeargs ^= typeargs_array.At(i);
3636 if (!type_args.IsNull()) { 3642 if (!typeargs.IsNull()) {
3637 if (!only_with_instantiations || type_args.HasInstantiations()) { 3643 if (!only_with_instantiations || typeargs.HasInstantiations()) {
3638 members.AddValue(type_args); 3644 members.AddValue(typeargs);
3639 } 3645 }
3640 } 3646 }
3641 } 3647 }
3648 typeargs_table.Release();
3642 return true; 3649 return true;
3643 } 3650 }
3644 3651
3645 3652
3646 static const MethodParameter* get_version_params[] = { 3653 static const MethodParameter* get_version_params[] = {
3647 NO_ISOLATE_PARAMETER, 3654 NO_ISOLATE_PARAMETER,
3648 NULL, 3655 NULL,
3649 }; 3656 };
3650 3657
3651 3658
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
4035 if (strcmp(method_name, method.name) == 0) { 4042 if (strcmp(method_name, method.name) == 0) {
4036 return &method; 4043 return &method;
4037 } 4044 }
4038 } 4045 }
4039 return NULL; 4046 return NULL;
4040 } 4047 }
4041 4048
4042 #endif // !PRODUCT 4049 #endif // !PRODUCT
4043 4050
4044 } // namespace dart 4051 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/raw_object.h ('k') | runtime/vm/type_table.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698