OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 #include "src/compilation-cache.h" | 44 #include "src/compilation-cache.h" |
45 #include "src/debug/debug.h" | 45 #include "src/debug/debug.h" |
46 #include "src/execution.h" | 46 #include "src/execution.h" |
47 #include "src/futex-emulation.h" | 47 #include "src/futex-emulation.h" |
48 #include "src/objects.h" | 48 #include "src/objects.h" |
49 #include "src/parsing/parser.h" | 49 #include "src/parsing/parser.h" |
50 #include "src/unicode-inl.h" | 50 #include "src/unicode-inl.h" |
51 #include "src/utils.h" | 51 #include "src/utils.h" |
52 #include "src/vm-state.h" | 52 #include "src/vm-state.h" |
53 #include "test/cctest/heap/heap-tester.h" | 53 #include "test/cctest/heap/heap-tester.h" |
54 #include "test/cctest/heap/utils-inl.h" | 54 #include "test/cctest/heap/heap-utils.h" |
55 | 55 |
56 static const bool kLogThreading = false; | 56 static const bool kLogThreading = false; |
57 | 57 |
58 using ::v8::Boolean; | 58 using ::v8::Boolean; |
59 using ::v8::BooleanObject; | 59 using ::v8::BooleanObject; |
60 using ::v8::Context; | 60 using ::v8::Context; |
61 using ::v8::Extension; | 61 using ::v8::Extension; |
62 using ::v8::Function; | 62 using ::v8::Function; |
63 using ::v8::FunctionTemplate; | 63 using ::v8::FunctionTemplate; |
64 using ::v8::HandleScope; | 64 using ::v8::HandleScope; |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 CompileRun("function cons(a, b) { return a + b; }" | 627 CompileRun("function cons(a, b) { return a + b; }" |
628 "function slice(a) { return a.substring(1); }"); | 628 "function slice(a) { return a.substring(1); }"); |
629 // Create a cons string that will land in old pointer space. | 629 // Create a cons string that will land in old pointer space. |
630 Local<String> cons = Local<String>::Cast(CompileRun( | 630 Local<String> cons = Local<String>::Cast(CompileRun( |
631 "cons('abcdefghijklm', 'nopqrstuvwxyz');")); | 631 "cons('abcdefghijklm', 'nopqrstuvwxyz');")); |
632 // Create a sliced string that will land in old pointer space. | 632 // Create a sliced string that will land in old pointer space. |
633 Local<String> slice = Local<String>::Cast(CompileRun( | 633 Local<String> slice = Local<String>::Cast(CompileRun( |
634 "slice('abcdefghijklmnopqrstuvwxyz');")); | 634 "slice('abcdefghijklmnopqrstuvwxyz');")); |
635 | 635 |
636 // Trigger GCs so that the newly allocated string moves to old gen. | 636 // Trigger GCs so that the newly allocated string moves to old gen. |
637 SimulateFullSpace(CcTest::heap()->old_space()); | 637 i::heap::SimulateFullSpace(CcTest::heap()->old_space()); |
638 CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in survivor space now | 638 CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in survivor space now |
639 CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in old gen now | 639 CcTest::heap()->CollectGarbage(i::NEW_SPACE); // in old gen now |
640 | 640 |
641 // Turn into external string with unaligned resource data. | 641 // Turn into external string with unaligned resource data. |
642 const char* c_cons = "_abcdefghijklmnopqrstuvwxyz"; | 642 const char* c_cons = "_abcdefghijklmnopqrstuvwxyz"; |
643 bool success = | 643 bool success = |
644 cons->MakeExternal(new TestOneByteResource(i::StrDup(c_cons), NULL, 1)); | 644 cons->MakeExternal(new TestOneByteResource(i::StrDup(c_cons), NULL, 1)); |
645 CHECK(success); | 645 CHECK(success); |
646 const char* c_slice = "_bcdefghijklmnopqrstuvwxyz"; | 646 const char* c_slice = "_bcdefghijklmnopqrstuvwxyz"; |
647 success = | 647 success = |
(...skipping 14143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14791 move_events = 0; | 14791 move_events = 0; |
14792 | 14792 |
14793 isolate->SetJitCodeEventHandler(v8::kJitCodeEventDefault, event_handler); | 14793 isolate->SetJitCodeEventHandler(v8::kJitCodeEventDefault, event_handler); |
14794 | 14794 |
14795 // Generate new code objects sparsely distributed across several | 14795 // Generate new code objects sparsely distributed across several |
14796 // different fragmented code-space pages. | 14796 // different fragmented code-space pages. |
14797 const int kIterations = 10; | 14797 const int kIterations = 10; |
14798 for (int i = 0; i < kIterations; ++i) { | 14798 for (int i = 0; i < kIterations; ++i) { |
14799 LocalContext env(isolate); | 14799 LocalContext env(isolate); |
14800 i::AlwaysAllocateScope always_allocate(i_isolate); | 14800 i::AlwaysAllocateScope always_allocate(i_isolate); |
14801 SimulateFullSpace(i::FLAG_ignition ? heap->old_space() | 14801 i::heap::SimulateFullSpace(i::FLAG_ignition ? heap->old_space() |
14802 : heap->code_space()); | 14802 : heap->code_space()); |
14803 CompileRun(script); | 14803 CompileRun(script); |
14804 | 14804 |
14805 // Keep a strong reference to the code object in the handle scope. | 14805 // Keep a strong reference to the code object in the handle scope. |
14806 i::Handle<i::Code> bar_code( | 14806 i::Handle<i::Code> bar_code( |
14807 i::Handle<i::JSFunction>::cast( | 14807 i::Handle<i::JSFunction>::cast( |
14808 v8::Utils::OpenHandle(*env->Global() | 14808 v8::Utils::OpenHandle(*env->Global() |
14809 ->Get(env.local(), v8_str("bar")) | 14809 ->Get(env.local(), v8_str("bar")) |
14810 .ToLocalChecked())) | 14810 .ToLocalChecked())) |
14811 ->code()); | 14811 ->code()); |
14812 i::Handle<i::Code> foo_code( | 14812 i::Handle<i::Code> foo_code( |
(...skipping 4181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
18994 void PrologueCallbackAlloc(v8::Isolate* isolate, | 18994 void PrologueCallbackAlloc(v8::Isolate* isolate, |
18995 v8::GCType, | 18995 v8::GCType, |
18996 v8::GCCallbackFlags flags) { | 18996 v8::GCCallbackFlags flags) { |
18997 v8::HandleScope scope(isolate); | 18997 v8::HandleScope scope(isolate); |
18998 | 18998 |
18999 CHECK_EQ(flags, v8::kNoGCCallbackFlags); | 18999 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
19000 CHECK_EQ(gc_callbacks_isolate, isolate); | 19000 CHECK_EQ(gc_callbacks_isolate, isolate); |
19001 ++prologue_call_count_alloc; | 19001 ++prologue_call_count_alloc; |
19002 | 19002 |
19003 // Simulate full heap to see if we will reenter this callback | 19003 // Simulate full heap to see if we will reenter this callback |
19004 SimulateFullSpace(CcTest::heap()->new_space()); | 19004 i::heap::SimulateFullSpace(CcTest::heap()->new_space()); |
19005 | 19005 |
19006 Local<Object> obj = Object::New(isolate); | 19006 Local<Object> obj = Object::New(isolate); |
19007 CHECK(!obj.IsEmpty()); | 19007 CHECK(!obj.IsEmpty()); |
19008 | 19008 |
19009 CcTest::heap()->CollectAllGarbage( | 19009 CcTest::heap()->CollectAllGarbage( |
19010 i::Heap::kAbortIncrementalMarkingMask); | 19010 i::Heap::kAbortIncrementalMarkingMask); |
19011 } | 19011 } |
19012 | 19012 |
19013 | 19013 |
19014 void EpilogueCallbackAlloc(v8::Isolate* isolate, | 19014 void EpilogueCallbackAlloc(v8::Isolate* isolate, |
19015 v8::GCType, | 19015 v8::GCType, |
19016 v8::GCCallbackFlags flags) { | 19016 v8::GCCallbackFlags flags) { |
19017 v8::HandleScope scope(isolate); | 19017 v8::HandleScope scope(isolate); |
19018 | 19018 |
19019 CHECK_EQ(flags, v8::kNoGCCallbackFlags); | 19019 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
19020 CHECK_EQ(gc_callbacks_isolate, isolate); | 19020 CHECK_EQ(gc_callbacks_isolate, isolate); |
19021 ++epilogue_call_count_alloc; | 19021 ++epilogue_call_count_alloc; |
19022 | 19022 |
19023 // Simulate full heap to see if we will reenter this callback | 19023 // Simulate full heap to see if we will reenter this callback |
19024 SimulateFullSpace(CcTest::heap()->new_space()); | 19024 i::heap::SimulateFullSpace(CcTest::heap()->new_space()); |
19025 | 19025 |
19026 Local<Object> obj = Object::New(isolate); | 19026 Local<Object> obj = Object::New(isolate); |
19027 CHECK(!obj.IsEmpty()); | 19027 CHECK(!obj.IsEmpty()); |
19028 | 19028 |
19029 CcTest::heap()->CollectAllGarbage( | 19029 CcTest::heap()->CollectAllGarbage( |
19030 i::Heap::kAbortIncrementalMarkingMask); | 19030 i::Heap::kAbortIncrementalMarkingMask); |
19031 } | 19031 } |
19032 | 19032 |
19033 | 19033 |
19034 TEST(GCCallbacksOld) { | 19034 TEST(GCCallbacksOld) { |
(...skipping 6205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
25240 } | 25240 } |
25241 | 25241 |
25242 TEST(PrivateForApiIsNumber) { | 25242 TEST(PrivateForApiIsNumber) { |
25243 LocalContext context; | 25243 LocalContext context; |
25244 v8::Isolate* isolate = CcTest::isolate(); | 25244 v8::Isolate* isolate = CcTest::isolate(); |
25245 v8::HandleScope scope(isolate); | 25245 v8::HandleScope scope(isolate); |
25246 | 25246 |
25247 // Shouldn't crash. | 25247 // Shouldn't crash. |
25248 v8::Private::ForApi(isolate, v8_str("42")); | 25248 v8::Private::ForApi(isolate, v8_str("42")); |
25249 } | 25249 } |
OLD | NEW |