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 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 | 436 |
437 | 437 |
438 // Check that the debugger has been fully unloaded. | 438 // Check that the debugger has been fully unloaded. |
439 void CheckDebuggerUnloaded(bool check_functions) { | 439 void CheckDebuggerUnloaded(bool check_functions) { |
440 // Check that the debugger context is cleared and that there is no debug | 440 // Check that the debugger context is cleared and that there is no debug |
441 // information stored for the debugger. | 441 // information stored for the debugger. |
442 CHECK(CcTest::i_isolate()->debug()->debug_context().is_null()); | 442 CHECK(CcTest::i_isolate()->debug()->debug_context().is_null()); |
443 CHECK_EQ(NULL, CcTest::i_isolate()->debug()->debug_info_list_); | 443 CHECK_EQ(NULL, CcTest::i_isolate()->debug()->debug_info_list_); |
444 | 444 |
445 // Collect garbage to ensure weak handles are cleared. | 445 // Collect garbage to ensure weak handles are cleared. |
446 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 446 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); |
447 HEAP->CollectAllGarbage(Heap::kMakeHeapIterableMask); | 447 CcTest::heap()->CollectAllGarbage(Heap::kMakeHeapIterableMask); |
448 | 448 |
449 // Iterate the head and check that there are no debugger related objects left. | 449 // Iterate the head and check that there are no debugger related objects left. |
450 HeapIterator iterator(HEAP); | 450 HeapIterator iterator(CcTest::heap()); |
451 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { | 451 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { |
452 CHECK(!obj->IsDebugInfo()); | 452 CHECK(!obj->IsDebugInfo()); |
453 CHECK(!obj->IsBreakPointInfo()); | 453 CHECK(!obj->IsBreakPointInfo()); |
454 | 454 |
455 // If deep check of functions is requested check that no debug break code | 455 // If deep check of functions is requested check that no debug break code |
456 // is left in all functions. | 456 // is left in all functions. |
457 if (check_functions) { | 457 if (check_functions) { |
458 if (obj->IsJSFunction()) { | 458 if (obj->IsJSFunction()) { |
459 JSFunction* fun = JSFunction::cast(obj); | 459 JSFunction* fun = JSFunction::cast(obj); |
460 for (RelocIterator it(fun->shared()->code()); !it.done(); it.next()) { | 460 for (RelocIterator it(fun->shared()->code()); !it.done(); it.next()) { |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
954 // When hitting a debug event listener there must be a break set. | 954 // When hitting a debug event listener there must be a break set. |
955 CHECK_NE(debug->break_id(), 0); | 955 CHECK_NE(debug->break_id(), 0); |
956 | 956 |
957 // Perform a garbage collection when break point is hit and continue. Based | 957 // Perform a garbage collection when break point is hit and continue. Based |
958 // on the number of break points hit either scavenge or mark compact | 958 // on the number of break points hit either scavenge or mark compact |
959 // collector is used. | 959 // collector is used. |
960 if (event == v8::Break) { | 960 if (event == v8::Break) { |
961 break_point_hit_count++; | 961 break_point_hit_count++; |
962 if (break_point_hit_count % 2 == 0) { | 962 if (break_point_hit_count % 2 == 0) { |
963 // Scavenge. | 963 // Scavenge. |
964 HEAP->CollectGarbage(v8::internal::NEW_SPACE); | 964 CcTest::heap()->CollectGarbage(v8::internal::NEW_SPACE); |
965 } else { | 965 } else { |
966 // Mark sweep compact. | 966 // Mark sweep compact. |
967 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 967 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); |
968 } | 968 } |
969 } | 969 } |
970 } | 970 } |
971 | 971 |
972 | 972 |
973 // Debug event handler which re-issues a debug break and calls the garbage | 973 // Debug event handler which re-issues a debug break and calls the garbage |
974 // collector to have the heap verified. | 974 // collector to have the heap verified. |
975 static void DebugEventBreak( | 975 static void DebugEventBreak( |
976 const v8::Debug::EventDetails& event_details) { | 976 const v8::Debug::EventDetails& event_details) { |
977 v8::DebugEvent event = event_details.GetEvent(); | 977 v8::DebugEvent event = event_details.GetEvent(); |
978 v8::internal::Debug* debug = CcTest::i_isolate()->debug(); | 978 v8::internal::Debug* debug = CcTest::i_isolate()->debug(); |
979 // When hitting a debug event listener there must be a break set. | 979 // When hitting a debug event listener there must be a break set. |
980 CHECK_NE(debug->break_id(), 0); | 980 CHECK_NE(debug->break_id(), 0); |
981 | 981 |
982 if (event == v8::Break) { | 982 if (event == v8::Break) { |
983 // Count the number of breaks. | 983 // Count the number of breaks. |
984 break_point_hit_count++; | 984 break_point_hit_count++; |
985 | 985 |
986 // Run the garbage collector to enforce heap verification if option | 986 // Run the garbage collector to enforce heap verification if option |
987 // --verify-heap is set. | 987 // --verify-heap is set. |
988 HEAP->CollectGarbage(v8::internal::NEW_SPACE); | 988 CcTest::heap()->CollectGarbage(v8::internal::NEW_SPACE); |
989 | 989 |
990 // Set the break flag again to come back here as soon as possible. | 990 // Set the break flag again to come back here as soon as possible. |
991 v8::Debug::DebugBreak(CcTest::isolate()); | 991 v8::Debug::DebugBreak(CcTest::isolate()); |
992 } | 992 } |
993 } | 993 } |
994 | 994 |
995 | 995 |
996 // Debug event handler which re-issues a debug break until a limit has been | 996 // Debug event handler which re-issues a debug break until a limit has been |
997 // reached. | 997 // reached. |
998 int max_break_point_hit_count = 0; | 998 int max_break_point_hit_count = 0; |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 static void CallAndGC(v8::Local<v8::Object> recv, | 1443 static void CallAndGC(v8::Local<v8::Object> recv, |
1444 v8::Local<v8::Function> f) { | 1444 v8::Local<v8::Function> f) { |
1445 break_point_hit_count = 0; | 1445 break_point_hit_count = 0; |
1446 | 1446 |
1447 for (int i = 0; i < 3; i++) { | 1447 for (int i = 0; i < 3; i++) { |
1448 // Call function. | 1448 // Call function. |
1449 f->Call(recv, 0, NULL); | 1449 f->Call(recv, 0, NULL); |
1450 CHECK_EQ(1 + i * 3, break_point_hit_count); | 1450 CHECK_EQ(1 + i * 3, break_point_hit_count); |
1451 | 1451 |
1452 // Scavenge and call function. | 1452 // Scavenge and call function. |
1453 HEAP->CollectGarbage(v8::internal::NEW_SPACE); | 1453 CcTest::heap()->CollectGarbage(v8::internal::NEW_SPACE); |
1454 f->Call(recv, 0, NULL); | 1454 f->Call(recv, 0, NULL); |
1455 CHECK_EQ(2 + i * 3, break_point_hit_count); | 1455 CHECK_EQ(2 + i * 3, break_point_hit_count); |
1456 | 1456 |
1457 // Mark sweep (and perhaps compact) and call function. | 1457 // Mark sweep (and perhaps compact) and call function. |
1458 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 1458 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); |
1459 f->Call(recv, 0, NULL); | 1459 f->Call(recv, 0, NULL); |
1460 CHECK_EQ(3 + i * 3, break_point_hit_count); | 1460 CHECK_EQ(3 + i * 3, break_point_hit_count); |
1461 } | 1461 } |
1462 } | 1462 } |
1463 | 1463 |
1464 | 1464 |
1465 // Test that a break point can be set at a return store location. | 1465 // Test that a break point can be set at a return store location. |
1466 TEST(BreakPointSurviveGC) { | 1466 TEST(BreakPointSurviveGC) { |
1467 break_point_hit_count = 0; | 1467 break_point_hit_count = 0; |
1468 DebugLocalContext env; | 1468 DebugLocalContext env; |
(...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2252 " a = 1; // line 1\n" | 2252 " a = 1; // line 1\n" |
2253 "}\n" | 2253 "}\n" |
2254 "a = 2; // line 3\n"); | 2254 "a = 2; // line 3\n"); |
2255 v8::Local<v8::Function> f; | 2255 v8::Local<v8::Function> f; |
2256 { | 2256 { |
2257 v8::HandleScope scope(env->GetIsolate()); | 2257 v8::HandleScope scope(env->GetIsolate()); |
2258 v8::Script::Compile(script, v8::String::New("test.html"))->Run(); | 2258 v8::Script::Compile(script, v8::String::New("test.html"))->Run(); |
2259 } | 2259 } |
2260 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); | 2260 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); |
2261 | 2261 |
2262 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 2262 CcTest::heap()->CollectAllGarbage(Heap::kNoGCFlags); |
2263 | 2263 |
2264 SetScriptBreakPointByNameFromJS("test.html", 3, -1); | 2264 SetScriptBreakPointByNameFromJS("test.html", 3, -1); |
2265 | 2265 |
2266 // Call f and check that there was no break points. | 2266 // Call f and check that there was no break points. |
2267 break_point_hit_count = 0; | 2267 break_point_hit_count = 0; |
2268 f->Call(env->Global(), 0, NULL); | 2268 f->Call(env->Global(), 0, NULL); |
2269 CHECK_EQ(0, break_point_hit_count); | 2269 CHECK_EQ(0, break_point_hit_count); |
2270 | 2270 |
2271 // Recompile and run script and check that break point was hit. | 2271 // Recompile and run script and check that break point was hit. |
2272 break_point_hit_count = 0; | 2272 break_point_hit_count = 0; |
(...skipping 4267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6540 break_point_hit_count = 0; | 6540 break_point_hit_count = 0; |
6541 script_collected_count = 0; | 6541 script_collected_count = 0; |
6542 DebugLocalContext env; | 6542 DebugLocalContext env; |
6543 v8::HandleScope scope(env->GetIsolate()); | 6543 v8::HandleScope scope(env->GetIsolate()); |
6544 | 6544 |
6545 // Request the loaded scripts to initialize the debugger script cache. | 6545 // Request the loaded scripts to initialize the debugger script cache. |
6546 debug->GetLoadedScripts(); | 6546 debug->GetLoadedScripts(); |
6547 | 6547 |
6548 // Do garbage collection to ensure that only the script in this test will be | 6548 // Do garbage collection to ensure that only the script in this test will be |
6549 // collected afterwards. | 6549 // collected afterwards. |
6550 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); | 6550 CcTest::heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); |
6551 | 6551 |
6552 script_collected_count = 0; | 6552 script_collected_count = 0; |
6553 v8::Debug::SetDebugEventListener2(DebugEventScriptCollectedEvent); | 6553 v8::Debug::SetDebugEventListener2(DebugEventScriptCollectedEvent); |
6554 { | 6554 { |
6555 v8::Script::Compile(v8::String::New("eval('a=1')"))->Run(); | 6555 v8::Script::Compile(v8::String::New("eval('a=1')"))->Run(); |
6556 v8::Script::Compile(v8::String::New("eval('a=2')"))->Run(); | 6556 v8::Script::Compile(v8::String::New("eval('a=2')"))->Run(); |
6557 } | 6557 } |
6558 | 6558 |
6559 // Do garbage collection to collect the script above which is no longer | 6559 // Do garbage collection to collect the script above which is no longer |
6560 // referenced. | 6560 // referenced. |
6561 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); | 6561 CcTest::heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); |
6562 | 6562 |
6563 CHECK_EQ(2, script_collected_count); | 6563 CHECK_EQ(2, script_collected_count); |
6564 | 6564 |
6565 v8::Debug::SetDebugEventListener2(NULL); | 6565 v8::Debug::SetDebugEventListener2(NULL); |
6566 CheckDebuggerUnloaded(); | 6566 CheckDebuggerUnloaded(); |
6567 } | 6567 } |
6568 | 6568 |
6569 | 6569 |
6570 // Debug event listener which counts the script collected events. | 6570 // Debug event listener which counts the script collected events. |
6571 int script_collected_message_count = 0; | 6571 int script_collected_message_count = 0; |
(...skipping 30 matching lines...) Expand all Loading... |
6602 v8::Local<v8::Context> local_context = | 6602 v8::Local<v8::Context> local_context = |
6603 v8::Local<v8::Context>::New(isolate, context); | 6603 v8::Local<v8::Context>::New(isolate, context); |
6604 local_context->Enter(); | 6604 local_context->Enter(); |
6605 } | 6605 } |
6606 | 6606 |
6607 // Request the loaded scripts to initialize the debugger script cache. | 6607 // Request the loaded scripts to initialize the debugger script cache. |
6608 debug->GetLoadedScripts(); | 6608 debug->GetLoadedScripts(); |
6609 | 6609 |
6610 // Do garbage collection to ensure that only the script in this test will be | 6610 // Do garbage collection to ensure that only the script in this test will be |
6611 // collected afterwards. | 6611 // collected afterwards. |
6612 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); | 6612 CcTest::heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); |
6613 | 6613 |
6614 v8::Debug::SetMessageHandler2(ScriptCollectedMessageHandler); | 6614 v8::Debug::SetMessageHandler2(ScriptCollectedMessageHandler); |
6615 v8::Script::Compile(v8::String::New("eval('a=1')"))->Run(); | 6615 v8::Script::Compile(v8::String::New("eval('a=1')"))->Run(); |
6616 v8::Script::Compile(v8::String::New("eval('a=2')"))->Run(); | 6616 v8::Script::Compile(v8::String::New("eval('a=2')"))->Run(); |
6617 | 6617 |
6618 // Leave context | 6618 // Leave context |
6619 { | 6619 { |
6620 v8::HandleScope scope(isolate); | 6620 v8::HandleScope scope(isolate); |
6621 v8::Local<v8::Context> local_context = | 6621 v8::Local<v8::Context> local_context = |
6622 v8::Local<v8::Context>::New(isolate, context); | 6622 v8::Local<v8::Context>::New(isolate, context); |
6623 local_context->Exit(); | 6623 local_context->Exit(); |
6624 } | 6624 } |
6625 context.Dispose(); | 6625 context.Dispose(); |
6626 | 6626 |
6627 // Do garbage collection to collect the script above which is no longer | 6627 // Do garbage collection to collect the script above which is no longer |
6628 // referenced. | 6628 // referenced. |
6629 HEAP->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); | 6629 CcTest::heap()->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); |
6630 | 6630 |
6631 CHECK_EQ(2, script_collected_message_count); | 6631 CHECK_EQ(2, script_collected_message_count); |
6632 | 6632 |
6633 v8::Debug::SetMessageHandler2(NULL); | 6633 v8::Debug::SetMessageHandler2(NULL); |
6634 } | 6634 } |
6635 | 6635 |
6636 | 6636 |
6637 // Debug event listener which counts the after compile events. | 6637 // Debug event listener which counts the after compile events. |
6638 int after_compile_message_count = 0; | 6638 int after_compile_message_count = 0; |
6639 static void AfterCompileMessageHandler(const v8::Debug::Message& message) { | 6639 static void AfterCompileMessageHandler(const v8::Debug::Message& message) { |
(...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7549 TEST(LiveEditDisabled) { | 7549 TEST(LiveEditDisabled) { |
7550 v8::internal::FLAG_allow_natives_syntax = true; | 7550 v8::internal::FLAG_allow_natives_syntax = true; |
7551 LocalContext env; | 7551 LocalContext env; |
7552 v8::HandleScope scope(env->GetIsolate()); | 7552 v8::HandleScope scope(env->GetIsolate()); |
7553 v8::Debug::SetLiveEditEnabled(false), env->GetIsolate(); | 7553 v8::Debug::SetLiveEditEnabled(false), env->GetIsolate(); |
7554 CompileRun("%LiveEditCompareStrings('', '')"); | 7554 CompileRun("%LiveEditCompareStrings('', '')"); |
7555 } | 7555 } |
7556 | 7556 |
7557 | 7557 |
7558 #endif // ENABLE_DEBUGGER_SUPPORT | 7558 #endif // ENABLE_DEBUGGER_SUPPORT |
OLD | NEW |