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

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

Issue 2881953002: Use Kernel frontend from run_vm_tests. (Closed)
Patch Set: Make it explicit that only kernel isolates should be spawned. Return correct value when test fails.… Created 3 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/kernel_isolate.h ('k') | runtime/vm/unit_test.cc » ('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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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/kernel_isolate.h" 5 #include "vm/kernel_isolate.h"
6 6
7 #include "bin/dartutils.h"
8 #include "include/dart_native_api.h"
7 #include "vm/compiler.h" 9 #include "vm/compiler.h"
8 #include "include/dart_native_api.h"
9 #include "vm/dart_api_impl.h" 10 #include "vm/dart_api_impl.h"
10 #include "vm/dart_entry.h" 11 #include "vm/dart_entry.h"
11 #include "vm/isolate.h" 12 #include "vm/isolate.h"
12 #include "vm/lockers.h" 13 #include "vm/lockers.h"
13 #include "vm/message.h" 14 #include "vm/message.h"
14 #include "vm/message_handler.h" 15 #include "vm/message_handler.h"
16 #include "vm/native_arguments.h"
15 #include "vm/native_entry.h" 17 #include "vm/native_entry.h"
16 #include "vm/native_arguments.h"
17 #include "vm/object.h" 18 #include "vm/object.h"
18 #include "vm/object_store.h" 19 #include "vm/object_store.h"
19 #include "vm/port.h" 20 #include "vm/port.h"
20 #include "vm/service.h" 21 #include "vm/service.h"
21 #include "vm/symbols.h" 22 #include "vm/symbols.h"
22 #include "vm/thread_pool.h" 23 #include "vm/thread_pool.h"
23 #include "vm/timeline.h" 24 #include "vm/timeline.h"
24 25
25 namespace dart { 26 namespace dart {
26 27
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 result_.kernel = NULL; 294 result_.kernel = NULL;
294 result_.kernel_size = 0; 295 result_.kernel_size = 0;
295 } 296 }
296 297
297 ~KernelCompilationRequest() { 298 ~KernelCompilationRequest() {
298 UnregisterRequest(this); 299 UnregisterRequest(this);
299 Dart_CloseNativePort(port_); 300 Dart_CloseNativePort(port_);
300 delete monitor_; 301 delete monitor_;
301 } 302 }
302 303
303 Dart_KernelCompilationResult SendAndWaitForResponse(Dart_Port kernel_port, 304 Dart_KernelCompilationResult SendAndWaitForResponse(
304 const char* script_uri) { 305 Dart_Port kernel_port,
306 const char* script_uri,
307 int source_files_count,
308 Dart_SourceFile source_files[]) {
305 // Build the [null, send_port, script_uri] message for the Kernel isolate: 309 // Build the [null, send_port, script_uri] message for the Kernel isolate:
306 // null tag tells it that request came from this code, instead of Loader 310 // null tag tells it that request came from this code, instead of Loader
307 // so that it can given a more informative response. 311 // so that it can given a more informative response.
308 Dart_CObject tag; 312 Dart_CObject tag;
309 tag.type = Dart_CObject_kNull; 313 tag.type = Dart_CObject_kNull;
310 314
311 Dart_CObject send_port; 315 Dart_CObject send_port;
312 send_port.type = Dart_CObject_kSendPort; 316 send_port.type = Dart_CObject_kSendPort;
313 send_port.value.as_send_port.id = port_; 317 send_port.value.as_send_port.id = port_;
314 send_port.value.as_send_port.origin_id = ILLEGAL_PORT; 318 send_port.value.as_send_port.origin_id = ILLEGAL_PORT;
315 319
316 Dart_CObject uri; 320 Dart_CObject uri;
317 uri.type = Dart_CObject_kString; 321 uri.type = Dart_CObject_kString;
318 uri.value.as_string = const_cast<char*>(script_uri); 322 uri.value.as_string = const_cast<char*>(script_uri);
319 323
320 static const intptr_t kMessageLen = 3;
321 Dart_CObject* message_arr[kMessageLen] = {&tag, &send_port, &uri};
322
323 Dart_CObject message; 324 Dart_CObject message;
324 message.type = Dart_CObject_kArray; 325 message.type = Dart_CObject_kArray;
325 message.value.as_array.length = kMessageLen;
326 message.value.as_array.values = message_arr;
327 326
328 // Send the message. 327 if (source_files_count == 0) {
329 Dart_PostCObject(kernel_port, &message); 328 static const intptr_t message_len = 3;
329 Dart_CObject* message_arr[] = {&tag, &send_port, &uri};
330 message.value.as_array.values = message_arr;
331 message.value.as_array.length = message_len;
332 // Send the message.
333 Dart_PostCObject(kernel_port, &message);
334 } else {
335 Dart_CObject files;
336 files.type = Dart_CObject_kArray;
337 files.value.as_array.length = source_files_count * 2;
338 // typedef Dart_CObject* Dart_CObjectPtr;
339 Dart_CObject** fileNamePairs = new Dart_CObject*[source_files_count * 2];
340 for (int i = 0; i < source_files_count; i++) {
341 Dart_CObject* source_uri = new Dart_CObject();
342 source_uri->type = Dart_CObject_kString;
343 source_uri->value.as_string = const_cast<char*>(source_files[i].uri);
344 fileNamePairs[i * 2] = source_uri;
345
346 Dart_CObject* source_code = new Dart_CObject();
347 source_code->type = Dart_CObject_kTypedData;
348 source_code->value.as_typed_data.type = Dart_TypedData_kUint8;
349 source_code->value.as_typed_data.length =
350 strlen(source_files[i].source);
351 source_code->value.as_typed_data.values = reinterpret_cast<uint8_t*>(
352 const_cast<char*>(source_files[i].source));
353 fileNamePairs[(i * 2) + 1] = source_code;
354 }
355 files.value.as_array.values = fileNamePairs;
356 static const intptr_t message_len = 4;
357 Dart_CObject* message_arr[] = {&tag, &send_port, &uri, &files};
358 message.value.as_array.values = message_arr;
359 message.value.as_array.length = message_len;
360 Dart_PostCObject(kernel_port, &message);
361 }
330 362
331 // Wait for reply to arrive. 363 // Wait for reply to arrive.
332 MonitorLocker ml(monitor_); 364 MonitorLocker ml(monitor_);
333 while (result_.status == Dart_KernelCompilationStatus_Unknown) { 365 while (result_.status == Dart_KernelCompilationStatus_Unknown) {
334 ml.Wait(); 366 ml.Wait();
335 } 367 }
336 368
337 return result_; 369 return result_;
338 } 370 }
339 371
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 KernelCompilationRequest* next_; 460 KernelCompilationRequest* next_;
429 KernelCompilationRequest* prev_; 461 KernelCompilationRequest* prev_;
430 462
431 Dart_KernelCompilationResult result_; 463 Dart_KernelCompilationResult result_;
432 }; 464 };
433 465
434 Monitor* KernelCompilationRequest::requests_monitor_ = new Monitor(); 466 Monitor* KernelCompilationRequest::requests_monitor_ = new Monitor();
435 KernelCompilationRequest* KernelCompilationRequest::requests_ = NULL; 467 KernelCompilationRequest* KernelCompilationRequest::requests_ = NULL;
436 468
437 Dart_KernelCompilationResult KernelIsolate::CompileToKernel( 469 Dart_KernelCompilationResult KernelIsolate::CompileToKernel(
438 const char* script_uri) { 470 const char* script_uri,
471 int source_file_count,
472 Dart_SourceFile source_files[]) {
439 // This must be the main script to be loaded. Wait for Kernel isolate 473 // This must be the main script to be loaded. Wait for Kernel isolate
440 // to finish initialization. 474 // to finish initialization.
441 Dart_Port kernel_port = WaitForKernelPort(); 475 Dart_Port kernel_port = WaitForKernelPort();
442 if (kernel_port == ILLEGAL_PORT) { 476 if (kernel_port == ILLEGAL_PORT) {
443 Dart_KernelCompilationResult result; 477 Dart_KernelCompilationResult result;
444 result.status = Dart_KernelCompilationStatus_Unknown; 478 result.status = Dart_KernelCompilationStatus_Unknown;
445 result.error = strdup("Error while initializing Kernel isolate"); 479 result.error = strdup("Error while initializing Kernel isolate");
446 return result; 480 return result;
447 } 481 }
448 482
449 KernelCompilationRequest request; 483 KernelCompilationRequest request;
450 return request.SendAndWaitForResponse(kernel_port, script_uri); 484 return request.SendAndWaitForResponse(kernel_port, script_uri,
485 source_file_count, source_files);
451 } 486 }
452 487
453 488
454 #endif // DART_PRECOMPILED_RUNTIME 489 #endif // DART_PRECOMPILED_RUNTIME
455 490
456 } // namespace dart 491 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/kernel_isolate.h ('k') | runtime/vm/unit_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698