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

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

Issue 2059883003: DevFS initial implementation (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 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
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 "platform/assert.h" 5 #include "platform/assert.h"
6 6
7 #include "vm/dart_entry.h" 7 #include "vm/dart_entry.h"
8 #include "vm/debugger.h" 8 #include "vm/debugger.h"
9 #include "vm/json_stream.h" 9 #include "vm/json_stream.h"
10 #include "vm/message.h" 10 #include "vm/message.h"
(...skipping 28 matching lines...) Expand all
39 39
40 DECLARE_FLAG(bool, trace_service); 40 DECLARE_FLAG(bool, trace_service);
41 41
42 JSONStream::JSONStream(intptr_t buf_size) 42 JSONStream::JSONStream(intptr_t buf_size)
43 : open_objects_(0), 43 : open_objects_(0),
44 buffer_(buf_size), 44 buffer_(buf_size),
45 default_id_zone_(), 45 default_id_zone_(),
46 id_zone_(&default_id_zone_), 46 id_zone_(&default_id_zone_),
47 reply_port_(ILLEGAL_PORT), 47 reply_port_(ILLEGAL_PORT),
48 seq_(NULL), 48 seq_(NULL),
49 parameter_keys_(NULL),
50 parameter_values_(NULL),
49 method_(""), 51 method_(""),
50 param_keys_(NULL), 52 param_keys_(NULL),
51 param_values_(NULL), 53 param_values_(NULL),
52 num_params_(0), 54 num_params_(0),
53 offset_(0), 55 offset_(0),
54 count_(-1) { 56 count_(-1) {
55 ObjectIdRing* ring = NULL; 57 ObjectIdRing* ring = NULL;
56 Isolate* isolate = Isolate::Current(); 58 Isolate* isolate = Isolate::Current();
57 if (isolate != NULL) { 59 if (isolate != NULL) {
58 ring = isolate->object_id_ring(); 60 ring = isolate->object_id_ring();
59 } 61 }
60 default_id_zone_.Init(ring, ObjectIdRing::kAllocateId); 62 default_id_zone_.Init(ring, ObjectIdRing::kAllocateId);
61 } 63 }
62 64
63 65
64 JSONStream::~JSONStream() { 66 JSONStream::~JSONStream() {
65 } 67 }
66 68
67 69
68 void JSONStream::Setup(Zone* zone, 70 void JSONStream::Setup(Zone* zone,
69 Dart_Port reply_port, 71 Dart_Port reply_port,
70 const Instance& seq, 72 const Instance& seq,
71 const String& method, 73 const String& method,
72 const Array& param_keys, 74 const Array& param_keys,
73 const Array& param_values) { 75 const Array& param_values,
76 bool parameters_are_dart_objects) {
74 set_reply_port(reply_port); 77 set_reply_port(reply_port);
75 seq_ = &Instance::ZoneHandle(seq.raw()); 78 seq_ = &Instance::ZoneHandle(seq.raw());
76 method_ = method.ToCString(); 79 method_ = method.ToCString();
77 80
78 String& string_iterator = String::Handle(); 81 if (parameters_are_dart_objects) {
79 if (param_keys.Length() > 0) { 82 parameter_keys_ = &Array::ZoneHandle(param_keys.raw());
83 parameter_values_ = &Array::ZoneHandle(param_values.raw());
84 ASSERT(parameter_keys_->Length() == parameter_values_->Length());
85 } else if (param_keys.Length() > 0) {
86 String& string_iterator = String::Handle();
80 ASSERT(param_keys.Length() == param_values.Length()); 87 ASSERT(param_keys.Length() == param_values.Length());
81 const char** param_keys_native = 88 const char** param_keys_native =
82 zone->Alloc<const char*>(param_keys.Length()); 89 zone->Alloc<const char*>(param_keys.Length());
83 const char** param_values_native = 90 const char** param_values_native =
84 zone->Alloc<const char*>(param_keys.Length()); 91 zone->Alloc<const char*>(param_keys.Length());
85 for (intptr_t i = 0; i < param_keys.Length(); i++) { 92 for (intptr_t i = 0; i < param_keys.Length(); i++) {
93 // fprintf(stderr, "Param %" Pd " is %s\n", i, param_values[
turnidge 2016/06/10 18:45:34 Remove this.
86 string_iterator ^= param_keys.At(i); 94 string_iterator ^= param_keys.At(i);
87 param_keys_native[i] = 95 param_keys_native[i] =
88 zone->MakeCopyOfString(string_iterator.ToCString()); 96 zone->MakeCopyOfString(string_iterator.ToCString());
89 string_iterator ^= param_values.At(i); 97 string_iterator ^= param_values.At(i);
90 param_values_native[i] = 98 param_values_native[i] =
91 zone->MakeCopyOfString(string_iterator.ToCString()); 99 zone->MakeCopyOfString(string_iterator.ToCString());
92 } 100 }
93 SetParams(param_keys_native, param_values_native, param_keys.Length()); 101 SetParams(param_keys_native, param_values_native, param_keys.Length());
94 } 102 }
103
95 if (FLAG_trace_service) { 104 if (FLAG_trace_service) {
96 Isolate* isolate = Isolate::Current(); 105 Isolate* isolate = Isolate::Current();
97 ASSERT(isolate != NULL); 106 ASSERT(isolate != NULL);
98 const char* isolate_name = isolate->name(); 107 const char* isolate_name = isolate->name();
99 setup_time_micros_ = OS::GetCurrentTimeMicros(); 108 setup_time_micros_ = OS::GetCurrentTimeMicros();
100 OS::Print("[+%" Pd64 "ms] Isolate %s processing service request %s\n", 109 OS::Print("[+%" Pd64 "ms] Isolate %s processing service request %s\n",
101 Dart::timestamp(), isolate_name, method_); 110 Dart::timestamp(), isolate_name, method_);
102 } 111 }
103 buffer_.Printf("{\"jsonrpc\":\"2.0\", \"result\":"); 112 buffer_.Printf("{\"jsonrpc\":\"2.0\", \"result\":");
104 } 113 }
(...skipping 18 matching lines...) Expand all
123 case kInternalError: 132 case kInternalError:
124 return "Internal error"; 133 return "Internal error";
125 case kFeatureDisabled: 134 case kFeatureDisabled:
126 return "Feature is disabled"; 135 return "Feature is disabled";
127 case kCannotAddBreakpoint: 136 case kCannotAddBreakpoint:
128 return "Cannot add breakpoint"; 137 return "Cannot add breakpoint";
129 case kIsolateMustBeRunnable: 138 case kIsolateMustBeRunnable:
130 return "Isolate must be runnable"; 139 return "Isolate must be runnable";
131 case kIsolateMustBePaused: 140 case kIsolateMustBePaused:
132 return "Isolate must be paused"; 141 return "Isolate must be paused";
142 case kIsolateIsReloading:
143 return "Isolate is reloading";
144 case kFileSystemAlreadyExists:
145 return "File system already exists";
146 case kFileSystemDoesNotExist:
147 return "File system does not exist";
148 case kFileDoesNotExist:
149 return "File does not exist";
133 default: 150 default:
134 return "Extension error"; 151 return "Extension error";
135 } 152 }
136 } 153 }
137 154
138 155
139 static void PrintRequest(JSONObject* obj, JSONStream* js) { 156 static void PrintRequest(JSONObject* obj, JSONStream* js) {
140 JSONObject jsobj(obj, "request"); 157 JSONObject jsobj(obj, "request");
141 jsobj.AddProperty("method", js->method()); 158 jsobj.AddProperty("method", js->method());
142 { 159 {
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 *buffer_length = buffer_.length(); 677 *buffer_length = buffer_.length();
661 *buffer = buffer_.Steal(); 678 *buffer = buffer_.Steal();
662 } 679 }
663 680
664 681
665 void JSONStream::set_reply_port(Dart_Port port) { 682 void JSONStream::set_reply_port(Dart_Port port) {
666 reply_port_ = port; 683 reply_port_ = port;
667 } 684 }
668 685
669 686
687 intptr_t JSONStream::NumObjectParameters() const {
688 if (parameter_keys_ == NULL) {
689 return 0;
690 }
691 ASSERT(parameter_keys_ != NULL);
692 ASSERT(parameter_values_ != NULL);
693 return parameter_keys_->Length();
694 }
695
696
697 RawObject* JSONStream::GetObjectParameterKey(intptr_t i) const {
698 ASSERT((i >= 0) && (i < NumObjectParameters()));
699 return parameter_keys_->At(i);
700 }
701
702
703 RawObject* JSONStream::GetObjectParameterValue(intptr_t i) const {
704 ASSERT((i >= 0) && (i < NumObjectParameters()));
705 return parameter_values_->At(i);
706 }
707
708
709 RawObject* JSONStream::LookupObjectParam(const char* c_key) const {
710 const String& key = String::Handle(String::New(c_key));
711 Object& test = Object::Handle();
712 const intptr_t num_object_parameters = NumObjectParameters();
713 for (intptr_t i = 0; i < num_object_parameters; i++) {
714 test = GetObjectParameterKey(i);
715 if (test.IsString() && String::Cast(test).Equals(key)) {
716 return GetObjectParameterValue(i);
717 }
718 }
719 return Object::null();
720 }
721
722
670 void JSONStream::SetParams(const char** param_keys, 723 void JSONStream::SetParams(const char** param_keys,
671 const char** param_values, 724 const char** param_values,
672 intptr_t num_params) { 725 intptr_t num_params) {
673 param_keys_ = param_keys; 726 param_keys_ = param_keys;
674 param_values_ = param_values; 727 param_values_ = param_values;
675 num_params_ = num_params; 728 num_params_ = num_params;
676 } 729 }
677 730
678 731
679 void JSONStream::PrintProperty(const char* name, const Object& o, bool ref) { 732 void JSONStream::PrintProperty(const char* name, const Object& o, bool ref) {
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 ASSERT(len == len2); 944 ASSERT(len == len2);
892 stream_->buffer_.AddChar('"'); 945 stream_->buffer_.AddChar('"');
893 stream_->AddEscapedUTF8String(p); 946 stream_->AddEscapedUTF8String(p);
894 stream_->buffer_.AddChar('"'); 947 stream_->buffer_.AddChar('"');
895 free(p); 948 free(p);
896 } 949 }
897 950
898 #endif // !PRODUCT 951 #endif // !PRODUCT
899 952
900 } // namespace dart 953 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698