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

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

Issue 882443004: Revert of Only use FreeSpace objects in the free list. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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/test-heap.cc ('k') | test/cctest/test-spaces.cc » ('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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 v8::HandleScope scope(isolate); 149 v8::HandleScope scope(isolate);
150 v8::Context::New(isolate); 150 v8::Context::New(isolate);
151 } 151 }
152 152
153 Isolate* internal_isolate = reinterpret_cast<Isolate*>(isolate); 153 Isolate* internal_isolate = reinterpret_cast<Isolate*>(isolate);
154 internal_isolate->heap()->CollectAllAvailableGarbage("serialize"); 154 internal_isolate->heap()->CollectAllAvailableGarbage("serialize");
155 WriteToFile(internal_isolate, FLAG_testing_serialization_file); 155 WriteToFile(internal_isolate, FLAG_testing_serialization_file);
156 } 156 }
157 157
158 158
159 Vector<const uint8_t> ConstructSource(Vector<const uint8_t> head,
160 Vector<const uint8_t> body,
161 Vector<const uint8_t> tail, int repeats) {
162 int source_length = head.length() + body.length() * repeats + tail.length();
163 uint8_t* source = NewArray<uint8_t>(static_cast<size_t>(source_length));
164 CopyChars(source, head.start(), head.length());
165 for (int i = 0; i < repeats; i++) {
166 CopyChars(source + head.length() + i * body.length(), body.start(),
167 body.length());
168 }
169 CopyChars(source + head.length() + repeats * body.length(), tail.start(),
170 tail.length());
171 return Vector<const uint8_t>(const_cast<const uint8_t*>(source),
172 source_length);
173 }
174
175
176 // Test that the whole heap can be serialized. 159 // Test that the whole heap can be serialized.
177 UNINITIALIZED_TEST(Serialize) { 160 UNINITIALIZED_TEST(Serialize) {
178 if (!Snapshot::HaveASnapshotToStartFrom()) { 161 if (!Snapshot::HaveASnapshotToStartFrom()) {
179 v8::Isolate::CreateParams params; 162 v8::Isolate::CreateParams params;
180 params.enable_serializer = true; 163 params.enable_serializer = true;
181 v8::Isolate* isolate = v8::Isolate::New(params); 164 v8::Isolate* isolate = v8::Isolate::New(params);
182 Serialize(isolate); 165 Serialize(isolate);
183 } 166 }
184 } 167 }
185 168
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 const char* c_source = "\"1234\".length"; 293 const char* c_source = "\"1234\".length";
311 v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, c_source); 294 v8::Local<v8::String> source = v8::String::NewFromUtf8(isolate, c_source);
312 v8::Local<v8::Script> script = v8::Script::Compile(source); 295 v8::Local<v8::Script> script = v8::Script::Compile(source);
313 CHECK_EQ(4, script->Run()->Int32Value()); 296 CHECK_EQ(4, script->Run()->Int32Value());
314 } 297 }
315 isolate->Dispose(); 298 isolate->Dispose();
316 } 299 }
317 } 300 }
318 301
319 302
320 // Test that the whole heap can be serialized.
321 UNINITIALIZED_TEST(SerializeMultiplePages) {
322 if (!Snapshot::HaveASnapshotToStartFrom()) {
323 v8::Isolate::CreateParams params;
324 params.enable_serializer = true;
325 v8::Isolate* isolate = v8::Isolate::New(params);
326 {
327 v8::Isolate::Scope isolate_scope(isolate);
328 v8::HandleScope handle_scope(isolate);
329 v8::Local<v8::Context> context = v8::Context::New(isolate);
330 v8::Context::Scope context_scope(context);
331 Vector<const uint8_t> source = ConstructSource(
332 STATIC_CHAR_VECTOR("var s='"), STATIC_CHAR_VECTOR("A"),
333 STATIC_CHAR_VECTOR("';"), Page::kMaxRegularHeapObjectSize - 100);
334 v8::Handle<v8::String> source_str = v8::String::NewFromOneByte(
335 isolate, source.start(), v8::String::kNormalString, source.length());
336 CompileRun(source_str);
337 }
338
339 Isolate* internal_isolate = reinterpret_cast<Isolate*>(isolate);
340 internal_isolate->heap()->CollectAllAvailableGarbage("serialize");
341 WriteToFile(internal_isolate, FLAG_testing_serialization_file);
342 }
343 }
344
345
346 UNINITIALIZED_TEST(PartialSerialization) { 303 UNINITIALIZED_TEST(PartialSerialization) {
347 if (!Snapshot::HaveASnapshotToStartFrom()) { 304 if (!Snapshot::HaveASnapshotToStartFrom()) {
348 v8::Isolate::CreateParams params; 305 v8::Isolate::CreateParams params;
349 params.enable_serializer = true; 306 params.enable_serializer = true;
350 v8::Isolate* v8_isolate = v8::Isolate::New(params); 307 v8::Isolate* v8_isolate = v8::Isolate::New(params);
351 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); 308 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
352 v8_isolate->Enter(); 309 v8_isolate->Enter();
353 { 310 {
354 Heap* heap = isolate->heap(); 311 Heap* heap = isolate->heap();
355 312
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 } 539 }
583 } 540 }
584 541
585 542
586 UNINITIALIZED_TEST(CustomContextSerialization) { 543 UNINITIALIZED_TEST(CustomContextSerialization) {
587 if (!Snapshot::HaveASnapshotToStartFrom()) { 544 if (!Snapshot::HaveASnapshotToStartFrom()) {
588 v8::Isolate::CreateParams params; 545 v8::Isolate::CreateParams params;
589 params.enable_serializer = true; 546 params.enable_serializer = true;
590 v8::Isolate* v8_isolate = v8::Isolate::New(params); 547 v8::Isolate* v8_isolate = v8::Isolate::New(params);
591 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate); 548 Isolate* isolate = reinterpret_cast<Isolate*>(v8_isolate);
549 Heap* heap = isolate->heap();
592 { 550 {
593 v8::Isolate::Scope isolate_scope(v8_isolate); 551 v8::Isolate::Scope isolate_scope(v8_isolate);
594 552
595 v8::Persistent<v8::Context> env; 553 v8::Persistent<v8::Context> env;
596 { 554 {
597 HandleScope scope(isolate); 555 HandleScope scope(isolate);
598 env.Reset(v8_isolate, v8::Context::New(v8_isolate)); 556 env.Reset(v8_isolate, v8::Context::New(v8_isolate));
599 } 557 }
600 DCHECK(!env.IsEmpty()); 558 DCHECK(!env.IsEmpty());
601 { 559 {
602 v8::HandleScope handle_scope(v8_isolate); 560 v8::HandleScope handle_scope(v8_isolate);
603 v8::Local<v8::Context>::New(v8_isolate, env)->Enter(); 561 v8::Local<v8::Context>::New(v8_isolate, env)->Enter();
604 // After execution, e's function context refers to the global object. 562 // After execution, e's function context refers to the global object.
605 CompileRun( 563 CompileRun(
606 "var e;" 564 "var e;"
607 "(function() {" 565 "(function() {"
608 " e = function(s) { return eval (s); }" 566 " e = function(s) { return eval (s); }"
609 "})();" 567 "})();"
610 "var o = this;" 568 "var o = this;"
611 "var r = Math.random() + Math.cos(0);" 569 "var r = Math.random() + Math.cos(0);"
612 "var f = (function(a, b) { return a + b; }).bind(1, 2, 3);" 570 "var f = (function(a, b) { return a + b; }).bind(1, 2, 3);"
613 "var s = parseInt('12345');"); 571 "var s = parseInt('12345');");
614
615 Vector<const uint8_t> source = ConstructSource(
616 STATIC_CHAR_VECTOR("function g() { return [,"),
617 STATIC_CHAR_VECTOR("1,"),
618 STATIC_CHAR_VECTOR("];} a = g(); b = g(); b.push(1);"), 100000);
619 v8::Handle<v8::String> source_str = v8::String::NewFromOneByte(
620 v8_isolate, source.start(), v8::String::kNormalString,
621 source.length());
622 CompileRun(source_str);
623 source.Dispose();
624 } 572 }
625 // Make sure all builtin scripts are cached. 573 // Make sure all builtin scripts are cached.
626 { 574 {
627 HandleScope scope(isolate); 575 HandleScope scope(isolate);
628 for (int i = 0; i < Natives::GetBuiltinsCount(); i++) { 576 for (int i = 0; i < Natives::GetBuiltinsCount(); i++) {
629 isolate->bootstrapper()->NativesSourceLookup(i); 577 isolate->bootstrapper()->NativesSourceLookup(i);
630 } 578 }
631 } 579 }
632 // If we don't do this then we end up with a stray root pointing at the 580 // If we don't do this then we end up with a stray root pointing at the
633 // context even after we have disposed of env. 581 // context even after we have disposed of env.
634 isolate->heap()->CollectAllAvailableGarbage("snapshotting"); 582 heap->CollectAllGarbage(Heap::kNoGCFlags);
635 583
636 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10; 584 int file_name_length = StrLength(FLAG_testing_serialization_file) + 10;
637 Vector<char> startup_name = Vector<char>::New(file_name_length + 1); 585 Vector<char> startup_name = Vector<char>::New(file_name_length + 1);
638 SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file); 586 SNPrintF(startup_name, "%s.startup", FLAG_testing_serialization_file);
639 587
640 { 588 {
641 v8::HandleScope handle_scope(v8_isolate); 589 v8::HandleScope handle_scope(v8_isolate);
642 v8::Local<v8::Context>::New(v8_isolate, env)->Exit(); 590 v8::Local<v8::Context>::New(v8_isolate, env)->Exit();
643 } 591 }
644 592
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 v8::Handle<v8::Context> v8_context = v8::Utils::ToLocal(context); 660 v8::Handle<v8::Context> v8_context = v8::Utils::ToLocal(context);
713 v8::Context::Scope context_scope(v8_context); 661 v8::Context::Scope context_scope(v8_context);
714 double r = CompileRun("r")->ToNumber(v8_isolate)->Value(); 662 double r = CompileRun("r")->ToNumber(v8_isolate)->Value();
715 CHECK(r >= 1 && r <= 2); 663 CHECK(r >= 1 && r <= 2);
716 int f = CompileRun("f()")->ToNumber(v8_isolate)->Int32Value(); 664 int f = CompileRun("f()")->ToNumber(v8_isolate)->Int32Value();
717 CHECK_EQ(5, f); 665 CHECK_EQ(5, f);
718 f = CompileRun("e('f()')")->ToNumber(v8_isolate)->Int32Value(); 666 f = CompileRun("e('f()')")->ToNumber(v8_isolate)->Int32Value();
719 CHECK_EQ(5, f); 667 CHECK_EQ(5, f);
720 v8::Handle<v8::String> s = CompileRun("s")->ToString(v8_isolate); 668 v8::Handle<v8::String> s = CompileRun("s")->ToString(v8_isolate);
721 CHECK(s->Equals(v8_str("12345"))); 669 CHECK(s->Equals(v8_str("12345")));
722 int a = CompileRun("a.length")->ToNumber(v8_isolate)->Int32Value();
723 CHECK_EQ(100001, a);
724 int b = CompileRun("b.length")->ToNumber(v8_isolate)->Int32Value();
725 CHECK_EQ(100002, b);
726 } 670 }
727 } 671 }
728 v8_isolate->Dispose(); 672 v8_isolate->Dispose();
729 } 673 }
730 } 674 }
731 675
732 676
733 TEST(TestThatAlwaysSucceeds) { 677 TEST(TestThatAlwaysSucceeds) {
734 } 678 }
735 679
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 Handle<String> expected = 812 Handle<String> expected =
869 isolate->factory()->NewStringFromAsciiChecked("string1"); 813 isolate->factory()->NewStringFromAsciiChecked("string1");
870 814
871 CHECK(Handle<String>::cast(copy_result)->Equals(*expected)); 815 CHECK(Handle<String>::cast(copy_result)->Equals(*expected));
872 CHECK_EQ(builtins_count, CountBuiltins()); 816 CHECK_EQ(builtins_count, CountBuiltins());
873 817
874 delete cache; 818 delete cache;
875 } 819 }
876 820
877 821
822 Vector<const uint8_t> ConstructSource(Vector<const uint8_t> head,
823 Vector<const uint8_t> body,
824 Vector<const uint8_t> tail, int repeats) {
825 int source_length = head.length() + body.length() * repeats + tail.length();
826 uint8_t* source = NewArray<uint8_t>(static_cast<size_t>(source_length));
827 CopyChars(source, head.start(), head.length());
828 for (int i = 0; i < repeats; i++) {
829 CopyChars(source + head.length() + i * body.length(), body.start(),
830 body.length());
831 }
832 CopyChars(source + head.length() + repeats * body.length(), tail.start(),
833 tail.length());
834 return Vector<const uint8_t>(const_cast<const uint8_t*>(source),
835 source_length);
836 }
837
838
878 TEST(SerializeToplevelLargeCodeObject) { 839 TEST(SerializeToplevelLargeCodeObject) {
879 FLAG_serialize_toplevel = true; 840 FLAG_serialize_toplevel = true;
880 LocalContext context; 841 LocalContext context;
881 Isolate* isolate = CcTest::i_isolate(); 842 Isolate* isolate = CcTest::i_isolate();
882 isolate->compilation_cache()->Disable(); // Disable same-isolate code cache. 843 isolate->compilation_cache()->Disable(); // Disable same-isolate code cache.
883 844
884 v8::HandleScope scope(CcTest::isolate()); 845 v8::HandleScope scope(CcTest::isolate());
885 846
886 Vector<const uint8_t> source = 847 Vector<const uint8_t> source =
887 ConstructSource(STATIC_CHAR_VECTOR("var j=1; try { if (j) throw 1;"), 848 ConstructSource(STATIC_CHAR_VECTOR("var j=1; try { if (j) throw 1;"),
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
1399 { 1360 {
1400 DisallowCompilation no_compile(reinterpret_cast<Isolate*>(isolate2)); 1361 DisallowCompilation no_compile(reinterpret_cast<Isolate*>(isolate2));
1401 script = v8::ScriptCompiler::CompileUnbound( 1362 script = v8::ScriptCompiler::CompileUnbound(
1402 isolate2, &source, v8::ScriptCompiler::kConsumeCodeCache); 1363 isolate2, &source, v8::ScriptCompiler::kConsumeCodeCache);
1403 } 1364 }
1404 v8::Local<v8::Value> result = script->BindToCurrentContext()->Run(); 1365 v8::Local<v8::Value> result = script->BindToCurrentContext()->Run();
1405 CHECK(result->ToString(isolate2)->Equals(v8_str("XY"))); 1366 CHECK(result->ToString(isolate2)->Equals(v8_str("XY")));
1406 } 1367 }
1407 isolate2->Dispose(); 1368 isolate2->Dispose();
1408 } 1369 }
OLDNEW
« no previous file with comments | « test/cctest/test-heap.cc ('k') | test/cctest/test-spaces.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698