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

Side by Side Diff: test/cctest/test-serialize.cc

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

Powered by Google App Engine
This is Rietveld 408576698