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

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

Issue 1805903002: [serializer] Add API to warm up startup snapshot with an additional script. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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
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 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 " a = a[1];" 764 " a = a[1];"
765 "}" 765 "}"
766 "sum"; 766 "sum";
767 v8::Maybe<int32_t> result = 767 v8::Maybe<int32_t> result =
768 CompileRun(test)->Int32Value(isolate->GetCurrentContext()); 768 CompileRun(test)->Int32Value(isolate->GetCurrentContext());
769 CHECK_EQ(9999 * 5000, result.FromJust()); 769 CHECK_EQ(9999 * 5000, result.FromJust());
770 } 770 }
771 isolate->Dispose(); 771 isolate->Dispose();
772 } 772 }
773 773
774 bool IsCompiled(const char* name) {
775 return i::Handle<i::JSFunction>::cast(
776 v8::Utils::OpenHandle(*CompileRun(name)))
777 ->shared()
778 ->is_compiled();
779 }
780
781 TEST(SnapshotDataBlobWithWarmup) {
782 DisableTurbofan();
783 const char* warmup = "Math.tan(1); Math.sin = 1;";
784
785 v8::StartupData cold = v8::V8::CreateSnapshotDataBlob();
786 v8::StartupData warm = v8::V8::WarmUpSnapshotDataBlob(cold, warmup);
787 delete[] cold.data;
788
789 v8::Isolate::CreateParams params;
790 params.snapshot_blob = &warm;
791 params.array_buffer_allocator = CcTest::array_buffer_allocator();
792
793 v8::Isolate* isolate = v8::Isolate::New(params);
794 {
795 v8::Isolate::Scope i_scope(isolate);
796 v8::HandleScope h_scope(isolate);
797 v8::Local<v8::Context> context = v8::Context::New(isolate);
798 delete[] warm.data;
799 v8::Context::Scope c_scope(context);
800 // Running the warmup script has effect on whether functions are
801 // pre-compiled, but does not pollute the context.
802 CHECK(IsCompiled("Math.tan"));
803 CHECK(!IsCompiled("Math.cos"));
804 CHECK(CompileRun("Math.sin")->IsFunction());
vogelheim 2016/03/16 14:52:36 Just for my understanding: You garble Math.sin in
Yang 2016/03/16 15:05:38 exactly.
805 }
806 isolate->Dispose();
807 }
808
809 TEST(CustomSnapshotDataBlobWithWarmup) {
810 DisableTurbofan();
811 const char* source =
812 "function f() { return Math.sin(1); }\n"
813 "function g() { return Math.cos(1); }\n"
814 "Math.tan(1);"
815 "var a = 5";
816 const char* warmup = "a = f()";
817
818 v8::StartupData cold = v8::V8::CreateSnapshotDataBlob(source);
819 v8::StartupData warm = v8::V8::WarmUpSnapshotDataBlob(cold, warmup);
820 delete[] cold.data;
821
822 v8::Isolate::CreateParams params;
823 params.snapshot_blob = &warm;
824 params.array_buffer_allocator = CcTest::array_buffer_allocator();
825
826 v8::Isolate* isolate = v8::Isolate::New(params);
827 {
828 v8::Isolate::Scope i_scope(isolate);
829 v8::HandleScope h_scope(isolate);
830 v8::Local<v8::Context> context = v8::Context::New(isolate);
831 delete[] warm.data;
832 v8::Context::Scope c_scope(context);
833 // Running the warmup script has effect on whether functions are
834 // pre-compiled, but does not pollute the context.
835 CHECK(IsCompiled("f"));
836 CHECK(IsCompiled("Math.sin"));
837 CHECK(!IsCompiled("g"));
838 CHECK(!IsCompiled("Math.cos"));
839 CHECK(!IsCompiled("Math.tan"));
840 CHECK_EQ(5, CompileRun("a")->Int32Value(context).FromJust());
841 }
842 isolate->Dispose();
843 }
774 844
775 TEST(TestThatAlwaysSucceeds) { 845 TEST(TestThatAlwaysSucceeds) {
776 } 846 }
777 847
778 848
779 TEST(TestThatAlwaysFails) { 849 TEST(TestThatAlwaysFails) {
780 bool ArtificialFailure = false; 850 bool ArtificialFailure = false;
781 CHECK(ArtificialFailure); 851 CHECK(ArtificialFailure);
782 } 852 }
783 853
(...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 delete script_data; 1791 delete script_data;
1722 } 1792 }
1723 1793
1724 1794
1725 TEST(SerializationMemoryStats) { 1795 TEST(SerializationMemoryStats) {
1726 FLAG_profile_deserialization = true; 1796 FLAG_profile_deserialization = true;
1727 FLAG_always_opt = false; 1797 FLAG_always_opt = false;
1728 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob(); 1798 v8::StartupData blob = v8::V8::CreateSnapshotDataBlob();
1729 delete[] blob.data; 1799 delete[] blob.data;
1730 } 1800 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698