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

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

Issue 2884383005: Revert "Use Kernel frontend from run_vm_tests." (Closed)
Patch Set: 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" 7 #include "vm/compiler.h"
8 #include "include/dart_native_api.h" 8 #include "include/dart_native_api.h"
9 #include "vm/compiler.h"
10 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
11 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
12 #include "vm/isolate.h" 11 #include "vm/isolate.h"
13 #include "vm/lockers.h" 12 #include "vm/lockers.h"
14 #include "vm/message.h" 13 #include "vm/message.h"
15 #include "vm/message_handler.h" 14 #include "vm/message_handler.h"
15 #include "vm/native_entry.h"
16 #include "vm/native_arguments.h" 16 #include "vm/native_arguments.h"
17 #include "vm/native_entry.h"
18 #include "vm/object.h" 17 #include "vm/object.h"
19 #include "vm/object_store.h" 18 #include "vm/object_store.h"
20 #include "vm/port.h" 19 #include "vm/port.h"
21 #include "vm/service.h" 20 #include "vm/service.h"
22 #include "vm/symbols.h" 21 #include "vm/symbols.h"
23 #include "vm/thread_pool.h" 22 #include "vm/thread_pool.h"
24 #include "vm/timeline.h" 23 #include "vm/timeline.h"
25 24
26 namespace dart { 25 namespace dart {
27 26
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 result_.kernel = NULL; 293 result_.kernel = NULL;
295 result_.kernel_size = 0; 294 result_.kernel_size = 0;
296 } 295 }
297 296
298 ~KernelCompilationRequest() { 297 ~KernelCompilationRequest() {
299 UnregisterRequest(this); 298 UnregisterRequest(this);
300 Dart_CloseNativePort(port_); 299 Dart_CloseNativePort(port_);
301 delete monitor_; 300 delete monitor_;
302 } 301 }
303 302
304 Dart_KernelCompilationResult SendAndWaitForResponse( 303 Dart_KernelCompilationResult SendAndWaitForResponse(Dart_Port kernel_port,
305 Dart_Port kernel_port, 304 const char* script_uri) {
306 const char* script_uri,
307 int source_files_count,
308 Dart_SourceFile source_files[]) {
309 // Build the [null, send_port, script_uri] message for the Kernel isolate: 305 // Build the [null, send_port, script_uri] message for the Kernel isolate:
310 // null tag tells it that request came from this code, instead of Loader 306 // null tag tells it that request came from this code, instead of Loader
311 // so that it can given a more informative response. 307 // so that it can given a more informative response.
312 Dart_CObject tag; 308 Dart_CObject tag;
313 tag.type = Dart_CObject_kNull; 309 tag.type = Dart_CObject_kNull;
314 310
315 Dart_CObject send_port; 311 Dart_CObject send_port;
316 send_port.type = Dart_CObject_kSendPort; 312 send_port.type = Dart_CObject_kSendPort;
317 send_port.value.as_send_port.id = port_; 313 send_port.value.as_send_port.id = port_;
318 send_port.value.as_send_port.origin_id = ILLEGAL_PORT; 314 send_port.value.as_send_port.origin_id = ILLEGAL_PORT;
319 315
320 Dart_CObject uri; 316 Dart_CObject uri;
321 uri.type = Dart_CObject_kString; 317 uri.type = Dart_CObject_kString;
322 uri.value.as_string = const_cast<char*>(script_uri); 318 uri.value.as_string = const_cast<char*>(script_uri);
323 319
320 static const intptr_t kMessageLen = 3;
321 Dart_CObject* message_arr[kMessageLen] = {&tag, &send_port, &uri};
322
324 Dart_CObject message; 323 Dart_CObject message;
325 message.type = Dart_CObject_kArray; 324 message.type = Dart_CObject_kArray;
325 message.value.as_array.length = kMessageLen;
326 message.value.as_array.values = message_arr;
326 327
327 if (source_files_count == 0) { 328 // Send the message.
328 static const intptr_t message_len = 3; 329 Dart_PostCObject(kernel_port, &message);
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 }
362 330
363 // Wait for reply to arrive. 331 // Wait for reply to arrive.
364 MonitorLocker ml(monitor_); 332 MonitorLocker ml(monitor_);
365 while (result_.status == Dart_KernelCompilationStatus_Unknown) { 333 while (result_.status == Dart_KernelCompilationStatus_Unknown) {
366 ml.Wait(); 334 ml.Wait();
367 } 335 }
368 336
369 return result_; 337 return result_;
370 } 338 }
371 339
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 KernelCompilationRequest* next_; 428 KernelCompilationRequest* next_;
461 KernelCompilationRequest* prev_; 429 KernelCompilationRequest* prev_;
462 430
463 Dart_KernelCompilationResult result_; 431 Dart_KernelCompilationResult result_;
464 }; 432 };
465 433
466 Monitor* KernelCompilationRequest::requests_monitor_ = new Monitor(); 434 Monitor* KernelCompilationRequest::requests_monitor_ = new Monitor();
467 KernelCompilationRequest* KernelCompilationRequest::requests_ = NULL; 435 KernelCompilationRequest* KernelCompilationRequest::requests_ = NULL;
468 436
469 Dart_KernelCompilationResult KernelIsolate::CompileToKernel( 437 Dart_KernelCompilationResult KernelIsolate::CompileToKernel(
470 const char* script_uri, 438 const char* script_uri) {
471 int source_file_count,
472 Dart_SourceFile source_files[]) {
473 // This must be the main script to be loaded. Wait for Kernel isolate 439 // This must be the main script to be loaded. Wait for Kernel isolate
474 // to finish initialization. 440 // to finish initialization.
475 Dart_Port kernel_port = WaitForKernelPort(); 441 Dart_Port kernel_port = WaitForKernelPort();
476 if (kernel_port == ILLEGAL_PORT) { 442 if (kernel_port == ILLEGAL_PORT) {
477 Dart_KernelCompilationResult result; 443 Dart_KernelCompilationResult result;
478 result.status = Dart_KernelCompilationStatus_Unknown; 444 result.status = Dart_KernelCompilationStatus_Unknown;
479 result.error = strdup("Error while initializing Kernel isolate"); 445 result.error = strdup("Error while initializing Kernel isolate");
480 return result; 446 return result;
481 } 447 }
482 448
483 KernelCompilationRequest request; 449 KernelCompilationRequest request;
484 return request.SendAndWaitForResponse(kernel_port, script_uri, 450 return request.SendAndWaitForResponse(kernel_port, script_uri);
485 source_file_count, source_files);
486 } 451 }
487 452
488 453
489 #endif // DART_PRECOMPILED_RUNTIME 454 #endif // DART_PRECOMPILED_RUNTIME
490 455
491 } // namespace dart 456 } // 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