OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 "include/dart_api.h" | 5 #include "include/dart_api.h" |
6 #include "include/dart_native_api.h" | 6 #include "include/dart_native_api.h" |
7 | 7 |
8 #include "vm/unit_test.h" | 8 #include "vm/unit_test.h" |
9 | 9 |
10 // Custom Isolate Test. | 10 // Custom Isolate Test. |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 private: | 92 private: |
93 friend class EventQueue; | 93 friend class EventQueue; |
94 Dart_Isolate isolate_; | 94 Dart_Isolate isolate_; |
95 Event* next_; | 95 Event* next_; |
96 }; | 96 }; |
97 | 97 |
98 | 98 |
99 // A simple event queue for our test. | 99 // A simple event queue for our test. |
100 class EventQueue { | 100 class EventQueue { |
101 public: | 101 public: |
102 EventQueue() { | 102 EventQueue() { head_ = NULL; } |
103 head_ = NULL; | |
104 } | |
105 | 103 |
106 void Add(Event* event) { | 104 void Add(Event* event) { |
107 if (head_ == NULL) { | 105 if (head_ == NULL) { |
108 head_ = event; | 106 head_ = event; |
109 tail_ = event; | 107 tail_ = event; |
110 } else { | 108 } else { |
111 tail_->next_ = event; | 109 tail_->next_ = event; |
112 tail_ = event; | 110 tail_ = event; |
113 } | 111 } |
114 } | 112 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 EventQueue* event_queue; | 154 EventQueue* event_queue; |
157 | 155 |
158 | 156 |
159 // Start an isolate. | 157 // Start an isolate. |
160 class StartEvent : public Event { | 158 class StartEvent : public Event { |
161 public: | 159 public: |
162 StartEvent(Dart_Isolate isolate, const char* main) | 160 StartEvent(Dart_Isolate isolate, const char* main) |
163 : Event(isolate), main_(main) {} | 161 : Event(isolate), main_(main) {} |
164 | 162 |
165 virtual void Process(); | 163 virtual void Process(); |
| 164 |
166 private: | 165 private: |
167 const char* main_; | 166 const char* main_; |
168 }; | 167 }; |
169 | 168 |
170 | 169 |
171 void StartEvent::Process() { | 170 void StartEvent::Process() { |
172 OS::Print(">> StartEvent with isolate(%p)--\n", isolate()); | 171 OS::Print(">> StartEvent with isolate(%p)--\n", isolate()); |
173 Dart_EnterIsolate(isolate()); | 172 Dart_EnterIsolate(isolate()); |
174 Dart_EnterScope(); | 173 Dart_EnterScope(); |
175 Dart_Handle result; | 174 Dart_Handle result; |
(...skipping 10 matching lines...) Expand all Loading... |
186 Dart_ExitScope(); | 185 Dart_ExitScope(); |
187 Dart_ExitIsolate(); | 186 Dart_ExitIsolate(); |
188 } | 187 } |
189 | 188 |
190 | 189 |
191 // Notify an isolate of a pending message. | 190 // Notify an isolate of a pending message. |
192 class MessageEvent : public Event { | 191 class MessageEvent : public Event { |
193 public: | 192 public: |
194 explicit MessageEvent(Dart_Isolate isolate) : Event(isolate) {} | 193 explicit MessageEvent(Dart_Isolate isolate) : Event(isolate) {} |
195 | 194 |
196 ~MessageEvent() { | 195 ~MessageEvent() {} |
197 } | |
198 | 196 |
199 virtual void Process(); | 197 virtual void Process(); |
200 }; | 198 }; |
201 | 199 |
202 | 200 |
203 void MessageEvent::Process() { | 201 void MessageEvent::Process() { |
204 OS::Print("$$ MessageEvent with isolate(%p)\n", isolate()); | 202 OS::Print("$$ MessageEvent with isolate(%p)\n", isolate()); |
205 Dart_EnterIsolate(isolate()); | 203 Dart_EnterIsolate(isolate()); |
206 Dart_EnterScope(); | 204 Dart_EnterScope(); |
207 | 205 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 Dart_ExitIsolate(); | 280 Dart_ExitIsolate(); |
283 | 281 |
284 // Create a new Dart_Isolate. | 282 // Create a new Dart_Isolate. |
285 Dart_Isolate new_isolate = TestCase::CreateTestIsolate(); | 283 Dart_Isolate new_isolate = TestCase::CreateTestIsolate(); |
286 EXPECT(new_isolate != NULL); | 284 EXPECT(new_isolate != NULL); |
287 Dart_SetMessageNotifyCallback(&NotifyMessage); | 285 Dart_SetMessageNotifyCallback(&NotifyMessage); |
288 Dart_EnterScope(); | 286 Dart_EnterScope(); |
289 // Reload all the test classes here. | 287 // Reload all the test classes here. |
290 // | 288 // |
291 // TODO(turnidge): Use the create isolate callback instead? | 289 // TODO(turnidge): Use the create isolate callback instead? |
292 Dart_Handle lib = TestCase::LoadTestScript(kCustomIsolateScriptChars, | 290 Dart_Handle lib = |
293 NativeLookup); | 291 TestCase::LoadTestScript(kCustomIsolateScriptChars, NativeLookup); |
294 EXPECT_VALID(lib); | 292 EXPECT_VALID(lib); |
295 | 293 |
296 Dart_Handle main_send_port = Dart_GetField(lib, NewString("mainSendPort")); | 294 Dart_Handle main_send_port = Dart_GetField(lib, NewString("mainSendPort")); |
297 EXPECT_VALID(main_send_port); | 295 EXPECT_VALID(main_send_port); |
298 Dart_Port main_port_id; | 296 Dart_Port main_port_id; |
299 Dart_Handle err = Dart_SendPortGetId(main_send_port, &main_port_id); | 297 Dart_Handle err = Dart_SendPortGetId(main_send_port, &main_port_id); |
300 EXPECT_VALID(err); | 298 EXPECT_VALID(err); |
301 | 299 |
302 OS::Print("-- Adding StartEvent to queue --\n"); | 300 OS::Print("-- Adding StartEvent to queue --\n"); |
303 event_queue->Add(new StartEvent(new_isolate, isolate_main)); | 301 event_queue->Add(new StartEvent(new_isolate, isolate_main)); |
(...skipping 22 matching lines...) Expand all Loading... |
326 #endif | 324 #endif |
327 event_queue = new EventQueue(); | 325 event_queue = new EventQueue(); |
328 | 326 |
329 Dart_Isolate dart_isolate = TestCase::CreateTestIsolate(); | 327 Dart_Isolate dart_isolate = TestCase::CreateTestIsolate(); |
330 EXPECT(dart_isolate != NULL); | 328 EXPECT(dart_isolate != NULL); |
331 Dart_SetMessageNotifyCallback(&NotifyMessage); | 329 Dart_SetMessageNotifyCallback(&NotifyMessage); |
332 Dart_EnterScope(); | 330 Dart_EnterScope(); |
333 Dart_Handle result; | 331 Dart_Handle result; |
334 | 332 |
335 // Create a test library. | 333 // Create a test library. |
336 Dart_Handle lib = TestCase::LoadTestScript(kCustomIsolateScriptChars, | 334 Dart_Handle lib = |
337 NativeLookup); | 335 TestCase::LoadTestScript(kCustomIsolateScriptChars, NativeLookup); |
338 EXPECT_VALID(lib); | 336 EXPECT_VALID(lib); |
339 | 337 |
340 // Run main. | 338 // Run main. |
341 result = Dart_Invoke(lib, NewString("main"), 0, NULL); | 339 result = Dart_Invoke(lib, NewString("main"), 0, NULL); |
342 EXPECT_VALID(result); | 340 EXPECT_VALID(result); |
343 EXPECT(Dart_IsString(result)); | 341 EXPECT(Dart_IsString(result)); |
344 const char* result_str = NULL; | 342 const char* result_str = NULL; |
345 EXPECT_VALID(Dart_StringToCString(result, &result_str)); | 343 EXPECT_VALID(Dart_StringToCString(result, &result_str)); |
346 EXPECT_STREQ("success", result_str); | 344 EXPECT_STREQ("success", result_str); |
347 | 345 |
(...skipping 10 matching lines...) Expand all Loading... |
358 OS::Print("-- Finished event loop --\n"); | 356 OS::Print("-- Finished event loop --\n"); |
359 EXPECT_STREQ("Received: 43", saved_echo); | 357 EXPECT_STREQ("Received: 43", saved_echo); |
360 free(saved_echo); | 358 free(saved_echo); |
361 | 359 |
362 delete event_queue; | 360 delete event_queue; |
363 event_queue = NULL; | 361 event_queue = NULL; |
364 FLAG_trace_shutdown = saved_flag; | 362 FLAG_trace_shutdown = saved_flag; |
365 } | 363 } |
366 | 364 |
367 } // namespace dart | 365 } // namespace dart |
OLD | NEW |