OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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/globals.h" | 5 #include "platform/globals.h" |
6 | 6 |
7 #include "include/dart_debugger_api.h" | 7 #include "include/dart_debugger_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
10 #include "vm/dart_api_impl.h" | 10 #include "vm/dart_api_impl.h" |
11 #include "vm/dart_api_message.h" | 11 #include "vm/dart_api_message.h" |
12 #include "vm/dart_api_state.h" | 12 #include "vm/dart_api_state.h" |
13 #include "vm/flags.h" | 13 #include "vm/flags.h" |
14 #include "vm/snapshot.h" | 14 #include "vm/snapshot.h" |
15 #include "vm/symbols.h" | 15 #include "vm/symbols.h" |
16 #include "vm/unicode.h" | 16 #include "vm/unicode.h" |
17 #include "vm/unit_test.h" | 17 #include "vm/unit_test.h" |
18 | 18 |
19 namespace dart { | 19 namespace dart { |
20 | 20 |
21 DECLARE_FLAG(bool, enable_type_checks); | 21 DECLARE_FLAG(bool, enable_type_checks); |
22 DECLARE_FLAG(bool, load_deferred_eagerly); | 22 DECLARE_FLAG(bool, load_deferred_eagerly); |
| 23 DECLARE_FLAG(bool, concurrent_sweep); |
23 | 24 |
24 // Check if serialized and deserialized objects are equal. | 25 // Check if serialized and deserialized objects are equal. |
25 static bool Equals(const Object& expected, const Object& actual) { | 26 static bool Equals(const Object& expected, const Object& actual) { |
26 if (expected.IsNull()) { | 27 if (expected.IsNull()) { |
27 return actual.IsNull(); | 28 return actual.IsNull(); |
28 } | 29 } |
29 if (expected.IsSmi()) { | 30 if (expected.IsSmi()) { |
30 if (actual.IsSmi()) { | 31 if (actual.IsSmi()) { |
31 return expected.raw() == actual.raw(); | 32 return expected.raw() == actual.raw(); |
32 } | 33 } |
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1228 intptr_t vm_isolate_snapshot_size; | 1229 intptr_t vm_isolate_snapshot_size; |
1229 uint8_t* isolate_snapshot = NULL; | 1230 uint8_t* isolate_snapshot = NULL; |
1230 intptr_t isolate_snapshot_size; | 1231 intptr_t isolate_snapshot_size; |
1231 uint8_t* full_snapshot = NULL; | 1232 uint8_t* full_snapshot = NULL; |
1232 uint8_t* script_snapshot = NULL; | 1233 uint8_t* script_snapshot = NULL; |
1233 intptr_t expected_num_libs; | 1234 intptr_t expected_num_libs; |
1234 intptr_t actual_num_libs; | 1235 intptr_t actual_num_libs; |
1235 | 1236 |
1236 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; | 1237 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; |
1237 FLAG_load_deferred_eagerly = true; | 1238 FLAG_load_deferred_eagerly = true; |
1238 | 1239 // Workaround until issue 21620 is fixed. |
| 1240 // (https://github.com/dart-lang/sdk/issues/21620) |
| 1241 bool saved_concurrent_sweep_mode = FLAG_concurrent_sweep; |
| 1242 FLAG_concurrent_sweep = false; |
1239 { | 1243 { |
1240 // Start an Isolate, and create a full snapshot of it. | 1244 // Start an Isolate, and create a full snapshot of it. |
1241 TestIsolateScope __test_isolate__; | 1245 TestIsolateScope __test_isolate__; |
1242 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1246 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
1243 | 1247 |
1244 // Write out the script snapshot. | 1248 // Write out the script snapshot. |
1245 result = Dart_CreateSnapshot(NULL, | 1249 result = Dart_CreateSnapshot(NULL, |
1246 &vm_isolate_snapshot_size, | 1250 &vm_isolate_snapshot_size, |
1247 &isolate_snapshot, | 1251 &isolate_snapshot, |
1248 &isolate_snapshot_size); | 1252 &isolate_snapshot_size); |
1249 EXPECT_VALID(result); | 1253 EXPECT_VALID(result); |
1250 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); | 1254 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); |
1251 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); | 1255 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); |
1252 Dart_ExitScope(); | 1256 Dart_ExitScope(); |
1253 } | 1257 } |
1254 | |
1255 FLAG_load_deferred_eagerly = saved_load_deferred_eagerly_mode; | 1258 FLAG_load_deferred_eagerly = saved_load_deferred_eagerly_mode; |
| 1259 FLAG_concurrent_sweep = saved_concurrent_sweep_mode; |
1256 | 1260 |
1257 // Test for Dart_CreateScriptSnapshot. | 1261 // Test for Dart_CreateScriptSnapshot. |
1258 { | 1262 { |
1259 // Create an Isolate using the full snapshot, load a script and create | 1263 // Create an Isolate using the full snapshot, load a script and create |
1260 // a script snapshot of the script. | 1264 // a script snapshot of the script. |
1261 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); | 1265 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); |
1262 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1266 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
1263 | 1267 |
1264 // Load the library. | 1268 // Load the library. |
1265 Dart_Handle import_lib = Dart_LoadLibrary(NewString("dart_import_lib"), | 1269 Dart_Handle import_lib = Dart_LoadLibrary(NewString("dart_import_lib"), |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1372 uint8_t* buffer; | 1376 uint8_t* buffer; |
1373 intptr_t size; | 1377 intptr_t size; |
1374 intptr_t vm_isolate_snapshot_size; | 1378 intptr_t vm_isolate_snapshot_size; |
1375 uint8_t* isolate_snapshot = NULL; | 1379 uint8_t* isolate_snapshot = NULL; |
1376 intptr_t isolate_snapshot_size; | 1380 intptr_t isolate_snapshot_size; |
1377 uint8_t* full_snapshot = NULL; | 1381 uint8_t* full_snapshot = NULL; |
1378 uint8_t* script_snapshot = NULL; | 1382 uint8_t* script_snapshot = NULL; |
1379 | 1383 |
1380 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; | 1384 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; |
1381 FLAG_load_deferred_eagerly = true; | 1385 FLAG_load_deferred_eagerly = true; |
| 1386 bool saved_concurrent_sweep_mode = FLAG_concurrent_sweep; |
| 1387 FLAG_concurrent_sweep = false; |
1382 { | 1388 { |
1383 // Start an Isolate, and create a full snapshot of it. | 1389 // Start an Isolate, and create a full snapshot of it. |
1384 TestIsolateScope __test_isolate__; | 1390 TestIsolateScope __test_isolate__; |
1385 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1391 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
1386 | 1392 |
1387 // Write out the script snapshot. | 1393 // Write out the script snapshot. |
1388 result = Dart_CreateSnapshot(NULL, | 1394 result = Dart_CreateSnapshot(NULL, |
1389 &vm_isolate_snapshot_size, | 1395 &vm_isolate_snapshot_size, |
1390 &isolate_snapshot, | 1396 &isolate_snapshot, |
1391 &isolate_snapshot_size); | 1397 &isolate_snapshot_size); |
1392 EXPECT_VALID(result); | 1398 EXPECT_VALID(result); |
1393 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); | 1399 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); |
1394 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); | 1400 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); |
1395 Dart_ExitScope(); | 1401 Dart_ExitScope(); |
1396 } | 1402 } |
| 1403 FLAG_concurrent_sweep = saved_concurrent_sweep_mode; |
1397 | 1404 |
1398 { | 1405 { |
1399 // Create an Isolate using the full snapshot, load a script and create | 1406 // Create an Isolate using the full snapshot, load a script and create |
1400 // a script snapshot of the script. | 1407 // a script snapshot of the script. |
1401 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); | 1408 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); |
1402 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1409 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
1403 | 1410 |
1404 // Create a test library and Load up a test script in it. | 1411 // Create a test library and Load up a test script in it. |
1405 TestCase::LoadTestScript(kScriptChars, NULL); | 1412 TestCase::LoadTestScript(kScriptChars, NULL); |
1406 | 1413 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1462 uint8_t* isolate_snapshot = NULL; | 1469 uint8_t* isolate_snapshot = NULL; |
1463 intptr_t isolate_snapshot_size; | 1470 intptr_t isolate_snapshot_size; |
1464 uint8_t* full_snapshot = NULL; | 1471 uint8_t* full_snapshot = NULL; |
1465 uint8_t* script_snapshot = NULL; | 1472 uint8_t* script_snapshot = NULL; |
1466 | 1473 |
1467 // Force creation of snapshot in production mode. | 1474 // Force creation of snapshot in production mode. |
1468 bool saved_enable_type_checks_mode = FLAG_enable_type_checks; | 1475 bool saved_enable_type_checks_mode = FLAG_enable_type_checks; |
1469 FLAG_enable_type_checks = false; | 1476 FLAG_enable_type_checks = false; |
1470 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; | 1477 bool saved_load_deferred_eagerly_mode = FLAG_load_deferred_eagerly; |
1471 FLAG_load_deferred_eagerly = true; | 1478 FLAG_load_deferred_eagerly = true; |
1472 | 1479 bool saved_concurrent_sweep_mode = FLAG_concurrent_sweep; |
| 1480 FLAG_concurrent_sweep = false; |
1473 { | 1481 { |
1474 // Start an Isolate, and create a full snapshot of it. | 1482 // Start an Isolate, and create a full snapshot of it. |
1475 TestIsolateScope __test_isolate__; | 1483 TestIsolateScope __test_isolate__; |
1476 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1484 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
1477 | 1485 |
1478 // Write out the script snapshot. | 1486 // Write out the script snapshot. |
1479 result = Dart_CreateSnapshot(NULL, | 1487 result = Dart_CreateSnapshot(NULL, |
1480 &vm_isolate_snapshot_size, | 1488 &vm_isolate_snapshot_size, |
1481 &isolate_snapshot, | 1489 &isolate_snapshot, |
1482 &isolate_snapshot_size); | 1490 &isolate_snapshot_size); |
1483 EXPECT_VALID(result); | 1491 EXPECT_VALID(result); |
1484 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); | 1492 full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size)); |
1485 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); | 1493 memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size); |
1486 Dart_ExitScope(); | 1494 Dart_ExitScope(); |
1487 } | 1495 } |
| 1496 FLAG_concurrent_sweep = saved_concurrent_sweep_mode; |
1488 | 1497 |
1489 { | 1498 { |
1490 // Create an Isolate using the full snapshot, load a script and create | 1499 // Create an Isolate using the full snapshot, load a script and create |
1491 // a script snapshot of the script. | 1500 // a script snapshot of the script. |
1492 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); | 1501 TestCase::CreateTestIsolateFromSnapshot(full_snapshot); |
1493 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. | 1502 Dart_EnterScope(); // Start a Dart API scope for invoking API functions. |
1494 | 1503 |
1495 // Load the library. | 1504 // Load the library. |
1496 Dart_Handle import_lib = Dart_LoadLibrary(NewString("dart_import_lib"), | 1505 Dart_Handle import_lib = Dart_LoadLibrary(NewString("dart_import_lib"), |
1497 NewString(kLibScriptChars), | 1506 NewString(kLibScriptChars), |
(...skipping 1351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2849 StackZone zone(Isolate::Current()); | 2858 StackZone zone(Isolate::Current()); |
2850 uint8_t* buffer; | 2859 uint8_t* buffer; |
2851 MessageWriter writer(&buffer, &zone_allocator, true); | 2860 MessageWriter writer(&buffer, &zone_allocator, true); |
2852 writer.WriteInlinedObjectHeader(kOmittedObjectId); | 2861 writer.WriteInlinedObjectHeader(kOmittedObjectId); |
2853 // For performance, we'd like single-byte headers when ids are omitted. | 2862 // For performance, we'd like single-byte headers when ids are omitted. |
2854 // If this starts failing, consider renumbering the snapshot ids. | 2863 // If this starts failing, consider renumbering the snapshot ids. |
2855 EXPECT_EQ(1, writer.BytesWritten()); | 2864 EXPECT_EQ(1, writer.BytesWritten()); |
2856 } | 2865 } |
2857 | 2866 |
2858 } // namespace dart | 2867 } // namespace dart |
OLD | NEW |