| OLD | NEW |
| 1 // Copyright 2007-2010 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2010 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 // TestIsolate is used for testing isolate serialization. | 61 // TestIsolate is used for testing isolate serialization. |
| 62 class TestIsolate : public Isolate { | 62 class TestIsolate : public Isolate { |
| 63 public: | 63 public: |
| 64 static v8::Isolate* NewInitialized(bool enable_serializer) { | 64 static v8::Isolate* NewInitialized(bool enable_serializer) { |
| 65 i::Isolate* isolate = new TestIsolate(enable_serializer); | 65 i::Isolate* isolate = new TestIsolate(enable_serializer); |
| 66 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); | 66 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); |
| 67 v8::Isolate::Scope isolate_scope(v8_isolate); | 67 v8::Isolate::Scope isolate_scope(v8_isolate); |
| 68 isolate->Init(NULL); | 68 isolate->Init(NULL); |
| 69 return v8_isolate; | 69 return v8_isolate; |
| 70 } | 70 } |
| 71 explicit TestIsolate(bool enable_serializer) : Isolate(enable_serializer) {} | 71 explicit TestIsolate(bool enable_serializer) : Isolate(enable_serializer) { |
| 72 set_array_buffer_allocator(CcTest::array_buffer_allocator()); |
| 73 } |
| 72 }; | 74 }; |
| 73 | 75 |
| 74 | 76 |
| 75 void WritePayload(const Vector<const byte>& payload, const char* file_name) { | 77 void WritePayload(const Vector<const byte>& payload, const char* file_name) { |
| 76 FILE* file = v8::base::OS::FOpen(file_name, "wb"); | 78 FILE* file = v8::base::OS::FOpen(file_name, "wb"); |
| 77 if (file == NULL) { | 79 if (file == NULL) { |
| 78 PrintF("Unable to write to snapshot file \"%s\"\n", file_name); | 80 PrintF("Unable to write to snapshot file \"%s\"\n", file_name); |
| 79 exit(1); | 81 exit(1); |
| 80 } | 82 } |
| 81 size_t written = fwrite(payload.begin(), 1, payload.length(), file); | 83 size_t written = fwrite(payload.begin(), 1, payload.length(), file); |
| (...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 const char* source2 = | 664 const char* source2 = |
| 663 "function f() { return g() * 2; }" | 665 "function f() { return g() * 2; }" |
| 664 "function g() { return 43; }" | 666 "function g() { return 43; }" |
| 665 "/./.test('a')"; | 667 "/./.test('a')"; |
| 666 | 668 |
| 667 v8::StartupData data1 = v8::V8::CreateSnapshotDataBlob(source1); | 669 v8::StartupData data1 = v8::V8::CreateSnapshotDataBlob(source1); |
| 668 v8::StartupData data2 = v8::V8::CreateSnapshotDataBlob(source2); | 670 v8::StartupData data2 = v8::V8::CreateSnapshotDataBlob(source2); |
| 669 | 671 |
| 670 v8::Isolate::CreateParams params1; | 672 v8::Isolate::CreateParams params1; |
| 671 params1.snapshot_blob = &data1; | 673 params1.snapshot_blob = &data1; |
| 674 params1.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 675 |
| 672 v8::Isolate* isolate1 = v8::Isolate::New(params1); | 676 v8::Isolate* isolate1 = v8::Isolate::New(params1); |
| 673 { | 677 { |
| 674 v8::Isolate::Scope i_scope(isolate1); | 678 v8::Isolate::Scope i_scope(isolate1); |
| 675 v8::HandleScope h_scope(isolate1); | 679 v8::HandleScope h_scope(isolate1); |
| 676 v8::Local<v8::Context> context = v8::Context::New(isolate1); | 680 v8::Local<v8::Context> context = v8::Context::New(isolate1); |
| 677 delete[] data1.data; // We can dispose of the snapshot blob now. | 681 delete[] data1.data; // We can dispose of the snapshot blob now. |
| 678 v8::Context::Scope c_scope(context); | 682 v8::Context::Scope c_scope(context); |
| 679 CHECK_EQ(42, CompileRun("f()")->ToInt32(isolate1)->Int32Value()); | 683 CHECK_EQ(42, CompileRun("f()")->ToInt32(isolate1)->Int32Value()); |
| 680 CHECK(CompileRun("this.g")->IsUndefined()); | 684 CHECK(CompileRun("this.g")->IsUndefined()); |
| 681 } | 685 } |
| 682 isolate1->Dispose(); | 686 isolate1->Dispose(); |
| 683 | 687 |
| 684 v8::Isolate::CreateParams params2; | 688 v8::Isolate::CreateParams params2; |
| 685 params2.snapshot_blob = &data2; | 689 params2.snapshot_blob = &data2; |
| 690 params2.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 686 v8::Isolate* isolate2 = v8::Isolate::New(params2); | 691 v8::Isolate* isolate2 = v8::Isolate::New(params2); |
| 687 { | 692 { |
| 688 v8::Isolate::Scope i_scope(isolate2); | 693 v8::Isolate::Scope i_scope(isolate2); |
| 689 v8::HandleScope h_scope(isolate2); | 694 v8::HandleScope h_scope(isolate2); |
| 690 v8::Local<v8::Context> context = v8::Context::New(isolate2); | 695 v8::Local<v8::Context> context = v8::Context::New(isolate2); |
| 691 delete[] data2.data; // We can dispose of the snapshot blob now. | 696 delete[] data2.data; // We can dispose of the snapshot blob now. |
| 692 v8::Context::Scope c_scope(context); | 697 v8::Context::Scope c_scope(context); |
| 693 CHECK_EQ(86, CompileRun("f()")->ToInt32(isolate2)->Int32Value()); | 698 CHECK_EQ(86, CompileRun("f()")->ToInt32(isolate2)->Int32Value()); |
| 694 CHECK_EQ(43, CompileRun("g()")->ToInt32(isolate2)->Int32Value()); | 699 CHECK_EQ(43, CompileRun("g()")->ToInt32(isolate2)->Int32Value()); |
| 695 } | 700 } |
| 696 isolate2->Dispose(); | 701 isolate2->Dispose(); |
| 697 } | 702 } |
| 698 | 703 |
| 699 | 704 |
| 700 TEST(PerIsolateSnapshotBlobsWithLocker) { | 705 TEST(PerIsolateSnapshotBlobsWithLocker) { |
| 701 DisableTurbofan(); | 706 DisableTurbofan(); |
| 702 v8::Isolate* isolate0 = v8::Isolate::New(); | 707 v8::Isolate::CreateParams create_params; |
| 708 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 709 v8::Isolate* isolate0 = v8::Isolate::New(create_params); |
| 703 { | 710 { |
| 704 v8::Locker locker(isolate0); | 711 v8::Locker locker(isolate0); |
| 705 v8::Isolate::Scope i_scope(isolate0); | 712 v8::Isolate::Scope i_scope(isolate0); |
| 706 v8::HandleScope h_scope(isolate0); | 713 v8::HandleScope h_scope(isolate0); |
| 707 v8::Local<v8::Context> context = v8::Context::New(isolate0); | 714 v8::Local<v8::Context> context = v8::Context::New(isolate0); |
| 708 v8::Context::Scope c_scope(context); | 715 v8::Context::Scope c_scope(context); |
| 709 CHECK_EQ(1, CompileRun("Math.cos(0)")->ToInt32(isolate0)->Int32Value()); | 716 CHECK_EQ(1, CompileRun("Math.cos(0)")->ToInt32(isolate0)->Int32Value()); |
| 710 } | 717 } |
| 711 isolate0->Dispose(); | 718 isolate0->Dispose(); |
| 712 | 719 |
| 713 const char* source1 = "function f() { return 42; }"; | 720 const char* source1 = "function f() { return 42; }"; |
| 714 | 721 |
| 715 v8::StartupData data1 = v8::V8::CreateSnapshotDataBlob(source1); | 722 v8::StartupData data1 = v8::V8::CreateSnapshotDataBlob(source1); |
| 716 | 723 |
| 717 v8::Isolate::CreateParams params1; | 724 v8::Isolate::CreateParams params1; |
| 718 params1.snapshot_blob = &data1; | 725 params1.snapshot_blob = &data1; |
| 726 params1.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 719 v8::Isolate* isolate1 = v8::Isolate::New(params1); | 727 v8::Isolate* isolate1 = v8::Isolate::New(params1); |
| 720 { | 728 { |
| 721 v8::Locker locker(isolate1); | 729 v8::Locker locker(isolate1); |
| 722 v8::Isolate::Scope i_scope(isolate1); | 730 v8::Isolate::Scope i_scope(isolate1); |
| 723 v8::HandleScope h_scope(isolate1); | 731 v8::HandleScope h_scope(isolate1); |
| 724 v8::Local<v8::Context> context = v8::Context::New(isolate1); | 732 v8::Local<v8::Context> context = v8::Context::New(isolate1); |
| 725 delete[] data1.data; // We can dispose of the snapshot blob now. | 733 delete[] data1.data; // We can dispose of the snapshot blob now. |
| 726 v8::Context::Scope c_scope(context); | 734 v8::Context::Scope c_scope(context); |
| 727 CHECK_EQ(42, CompileRun("f()")->ToInt32(isolate1)->Int32Value()); | 735 CHECK_EQ(42, CompileRun("f()")->ToInt32(isolate1)->Int32Value()); |
| 728 } | 736 } |
| (...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1296 static void SerializerCodeEventListener(const v8::JitCodeEvent* event) { | 1304 static void SerializerCodeEventListener(const v8::JitCodeEvent* event) { |
| 1297 if (event->type == v8::JitCodeEvent::CODE_ADDED && | 1305 if (event->type == v8::JitCodeEvent::CODE_ADDED && |
| 1298 memcmp(event->name.str, "Script:~test", 12) == 0) { | 1306 memcmp(event->name.str, "Script:~test", 12) == 0) { |
| 1299 toplevel_test_code_event_found = true; | 1307 toplevel_test_code_event_found = true; |
| 1300 } | 1308 } |
| 1301 } | 1309 } |
| 1302 | 1310 |
| 1303 | 1311 |
| 1304 v8::ScriptCompiler::CachedData* ProduceCache(const char* source) { | 1312 v8::ScriptCompiler::CachedData* ProduceCache(const char* source) { |
| 1305 v8::ScriptCompiler::CachedData* cache; | 1313 v8::ScriptCompiler::CachedData* cache; |
| 1306 v8::Isolate* isolate1 = v8::Isolate::New(); | 1314 v8::Isolate::CreateParams create_params; |
| 1315 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 1316 v8::Isolate* isolate1 = v8::Isolate::New(create_params); |
| 1307 { | 1317 { |
| 1308 v8::Isolate::Scope iscope(isolate1); | 1318 v8::Isolate::Scope iscope(isolate1); |
| 1309 v8::HandleScope scope(isolate1); | 1319 v8::HandleScope scope(isolate1); |
| 1310 v8::Local<v8::Context> context = v8::Context::New(isolate1); | 1320 v8::Local<v8::Context> context = v8::Context::New(isolate1); |
| 1311 v8::Context::Scope context_scope(context); | 1321 v8::Context::Scope context_scope(context); |
| 1312 | 1322 |
| 1313 v8::Local<v8::String> source_str = v8_str(source); | 1323 v8::Local<v8::String> source_str = v8_str(source); |
| 1314 v8::ScriptOrigin origin(v8_str("test")); | 1324 v8::ScriptOrigin origin(v8_str("test")); |
| 1315 v8::ScriptCompiler::Source source(source_str, origin); | 1325 v8::ScriptCompiler::Source source(source_str, origin); |
| 1316 v8::Local<v8::UnboundScript> script = v8::ScriptCompiler::CompileUnbound( | 1326 v8::Local<v8::UnboundScript> script = v8::ScriptCompiler::CompileUnbound( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1330 return cache; | 1340 return cache; |
| 1331 } | 1341 } |
| 1332 | 1342 |
| 1333 | 1343 |
| 1334 TEST(SerializeToplevelIsolates) { | 1344 TEST(SerializeToplevelIsolates) { |
| 1335 FLAG_serialize_toplevel = true; | 1345 FLAG_serialize_toplevel = true; |
| 1336 | 1346 |
| 1337 const char* source = "function f() { return 'abc'; }; f() + 'def'"; | 1347 const char* source = "function f() { return 'abc'; }; f() + 'def'"; |
| 1338 v8::ScriptCompiler::CachedData* cache = ProduceCache(source); | 1348 v8::ScriptCompiler::CachedData* cache = ProduceCache(source); |
| 1339 | 1349 |
| 1340 v8::Isolate* isolate2 = v8::Isolate::New(); | 1350 v8::Isolate::CreateParams create_params; |
| 1351 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 1352 v8::Isolate* isolate2 = v8::Isolate::New(create_params); |
| 1341 isolate2->SetJitCodeEventHandler(v8::kJitCodeEventDefault, | 1353 isolate2->SetJitCodeEventHandler(v8::kJitCodeEventDefault, |
| 1342 SerializerCodeEventListener); | 1354 SerializerCodeEventListener); |
| 1343 toplevel_test_code_event_found = false; | 1355 toplevel_test_code_event_found = false; |
| 1344 { | 1356 { |
| 1345 v8::Isolate::Scope iscope(isolate2); | 1357 v8::Isolate::Scope iscope(isolate2); |
| 1346 v8::HandleScope scope(isolate2); | 1358 v8::HandleScope scope(isolate2); |
| 1347 v8::Local<v8::Context> context = v8::Context::New(isolate2); | 1359 v8::Local<v8::Context> context = v8::Context::New(isolate2); |
| 1348 v8::Context::Scope context_scope(context); | 1360 v8::Context::Scope context_scope(context); |
| 1349 | 1361 |
| 1350 v8::Local<v8::String> source_str = v8_str(source); | 1362 v8::Local<v8::String> source_str = v8_str(source); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1364 isolate2->Dispose(); | 1376 isolate2->Dispose(); |
| 1365 } | 1377 } |
| 1366 | 1378 |
| 1367 | 1379 |
| 1368 TEST(SerializeToplevelFlagChange) { | 1380 TEST(SerializeToplevelFlagChange) { |
| 1369 FLAG_serialize_toplevel = true; | 1381 FLAG_serialize_toplevel = true; |
| 1370 | 1382 |
| 1371 const char* source = "function f() { return 'abc'; }; f() + 'def'"; | 1383 const char* source = "function f() { return 'abc'; }; f() + 'def'"; |
| 1372 v8::ScriptCompiler::CachedData* cache = ProduceCache(source); | 1384 v8::ScriptCompiler::CachedData* cache = ProduceCache(source); |
| 1373 | 1385 |
| 1374 v8::Isolate* isolate2 = v8::Isolate::New(); | 1386 v8::Isolate::CreateParams create_params; |
| 1387 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 1388 v8::Isolate* isolate2 = v8::Isolate::New(create_params); |
| 1375 | 1389 |
| 1376 FLAG_allow_natives_syntax = true; // Flag change should trigger cache reject. | 1390 FLAG_allow_natives_syntax = true; // Flag change should trigger cache reject. |
| 1377 FlagList::EnforceFlagImplications(); | 1391 FlagList::EnforceFlagImplications(); |
| 1378 { | 1392 { |
| 1379 v8::Isolate::Scope iscope(isolate2); | 1393 v8::Isolate::Scope iscope(isolate2); |
| 1380 v8::HandleScope scope(isolate2); | 1394 v8::HandleScope scope(isolate2); |
| 1381 v8::Local<v8::Context> context = v8::Context::New(isolate2); | 1395 v8::Local<v8::Context> context = v8::Context::New(isolate2); |
| 1382 v8::Context::Scope context_scope(context); | 1396 v8::Context::Scope context_scope(context); |
| 1383 | 1397 |
| 1384 v8::Local<v8::String> source_str = v8_str(source); | 1398 v8::Local<v8::String> source_str = v8_str(source); |
| 1385 v8::ScriptOrigin origin(v8_str("test")); | 1399 v8::ScriptOrigin origin(v8_str("test")); |
| 1386 v8::ScriptCompiler::Source source(source_str, origin, cache); | 1400 v8::ScriptCompiler::Source source(source_str, origin, cache); |
| 1387 v8::ScriptCompiler::CompileUnbound(isolate2, &source, | 1401 v8::ScriptCompiler::CompileUnbound(isolate2, &source, |
| 1388 v8::ScriptCompiler::kConsumeCodeCache); | 1402 v8::ScriptCompiler::kConsumeCodeCache); |
| 1389 CHECK(cache->rejected); | 1403 CHECK(cache->rejected); |
| 1390 } | 1404 } |
| 1391 isolate2->Dispose(); | 1405 isolate2->Dispose(); |
| 1392 } | 1406 } |
| 1393 | 1407 |
| 1394 | 1408 |
| 1395 TEST(SerializeToplevelBitFlip) { | 1409 TEST(SerializeToplevelBitFlip) { |
| 1396 FLAG_serialize_toplevel = true; | 1410 FLAG_serialize_toplevel = true; |
| 1397 | 1411 |
| 1398 const char* source = "function f() { return 'abc'; }; f() + 'def'"; | 1412 const char* source = "function f() { return 'abc'; }; f() + 'def'"; |
| 1399 v8::ScriptCompiler::CachedData* cache = ProduceCache(source); | 1413 v8::ScriptCompiler::CachedData* cache = ProduceCache(source); |
| 1400 | 1414 |
| 1401 // Random bit flip. | 1415 // Random bit flip. |
| 1402 const_cast<uint8_t*>(cache->data)[337] ^= 0x40; | 1416 const_cast<uint8_t*>(cache->data)[337] ^= 0x40; |
| 1403 | 1417 |
| 1404 v8::Isolate* isolate2 = v8::Isolate::New(); | 1418 v8::Isolate::CreateParams create_params; |
| 1419 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 1420 v8::Isolate* isolate2 = v8::Isolate::New(create_params); |
| 1405 { | 1421 { |
| 1406 v8::Isolate::Scope iscope(isolate2); | 1422 v8::Isolate::Scope iscope(isolate2); |
| 1407 v8::HandleScope scope(isolate2); | 1423 v8::HandleScope scope(isolate2); |
| 1408 v8::Local<v8::Context> context = v8::Context::New(isolate2); | 1424 v8::Local<v8::Context> context = v8::Context::New(isolate2); |
| 1409 v8::Context::Scope context_scope(context); | 1425 v8::Context::Scope context_scope(context); |
| 1410 | 1426 |
| 1411 v8::Local<v8::String> source_str = v8_str(source); | 1427 v8::Local<v8::String> source_str = v8_str(source); |
| 1412 v8::ScriptOrigin origin(v8_str("test")); | 1428 v8::ScriptOrigin origin(v8_str("test")); |
| 1413 v8::ScriptCompiler::Source source(source_str, origin, cache); | 1429 v8::ScriptCompiler::Source source(source_str, origin, cache); |
| 1414 v8::ScriptCompiler::CompileUnbound(isolate2, &source, | 1430 v8::ScriptCompiler::CompileUnbound(isolate2, &source, |
| 1415 v8::ScriptCompiler::kConsumeCodeCache); | 1431 v8::ScriptCompiler::kConsumeCodeCache); |
| 1416 CHECK(cache->rejected); | 1432 CHECK(cache->rejected); |
| 1417 } | 1433 } |
| 1418 isolate2->Dispose(); | 1434 isolate2->Dispose(); |
| 1419 } | 1435 } |
| 1420 | 1436 |
| 1421 | 1437 |
| 1422 TEST(SerializeWithHarmonyScoping) { | 1438 TEST(SerializeWithHarmonyScoping) { |
| 1423 FLAG_serialize_toplevel = true; | 1439 FLAG_serialize_toplevel = true; |
| 1424 | 1440 |
| 1425 const char* source1 = "'use strict'; let x = 'X'"; | 1441 const char* source1 = "'use strict'; let x = 'X'"; |
| 1426 const char* source2 = "'use strict'; let y = 'Y'"; | 1442 const char* source2 = "'use strict'; let y = 'Y'"; |
| 1427 const char* source3 = "'use strict'; x + y"; | 1443 const char* source3 = "'use strict'; x + y"; |
| 1428 | 1444 |
| 1429 v8::ScriptCompiler::CachedData* cache; | 1445 v8::ScriptCompiler::CachedData* cache; |
| 1430 | 1446 |
| 1431 v8::Isolate* isolate1 = v8::Isolate::New(); | 1447 v8::Isolate::CreateParams create_params; |
| 1448 create_params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 1449 v8::Isolate* isolate1 = v8::Isolate::New(create_params); |
| 1432 { | 1450 { |
| 1433 v8::Isolate::Scope iscope(isolate1); | 1451 v8::Isolate::Scope iscope(isolate1); |
| 1434 v8::HandleScope scope(isolate1); | 1452 v8::HandleScope scope(isolate1); |
| 1435 v8::Local<v8::Context> context = v8::Context::New(isolate1); | 1453 v8::Local<v8::Context> context = v8::Context::New(isolate1); |
| 1436 v8::Context::Scope context_scope(context); | 1454 v8::Context::Scope context_scope(context); |
| 1437 | 1455 |
| 1438 CompileRun(source1); | 1456 CompileRun(source1); |
| 1439 CompileRun(source2); | 1457 CompileRun(source2); |
| 1440 | 1458 |
| 1441 v8::Local<v8::String> source_str = v8_str(source3); | 1459 v8::Local<v8::String> source_str = v8_str(source3); |
| 1442 v8::ScriptOrigin origin(v8_str("test")); | 1460 v8::ScriptOrigin origin(v8_str("test")); |
| 1443 v8::ScriptCompiler::Source source(source_str, origin); | 1461 v8::ScriptCompiler::Source source(source_str, origin); |
| 1444 v8::Local<v8::UnboundScript> script = v8::ScriptCompiler::CompileUnbound( | 1462 v8::Local<v8::UnboundScript> script = v8::ScriptCompiler::CompileUnbound( |
| 1445 isolate1, &source, v8::ScriptCompiler::kProduceCodeCache); | 1463 isolate1, &source, v8::ScriptCompiler::kProduceCodeCache); |
| 1446 const v8::ScriptCompiler::CachedData* data = source.GetCachedData(); | 1464 const v8::ScriptCompiler::CachedData* data = source.GetCachedData(); |
| 1447 CHECK(data); | 1465 CHECK(data); |
| 1448 // Persist cached data. | 1466 // Persist cached data. |
| 1449 uint8_t* buffer = NewArray<uint8_t>(data->length); | 1467 uint8_t* buffer = NewArray<uint8_t>(data->length); |
| 1450 MemCopy(buffer, data->data, data->length); | 1468 MemCopy(buffer, data->data, data->length); |
| 1451 cache = new v8::ScriptCompiler::CachedData( | 1469 cache = new v8::ScriptCompiler::CachedData( |
| 1452 buffer, data->length, v8::ScriptCompiler::CachedData::BufferOwned); | 1470 buffer, data->length, v8::ScriptCompiler::CachedData::BufferOwned); |
| 1453 | 1471 |
| 1454 v8::Local<v8::Value> result = script->BindToCurrentContext()->Run(); | 1472 v8::Local<v8::Value> result = script->BindToCurrentContext()->Run(); |
| 1455 CHECK(result->ToString(isolate1)->Equals(v8_str("XY"))); | 1473 CHECK(result->ToString(isolate1)->Equals(v8_str("XY"))); |
| 1456 } | 1474 } |
| 1457 isolate1->Dispose(); | 1475 isolate1->Dispose(); |
| 1458 | 1476 |
| 1459 v8::Isolate* isolate2 = v8::Isolate::New(); | 1477 v8::Isolate* isolate2 = v8::Isolate::New(create_params); |
| 1460 { | 1478 { |
| 1461 v8::Isolate::Scope iscope(isolate2); | 1479 v8::Isolate::Scope iscope(isolate2); |
| 1462 v8::HandleScope scope(isolate2); | 1480 v8::HandleScope scope(isolate2); |
| 1463 v8::Local<v8::Context> context = v8::Context::New(isolate2); | 1481 v8::Local<v8::Context> context = v8::Context::New(isolate2); |
| 1464 v8::Context::Scope context_scope(context); | 1482 v8::Context::Scope context_scope(context); |
| 1465 | 1483 |
| 1466 // Reverse order of prior running scripts. | 1484 // Reverse order of prior running scripts. |
| 1467 CompileRun(source2); | 1485 CompileRun(source2); |
| 1468 CompileRun(source1); | 1486 CompileRun(source1); |
| 1469 | 1487 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1512 " }" | 1530 " }" |
| 1513 " return { foo: foo };" | 1531 " return { foo: foo };" |
| 1514 "})(this, {}, undefined).foo;" | 1532 "})(this, {}, undefined).foo;" |
| 1515 "foo(1);"; | 1533 "foo(1);"; |
| 1516 | 1534 |
| 1517 v8::StartupData data = v8::V8::CreateSnapshotDataBlob(source); | 1535 v8::StartupData data = v8::V8::CreateSnapshotDataBlob(source); |
| 1518 CHECK(data.data); | 1536 CHECK(data.data); |
| 1519 | 1537 |
| 1520 v8::Isolate::CreateParams params; | 1538 v8::Isolate::CreateParams params; |
| 1521 params.snapshot_blob = &data; | 1539 params.snapshot_blob = &data; |
| 1540 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 1522 v8::Isolate* isolate = v8::Isolate::New(params); | 1541 v8::Isolate* isolate = v8::Isolate::New(params); |
| 1523 { | 1542 { |
| 1524 v8::Isolate::Scope i_scope(isolate); | 1543 v8::Isolate::Scope i_scope(isolate); |
| 1525 v8::HandleScope h_scope(isolate); | 1544 v8::HandleScope h_scope(isolate); |
| 1526 v8::Local<v8::Context> context = v8::Context::New(isolate); | 1545 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 1527 delete[] data.data; // We can dispose of the snapshot blob now. | 1546 delete[] data.data; // We can dispose of the snapshot blob now. |
| 1528 v8::Context::Scope c_scope(context); | 1547 v8::Context::Scope c_scope(context); |
| 1529 v8::Handle<v8::Function> foo = | 1548 v8::Handle<v8::Function> foo = |
| 1530 v8::Handle<v8::Function>::Cast(CompileRun("foo")); | 1549 v8::Handle<v8::Function>::Cast(CompileRun("foo")); |
| 1531 | 1550 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1550 isolate->Dispose(); | 1569 isolate->Dispose(); |
| 1551 } | 1570 } |
| 1552 | 1571 |
| 1553 | 1572 |
| 1554 TEST(SerializationMemoryStats) { | 1573 TEST(SerializationMemoryStats) { |
| 1555 FLAG_profile_deserialization = true; | 1574 FLAG_profile_deserialization = true; |
| 1556 FLAG_always_opt = false; | 1575 FLAG_always_opt = false; |
| 1557 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); | 1576 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); |
| 1558 delete[] blob.data; | 1577 delete[] blob.data; |
| 1559 } | 1578 } |
| OLD | NEW |