| 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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 #include "src/objects-inl.h" | 42 #include "src/objects-inl.h" |
| 43 #include "src/runtime/runtime.h" | 43 #include "src/runtime/runtime.h" |
| 44 #include "src/snapshot/code-serializer.h" | 44 #include "src/snapshot/code-serializer.h" |
| 45 #include "src/snapshot/deserializer.h" | 45 #include "src/snapshot/deserializer.h" |
| 46 #include "src/snapshot/natives.h" | 46 #include "src/snapshot/natives.h" |
| 47 #include "src/snapshot/partial-serializer.h" | 47 #include "src/snapshot/partial-serializer.h" |
| 48 #include "src/snapshot/snapshot.h" | 48 #include "src/snapshot/snapshot.h" |
| 49 #include "src/snapshot/startup-serializer.h" | 49 #include "src/snapshot/startup-serializer.h" |
| 50 #include "test/cctest/cctest.h" | 50 #include "test/cctest/cctest.h" |
| 51 #include "test/cctest/heap/heap-utils.h" | 51 #include "test/cctest/heap/heap-utils.h" |
| 52 #include "test/cctest/setup-isolate-for-tests.h" | |
| 53 | 52 |
| 54 using namespace v8::internal; | 53 using namespace v8::internal; |
| 55 | 54 |
| 56 void DisableAlwaysOpt() { | 55 void DisableAlwaysOpt() { |
| 57 // Isolates prepared for serialization do not optimize. The only exception is | 56 // Isolates prepared for serialization do not optimize. The only exception is |
| 58 // with the flag --always-opt. | 57 // with the flag --always-opt. |
| 59 FLAG_always_opt = false; | 58 FLAG_always_opt = false; |
| 60 } | 59 } |
| 61 | 60 |
| 62 | 61 |
| 63 // TestIsolate is used for testing isolate serialization. | 62 // TestIsolate is used for testing isolate serialization. |
| 64 class TestIsolate : public Isolate { | 63 class TestIsolate : public Isolate { |
| 65 public: | 64 public: |
| 66 static v8::Isolate* NewInitialized(bool enable_serializer) { | 65 static v8::Isolate* NewInitialized(bool enable_serializer) { |
| 67 i::Isolate* isolate = new TestIsolate(enable_serializer); | 66 i::Isolate* isolate = new TestIsolate(enable_serializer); |
| 68 isolate->setup_delegate_ = new SetupIsolateDelegateForTests(); | |
| 69 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); | 67 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); |
| 70 v8::Isolate::Scope isolate_scope(v8_isolate); | 68 v8::Isolate::Scope isolate_scope(v8_isolate); |
| 71 isolate->Init(NULL); | 69 isolate->Init(NULL); |
| 72 return v8_isolate; | 70 return v8_isolate; |
| 73 } | 71 } |
| 74 // Wraps v8::Isolate::New, but with a TestIsolate under the hood. | |
| 75 // Allows flexibility to bootstrap with or without snapshot even when | |
| 76 // the production Isolate class has one or the other behavior baked in. | |
| 77 static v8::Isolate* New(const v8::Isolate::CreateParams& params) { | |
| 78 i::Isolate* isolate = new TestIsolate(false); | |
| 79 isolate->setup_delegate_ = new SetupIsolateDelegateForTests(); | |
| 80 return v8::IsolateNewImpl(isolate, params); | |
| 81 } | |
| 82 explicit TestIsolate(bool enable_serializer) : Isolate(enable_serializer) { | 72 explicit TestIsolate(bool enable_serializer) : Isolate(enable_serializer) { |
| 83 set_array_buffer_allocator(CcTest::array_buffer_allocator()); | 73 set_array_buffer_allocator(CcTest::array_buffer_allocator()); |
| 84 } | 74 } |
| 85 void CreateSetupDelegateForTests() { | |
| 86 setup_delegate_ = new SetupIsolateDelegateForTests(); | |
| 87 } | |
| 88 }; | 75 }; |
| 89 | 76 |
| 90 static Vector<const byte> WritePayload(const Vector<const byte>& payload) { | 77 static Vector<const byte> WritePayload(const Vector<const byte>& payload) { |
| 91 int length = payload.length(); | 78 int length = payload.length(); |
| 92 byte* blob = NewArray<byte>(length); | 79 byte* blob = NewArray<byte>(length); |
| 93 memcpy(blob, payload.begin(), length); | 80 memcpy(blob, payload.begin(), length); |
| 94 return Vector<const byte>(const_cast<const byte*>(blob), length); | 81 return Vector<const byte>(const_cast<const byte*>(blob), length); |
| 95 } | 82 } |
| 96 | 83 |
| 97 static Vector<const byte> Serialize(v8::Isolate* isolate) { | 84 static Vector<const byte> Serialize(v8::Isolate* isolate) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 tail.length()); | 118 tail.length()); |
| 132 return Vector<const uint8_t>(const_cast<const uint8_t*>(source), | 119 return Vector<const uint8_t>(const_cast<const uint8_t*>(source), |
| 133 source_length); | 120 source_length); |
| 134 } | 121 } |
| 135 | 122 |
| 136 v8::Isolate* InitializeFromBlob(Vector<const byte> blob) { | 123 v8::Isolate* InitializeFromBlob(Vector<const byte> blob) { |
| 137 v8::Isolate* v8_isolate = NULL; | 124 v8::Isolate* v8_isolate = NULL; |
| 138 { | 125 { |
| 139 SnapshotData snapshot_data(blob); | 126 SnapshotData snapshot_data(blob); |
| 140 Deserializer deserializer(&snapshot_data); | 127 Deserializer deserializer(&snapshot_data); |
| 141 TestIsolate* isolate = new TestIsolate(false); | 128 Isolate* isolate = new TestIsolate(false); |
| 142 v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); | 129 v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); |
| 143 v8::Isolate::Scope isolate_scope(v8_isolate); | 130 v8::Isolate::Scope isolate_scope(v8_isolate); |
| 144 isolate->CreateSetupDelegateForTests(); | |
| 145 isolate->Init(&deserializer); | 131 isolate->Init(&deserializer); |
| 146 } | 132 } |
| 147 return v8_isolate; | 133 return v8_isolate; |
| 148 } | 134 } |
| 149 | 135 |
| 150 static v8::Isolate* Deserialize(Vector<const byte> blob) { | 136 static v8::Isolate* Deserialize(Vector<const byte> blob) { |
| 151 v8::Isolate* isolate = InitializeFromBlob(blob); | 137 v8::Isolate* isolate = InitializeFromBlob(blob); |
| 152 CHECK(isolate); | 138 CHECK(isolate); |
| 153 return isolate; | 139 return isolate; |
| 154 } | 140 } |
| (...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 TEST(CustomSnapshotDataBlob1) { | 626 TEST(CustomSnapshotDataBlob1) { |
| 641 DisableAlwaysOpt(); | 627 DisableAlwaysOpt(); |
| 642 const char* source1 = "function f() { return 42; }"; | 628 const char* source1 = "function f() { return 42; }"; |
| 643 | 629 |
| 644 v8::StartupData data1 = v8::V8::CreateSnapshotDataBlob(source1); | 630 v8::StartupData data1 = v8::V8::CreateSnapshotDataBlob(source1); |
| 645 | 631 |
| 646 v8::Isolate::CreateParams params1; | 632 v8::Isolate::CreateParams params1; |
| 647 params1.snapshot_blob = &data1; | 633 params1.snapshot_blob = &data1; |
| 648 params1.array_buffer_allocator = CcTest::array_buffer_allocator(); | 634 params1.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 649 | 635 |
| 650 // Test-appropriate equivalent of v8::Isolate::New. | 636 v8::Isolate* isolate1 = v8::Isolate::New(params1); |
| 651 v8::Isolate* isolate1 = TestIsolate::New(params1); | |
| 652 { | 637 { |
| 653 v8::Isolate::Scope i_scope(isolate1); | 638 v8::Isolate::Scope i_scope(isolate1); |
| 654 v8::HandleScope h_scope(isolate1); | 639 v8::HandleScope h_scope(isolate1); |
| 655 v8::Local<v8::Context> context = v8::Context::New(isolate1); | 640 v8::Local<v8::Context> context = v8::Context::New(isolate1); |
| 656 delete[] data1.data; // We can dispose of the snapshot blob now. | 641 delete[] data1.data; // We can dispose of the snapshot blob now. |
| 657 v8::Context::Scope c_scope(context); | 642 v8::Context::Scope c_scope(context); |
| 658 v8::Maybe<int32_t> result = | 643 v8::Maybe<int32_t> result = |
| 659 CompileRun("f()")->Int32Value(isolate1->GetCurrentContext()); | 644 CompileRun("f()")->Int32Value(isolate1->GetCurrentContext()); |
| 660 CHECK_EQ(42, result.FromJust()); | 645 CHECK_EQ(42, result.FromJust()); |
| 661 CHECK(CompileRun("this.g")->IsUndefined()); | 646 CHECK(CompileRun("this.g")->IsUndefined()); |
| 662 } | 647 } |
| 663 isolate1->Dispose(); | 648 isolate1->Dispose(); |
| 664 } | 649 } |
| 665 | 650 |
| 666 TEST(CustomSnapshotDataBlob2) { | 651 TEST(CustomSnapshotDataBlob2) { |
| 667 DisableAlwaysOpt(); | 652 DisableAlwaysOpt(); |
| 668 const char* source2 = | 653 const char* source2 = |
| 669 "function f() { return g() * 2; }" | 654 "function f() { return g() * 2; }" |
| 670 "function g() { return 43; }" | 655 "function g() { return 43; }" |
| 671 "/./.test('a')"; | 656 "/./.test('a')"; |
| 672 | 657 |
| 673 v8::StartupData data2 = v8::V8::CreateSnapshotDataBlob(source2); | 658 v8::StartupData data2 = v8::V8::CreateSnapshotDataBlob(source2); |
| 674 | 659 |
| 675 v8::Isolate::CreateParams params2; | 660 v8::Isolate::CreateParams params2; |
| 676 params2.snapshot_blob = &data2; | 661 params2.snapshot_blob = &data2; |
| 677 params2.array_buffer_allocator = CcTest::array_buffer_allocator(); | 662 params2.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 678 // Test-appropriate equivalent of v8::Isolate::New. | 663 v8::Isolate* isolate2 = v8::Isolate::New(params2); |
| 679 v8::Isolate* isolate2 = TestIsolate::New(params2); | |
| 680 { | 664 { |
| 681 v8::Isolate::Scope i_scope(isolate2); | 665 v8::Isolate::Scope i_scope(isolate2); |
| 682 v8::HandleScope h_scope(isolate2); | 666 v8::HandleScope h_scope(isolate2); |
| 683 v8::Local<v8::Context> context = v8::Context::New(isolate2); | 667 v8::Local<v8::Context> context = v8::Context::New(isolate2); |
| 684 delete[] data2.data; // We can dispose of the snapshot blob now. | 668 delete[] data2.data; // We can dispose of the snapshot blob now. |
| 685 v8::Context::Scope c_scope(context); | 669 v8::Context::Scope c_scope(context); |
| 686 v8::Maybe<int32_t> result = | 670 v8::Maybe<int32_t> result = |
| 687 CompileRun("f()")->Int32Value(isolate2->GetCurrentContext()); | 671 CompileRun("f()")->Int32Value(isolate2->GetCurrentContext()); |
| 688 CHECK_EQ(86, result.FromJust()); | 672 CHECK_EQ(86, result.FromJust()); |
| 689 result = CompileRun("g()")->Int32Value(isolate2->GetCurrentContext()); | 673 result = CompileRun("g()")->Int32Value(isolate2->GetCurrentContext()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 712 "})();\n"; | 696 "})();\n"; |
| 713 | 697 |
| 714 const char* source2 = "o.a(42)"; | 698 const char* source2 = "o.a(42)"; |
| 715 | 699 |
| 716 v8::StartupData data = v8::V8::CreateSnapshotDataBlob(source1); | 700 v8::StartupData data = v8::V8::CreateSnapshotDataBlob(source1); |
| 717 | 701 |
| 718 v8::Isolate::CreateParams params; | 702 v8::Isolate::CreateParams params; |
| 719 params.snapshot_blob = &data; | 703 params.snapshot_blob = &data; |
| 720 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 704 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 721 | 705 |
| 722 // Test-appropriate equivalent of v8::Isolate::New. | 706 v8::Isolate* isolate = v8::Isolate::New(params); |
| 723 v8::Isolate* isolate = TestIsolate::New(params); | |
| 724 { | 707 { |
| 725 v8::Isolate::Scope i_scope(isolate); | 708 v8::Isolate::Scope i_scope(isolate); |
| 726 v8::HandleScope h_scope(isolate); | 709 v8::HandleScope h_scope(isolate); |
| 727 | 710 |
| 728 v8::Local<v8::ObjectTemplate> global = v8::ObjectTemplate::New(isolate); | 711 v8::Local<v8::ObjectTemplate> global = v8::ObjectTemplate::New(isolate); |
| 729 v8::Local<v8::ObjectTemplate> property = v8::ObjectTemplate::New(isolate); | 712 v8::Local<v8::ObjectTemplate> property = v8::ObjectTemplate::New(isolate); |
| 730 v8::Local<v8::FunctionTemplate> function = | 713 v8::Local<v8::FunctionTemplate> function = |
| 731 v8::FunctionTemplate::New(isolate, SerializationFunctionTemplate); | 714 v8::FunctionTemplate::New(isolate, SerializationFunctionTemplate); |
| 732 property->Set(isolate, "bar", function); | 715 property->Set(isolate, "bar", function); |
| 733 global->Set(isolate, "foo", property); | 716 global->Set(isolate, "foo", property); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 760 } | 743 } |
| 761 isolate0->Dispose(); | 744 isolate0->Dispose(); |
| 762 | 745 |
| 763 const char* source1 = "function f() { return 42; }"; | 746 const char* source1 = "function f() { return 42; }"; |
| 764 | 747 |
| 765 v8::StartupData data1 = v8::V8::CreateSnapshotDataBlob(source1); | 748 v8::StartupData data1 = v8::V8::CreateSnapshotDataBlob(source1); |
| 766 | 749 |
| 767 v8::Isolate::CreateParams params1; | 750 v8::Isolate::CreateParams params1; |
| 768 params1.snapshot_blob = &data1; | 751 params1.snapshot_blob = &data1; |
| 769 params1.array_buffer_allocator = CcTest::array_buffer_allocator(); | 752 params1.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 770 // Test-appropriate equivalent of v8::Isolate::New. | 753 v8::Isolate* isolate1 = v8::Isolate::New(params1); |
| 771 v8::Isolate* isolate1 = TestIsolate::New(params1); | |
| 772 { | 754 { |
| 773 v8::Locker locker(isolate1); | 755 v8::Locker locker(isolate1); |
| 774 v8::Isolate::Scope i_scope(isolate1); | 756 v8::Isolate::Scope i_scope(isolate1); |
| 775 v8::HandleScope h_scope(isolate1); | 757 v8::HandleScope h_scope(isolate1); |
| 776 v8::Local<v8::Context> context = v8::Context::New(isolate1); | 758 v8::Local<v8::Context> context = v8::Context::New(isolate1); |
| 777 delete[] data1.data; // We can dispose of the snapshot blob now. | 759 delete[] data1.data; // We can dispose of the snapshot blob now. |
| 778 v8::Context::Scope c_scope(context); | 760 v8::Context::Scope c_scope(context); |
| 779 v8::Maybe<int32_t> result = CompileRun("f()")->Int32Value(context); | 761 v8::Maybe<int32_t> result = CompileRun("f()")->Int32Value(context); |
| 780 CHECK_EQ(42, result.FromJust()); | 762 CHECK_EQ(42, result.FromJust()); |
| 781 } | 763 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 793 " b.push(c);" | 775 " b.push(c);" |
| 794 " b = c;" | 776 " b = c;" |
| 795 "}"; | 777 "}"; |
| 796 | 778 |
| 797 v8::StartupData data = v8::V8::CreateSnapshotDataBlob(source); | 779 v8::StartupData data = v8::V8::CreateSnapshotDataBlob(source); |
| 798 | 780 |
| 799 v8::Isolate::CreateParams params; | 781 v8::Isolate::CreateParams params; |
| 800 params.snapshot_blob = &data; | 782 params.snapshot_blob = &data; |
| 801 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 783 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 802 | 784 |
| 803 // Test-appropriate equivalent of v8::Isolate::New. | 785 v8::Isolate* isolate = v8::Isolate::New(params); |
| 804 v8::Isolate* isolate = TestIsolate::New(params); | |
| 805 { | 786 { |
| 806 v8::Isolate::Scope i_scope(isolate); | 787 v8::Isolate::Scope i_scope(isolate); |
| 807 v8::HandleScope h_scope(isolate); | 788 v8::HandleScope h_scope(isolate); |
| 808 v8::Local<v8::Context> context = v8::Context::New(isolate); | 789 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 809 delete[] data.data; // We can dispose of the snapshot blob now. | 790 delete[] data.data; // We can dispose of the snapshot blob now. |
| 810 v8::Context::Scope c_scope(context); | 791 v8::Context::Scope c_scope(context); |
| 811 const char* test = | 792 const char* test = |
| 812 "var sum = 0;" | 793 "var sum = 0;" |
| 813 "while (a) {" | 794 "while (a) {" |
| 814 " sum += a[0];" | 795 " sum += a[0];" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 834 const char* warmup = "Math.abs(1); Math.random = 1;"; | 815 const char* warmup = "Math.abs(1); Math.random = 1;"; |
| 835 | 816 |
| 836 v8::StartupData cold = v8::V8::CreateSnapshotDataBlob(); | 817 v8::StartupData cold = v8::V8::CreateSnapshotDataBlob(); |
| 837 v8::StartupData warm = v8::V8::WarmUpSnapshotDataBlob(cold, warmup); | 818 v8::StartupData warm = v8::V8::WarmUpSnapshotDataBlob(cold, warmup); |
| 838 delete[] cold.data; | 819 delete[] cold.data; |
| 839 | 820 |
| 840 v8::Isolate::CreateParams params; | 821 v8::Isolate::CreateParams params; |
| 841 params.snapshot_blob = &warm; | 822 params.snapshot_blob = &warm; |
| 842 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 823 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 843 | 824 |
| 844 // Test-appropriate equivalent of v8::Isolate::New. | 825 v8::Isolate* isolate = v8::Isolate::New(params); |
| 845 v8::Isolate* isolate = TestIsolate::New(params); | |
| 846 { | 826 { |
| 847 v8::Isolate::Scope i_scope(isolate); | 827 v8::Isolate::Scope i_scope(isolate); |
| 848 v8::HandleScope h_scope(isolate); | 828 v8::HandleScope h_scope(isolate); |
| 849 v8::Local<v8::Context> context = v8::Context::New(isolate); | 829 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 850 delete[] warm.data; | 830 delete[] warm.data; |
| 851 v8::Context::Scope c_scope(context); | 831 v8::Context::Scope c_scope(context); |
| 852 // Running the warmup script has effect on whether functions are | 832 // Running the warmup script has effect on whether functions are |
| 853 // pre-compiled, but does not pollute the context. | 833 // pre-compiled, but does not pollute the context. |
| 854 CHECK(IsCompiled("Math.abs")); | 834 CHECK(IsCompiled("Math.abs")); |
| 855 CHECK(!IsCompiled("String.raw")); | 835 CHECK(!IsCompiled("String.raw")); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 868 const char* warmup = "a = f()"; | 848 const char* warmup = "a = f()"; |
| 869 | 849 |
| 870 v8::StartupData cold = v8::V8::CreateSnapshotDataBlob(source); | 850 v8::StartupData cold = v8::V8::CreateSnapshotDataBlob(source); |
| 871 v8::StartupData warm = v8::V8::WarmUpSnapshotDataBlob(cold, warmup); | 851 v8::StartupData warm = v8::V8::WarmUpSnapshotDataBlob(cold, warmup); |
| 872 delete[] cold.data; | 852 delete[] cold.data; |
| 873 | 853 |
| 874 v8::Isolate::CreateParams params; | 854 v8::Isolate::CreateParams params; |
| 875 params.snapshot_blob = &warm; | 855 params.snapshot_blob = &warm; |
| 876 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 856 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 877 | 857 |
| 878 // Test-appropriate equivalent of v8::Isolate::New. | 858 v8::Isolate* isolate = v8::Isolate::New(params); |
| 879 v8::Isolate* isolate = TestIsolate::New(params); | |
| 880 { | 859 { |
| 881 v8::Isolate::Scope i_scope(isolate); | 860 v8::Isolate::Scope i_scope(isolate); |
| 882 v8::HandleScope h_scope(isolate); | 861 v8::HandleScope h_scope(isolate); |
| 883 v8::Local<v8::Context> context = v8::Context::New(isolate); | 862 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 884 delete[] warm.data; | 863 delete[] warm.data; |
| 885 v8::Context::Scope c_scope(context); | 864 v8::Context::Scope c_scope(context); |
| 886 // Running the warmup script has effect on whether functions are | 865 // Running the warmup script has effect on whether functions are |
| 887 // pre-compiled, but does not pollute the context. | 866 // pre-compiled, but does not pollute the context. |
| 888 CHECK(IsCompiled("f")); | 867 CHECK(IsCompiled("f")); |
| 889 CHECK(IsCompiled("Math.abs")); | 868 CHECK(IsCompiled("Math.abs")); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 905 STATIC_CHAR_VECTOR("a.push(function() {return 7});"), | 884 STATIC_CHAR_VECTOR("a.push(function() {return 7});"), |
| 906 STATIC_CHAR_VECTOR("\0"), 10000); | 885 STATIC_CHAR_VECTOR("\0"), 10000); |
| 907 | 886 |
| 908 v8::StartupData data = v8::V8::CreateSnapshotDataBlob( | 887 v8::StartupData data = v8::V8::CreateSnapshotDataBlob( |
| 909 reinterpret_cast<const char*>(source.start())); | 888 reinterpret_cast<const char*>(source.start())); |
| 910 | 889 |
| 911 v8::Isolate::CreateParams params; | 890 v8::Isolate::CreateParams params; |
| 912 params.snapshot_blob = &data; | 891 params.snapshot_blob = &data; |
| 913 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 892 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 914 | 893 |
| 915 // Test-appropriate equivalent of v8::Isolate::New. | 894 v8::Isolate* isolate = v8::Isolate::New(params); |
| 916 v8::Isolate* isolate = TestIsolate::New(params); | |
| 917 { | 895 { |
| 918 v8::Isolate::Scope i_scope(isolate); | 896 v8::Isolate::Scope i_scope(isolate); |
| 919 v8::HandleScope h_scope(isolate); | 897 v8::HandleScope h_scope(isolate); |
| 920 v8::Local<v8::Context> context = v8::Context::New(isolate); | 898 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 921 delete[] data.data; // We can dispose of the snapshot blob now. | 899 delete[] data.data; // We can dispose of the snapshot blob now. |
| 922 v8::Context::Scope c_scope(context); | 900 v8::Context::Scope c_scope(context); |
| 923 CHECK_EQ(7, CompileRun("a[0]()")->Int32Value(context).FromJust()); | 901 CHECK_EQ(7, CompileRun("a[0]()")->Int32Value(context).FromJust()); |
| 924 } | 902 } |
| 925 isolate->Dispose(); | 903 isolate->Dispose(); |
| 926 source.Dispose(); | 904 source.Dispose(); |
| (...skipping 994 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1921 v8::Local<v8::Context> context = v8::Context::New(isolate); | 1899 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 1922 CHECK_EQ(1u, creator.AddContext(context)); | 1900 CHECK_EQ(1u, creator.AddContext(context)); |
| 1923 } | 1901 } |
| 1924 blob = | 1902 blob = |
| 1925 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); | 1903 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); |
| 1926 } | 1904 } |
| 1927 | 1905 |
| 1928 v8::Isolate::CreateParams params; | 1906 v8::Isolate::CreateParams params; |
| 1929 params.snapshot_blob = &blob; | 1907 params.snapshot_blob = &blob; |
| 1930 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 1908 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 1931 // Test-appropriate equivalent of v8::Isolate::New. | 1909 v8::Isolate* isolate = v8::Isolate::New(params); |
| 1932 v8::Isolate* isolate = TestIsolate::New(params); | |
| 1933 { | 1910 { |
| 1934 v8::Isolate::Scope isolate_scope(isolate); | 1911 v8::Isolate::Scope isolate_scope(isolate); |
| 1935 { | 1912 { |
| 1936 v8::HandleScope handle_scope(isolate); | 1913 v8::HandleScope handle_scope(isolate); |
| 1937 v8::Local<v8::Context> context = v8::Context::New(isolate); | 1914 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 1938 v8::Context::Scope context_scope(context); | 1915 v8::Context::Scope context_scope(context); |
| 1939 ExpectInt32("f()", 1); | 1916 ExpectInt32("f()", 1); |
| 1940 } | 1917 } |
| 1941 { | 1918 { |
| 1942 v8::HandleScope handle_scope(isolate); | 1919 v8::HandleScope handle_scope(isolate); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2044 blob = | 2021 blob = |
| 2045 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); | 2022 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); |
| 2046 } | 2023 } |
| 2047 | 2024 |
| 2048 // Deserialize with the original external reference. | 2025 // Deserialize with the original external reference. |
| 2049 { | 2026 { |
| 2050 v8::Isolate::CreateParams params; | 2027 v8::Isolate::CreateParams params; |
| 2051 params.snapshot_blob = &blob; | 2028 params.snapshot_blob = &blob; |
| 2052 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 2029 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 2053 params.external_references = original_external_references; | 2030 params.external_references = original_external_references; |
| 2054 // Test-appropriate equivalent of v8::Isolate::New. | 2031 v8::Isolate* isolate = v8::Isolate::New(params); |
| 2055 v8::Isolate* isolate = TestIsolate::New(params); | |
| 2056 { | 2032 { |
| 2057 v8::Isolate::Scope isolate_scope(isolate); | 2033 v8::Isolate::Scope isolate_scope(isolate); |
| 2058 v8::HandleScope handle_scope(isolate); | 2034 v8::HandleScope handle_scope(isolate); |
| 2059 v8::Local<v8::Context> context = v8::Context::New(isolate); | 2035 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 2060 v8::Context::Scope context_scope(context); | 2036 v8::Context::Scope context_scope(context); |
| 2061 ExpectInt32("f()", 42); | 2037 ExpectInt32("f()", 42); |
| 2062 } | 2038 } |
| 2063 isolate->Dispose(); | 2039 isolate->Dispose(); |
| 2064 } | 2040 } |
| 2065 | 2041 |
| 2066 // Deserialize with the some other external reference. | 2042 // Deserialize with the some other external reference. |
| 2067 { | 2043 { |
| 2068 v8::Isolate::CreateParams params; | 2044 v8::Isolate::CreateParams params; |
| 2069 params.snapshot_blob = &blob; | 2045 params.snapshot_blob = &blob; |
| 2070 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 2046 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 2071 params.external_references = replaced_external_references; | 2047 params.external_references = replaced_external_references; |
| 2072 // Test-appropriate equivalent of v8::Isolate::New. | 2048 v8::Isolate* isolate = v8::Isolate::New(params); |
| 2073 v8::Isolate* isolate = TestIsolate::New(params); | |
| 2074 { | 2049 { |
| 2075 v8::Isolate::Scope isolate_scope(isolate); | 2050 v8::Isolate::Scope isolate_scope(isolate); |
| 2076 v8::HandleScope handle_scope(isolate); | 2051 v8::HandleScope handle_scope(isolate); |
| 2077 v8::Local<v8::Context> context = v8::Context::New(isolate); | 2052 v8::Local<v8::Context> context = v8::Context::New(isolate); |
| 2078 v8::Context::Scope context_scope(context); | 2053 v8::Context::Scope context_scope(context); |
| 2079 ExpectInt32("f()", 1337); | 2054 ExpectInt32("f()", 1337); |
| 2080 } | 2055 } |
| 2081 isolate->Dispose(); | 2056 isolate->Dispose(); |
| 2082 } | 2057 } |
| 2083 delete[] blob.data; | 2058 delete[] blob.data; |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2196 delete a1; | 2171 delete a1; |
| 2197 delete b0; | 2172 delete b0; |
| 2198 delete c0; | 2173 delete c0; |
| 2199 } | 2174 } |
| 2200 | 2175 |
| 2201 { | 2176 { |
| 2202 v8::Isolate::CreateParams params; | 2177 v8::Isolate::CreateParams params; |
| 2203 params.snapshot_blob = &blob; | 2178 params.snapshot_blob = &blob; |
| 2204 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 2179 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 2205 params.external_references = original_external_references; | 2180 params.external_references = original_external_references; |
| 2206 // Test-appropriate equivalent of v8::Isolate::New. | 2181 v8::Isolate* isolate = v8::Isolate::New(params); |
| 2207 v8::Isolate* isolate = TestIsolate::New(params); | |
| 2208 { | 2182 { |
| 2209 v8::Isolate::Scope isolate_scope(isolate); | 2183 v8::Isolate::Scope isolate_scope(isolate); |
| 2210 { | 2184 { |
| 2211 // Create a new context without a new object template. | 2185 // Create a new context without a new object template. |
| 2212 v8::HandleScope handle_scope(isolate); | 2186 v8::HandleScope handle_scope(isolate); |
| 2213 v8::Local<v8::Context> context = | 2187 v8::Local<v8::Context> context = |
| 2214 v8::Context::FromSnapshot( | 2188 v8::Context::FromSnapshot( |
| 2215 isolate, 0, | 2189 isolate, 0, |
| 2216 v8::DeserializeInternalFieldsCallback( | 2190 v8::DeserializeInternalFieldsCallback( |
| 2217 DeserializeInternalFields, reinterpret_cast<void*>(2017))) | 2191 DeserializeInternalFields, reinterpret_cast<void*>(2017))) |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2374 } | 2348 } |
| 2375 blob = | 2349 blob = |
| 2376 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); | 2350 creator.CreateBlob(v8::SnapshotCreator::FunctionCodeHandling::kClear); |
| 2377 } | 2351 } |
| 2378 | 2352 |
| 2379 { | 2353 { |
| 2380 v8::Isolate::CreateParams params; | 2354 v8::Isolate::CreateParams params; |
| 2381 params.snapshot_blob = &blob; | 2355 params.snapshot_blob = &blob; |
| 2382 params.array_buffer_allocator = CcTest::array_buffer_allocator(); | 2356 params.array_buffer_allocator = CcTest::array_buffer_allocator(); |
| 2383 params.external_references = original_external_references; | 2357 params.external_references = original_external_references; |
| 2384 // Test-appropriate equivalent of v8::Isolate::New. | 2358 v8::Isolate* isolate = v8::Isolate::New(params); |
| 2385 v8::Isolate* isolate = TestIsolate::New(params); | |
| 2386 { | 2359 { |
| 2387 v8::Isolate::Scope isolate_scope(isolate); | 2360 v8::Isolate::Scope isolate_scope(isolate); |
| 2388 // We can introduce new extensions, which could override the already | 2361 // We can introduce new extensions, which could override the already |
| 2389 // snapshotted extension. | 2362 // snapshotted extension. |
| 2390 v8::Extension* extension = new v8::Extension("new extension", | 2363 v8::Extension* extension = new v8::Extension("new extension", |
| 2391 "function i() { return 24; }" | 2364 "function i() { return 24; }" |
| 2392 "function j() { return 25; }" | 2365 "function j() { return 25; }" |
| 2393 "if (o.p == 7) o.p++;"); | 2366 "if (o.p == 7) o.p++;"); |
| 2394 extension->set_auto_enable(true); | 2367 extension->set_auto_enable(true); |
| 2395 v8::RegisterExtension(extension); | 2368 v8::RegisterExtension(extension); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2486 } | 2459 } |
| 2487 delete[] blob.data; | 2460 delete[] blob.data; |
| 2488 } | 2461 } |
| 2489 | 2462 |
| 2490 TEST(SerializationMemoryStats) { | 2463 TEST(SerializationMemoryStats) { |
| 2491 FLAG_profile_deserialization = true; | 2464 FLAG_profile_deserialization = true; |
| 2492 FLAG_always_opt = false; | 2465 FLAG_always_opt = false; |
| 2493 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); | 2466 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); |
| 2494 delete[] blob.data; | 2467 delete[] blob.data; |
| 2495 } | 2468 } |
| OLD | NEW |