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

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

Issue 2310143002: [heap] Introduce enum of garbage collection reasons. (Closed)
Patch Set: rebase Created 4 years, 3 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-cpu-profiler.cc ('k') | test/cctest/test-decls.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 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 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 364
365 365
366 // Check that the debugger has been fully unloaded. 366 // Check that the debugger has been fully unloaded.
367 void CheckDebuggerUnloaded(bool check_functions) { 367 void CheckDebuggerUnloaded(bool check_functions) {
368 // Check that the debugger context is cleared and that there is no debug 368 // Check that the debugger context is cleared and that there is no debug
369 // information stored for the debugger. 369 // information stored for the debugger.
370 CHECK(CcTest::i_isolate()->debug()->debug_context().is_null()); 370 CHECK(CcTest::i_isolate()->debug()->debug_context().is_null());
371 CHECK(!CcTest::i_isolate()->debug()->debug_info_list_); 371 CHECK(!CcTest::i_isolate()->debug()->debug_info_list_);
372 372
373 // Collect garbage to ensure weak handles are cleared. 373 // Collect garbage to ensure weak handles are cleared.
374 CcTest::heap()->CollectAllGarbage(); 374 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask);
375 CcTest::heap()->CollectAllGarbage(Heap::kMakeHeapIterableMask); 375 CcTest::CollectAllGarbage(Heap::kMakeHeapIterableMask);
376 376
377 // Iterate the head and check that there are no debugger related objects left. 377 // Iterate the head and check that there are no debugger related objects left.
378 HeapIterator iterator(CcTest::heap()); 378 HeapIterator iterator(CcTest::heap());
379 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { 379 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
380 CHECK(!obj->IsDebugInfo()); 380 CHECK(!obj->IsDebugInfo());
381 CHECK(!obj->IsBreakPointInfo()); 381 CHECK(!obj->IsBreakPointInfo());
382 382
383 // If deep check of functions is requested check that no debug break code 383 // If deep check of functions is requested check that no debug break code
384 // is left in all functions. 384 // is left in all functions.
385 if (check_functions) { 385 if (check_functions) {
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 // When hitting a debug event listener there must be a break set. 793 // When hitting a debug event listener there must be a break set.
794 CHECK_NE(debug->break_id(), 0); 794 CHECK_NE(debug->break_id(), 0);
795 795
796 // Perform a garbage collection when break point is hit and continue. Based 796 // Perform a garbage collection when break point is hit and continue. Based
797 // on the number of break points hit either scavenge or mark compact 797 // on the number of break points hit either scavenge or mark compact
798 // collector is used. 798 // collector is used.
799 if (event == v8::Break) { 799 if (event == v8::Break) {
800 break_point_hit_count++; 800 break_point_hit_count++;
801 if (break_point_hit_count % 2 == 0) { 801 if (break_point_hit_count % 2 == 0) {
802 // Scavenge. 802 // Scavenge.
803 CcTest::heap()->CollectGarbage(v8::internal::NEW_SPACE); 803 CcTest::CollectGarbage(v8::internal::NEW_SPACE);
804 } else { 804 } else {
805 // Mark sweep compact. 805 // Mark sweep compact.
806 CcTest::heap()->CollectAllGarbage(); 806 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask);
807 } 807 }
808 } 808 }
809 } 809 }
810 810
811 811
812 // Debug event handler which re-issues a debug break and calls the garbage 812 // Debug event handler which re-issues a debug break and calls the garbage
813 // collector to have the heap verified. 813 // collector to have the heap verified.
814 static void DebugEventBreak( 814 static void DebugEventBreak(
815 const v8::Debug::EventDetails& event_details) { 815 const v8::Debug::EventDetails& event_details) {
816 v8::DebugEvent event = event_details.GetEvent(); 816 v8::DebugEvent event = event_details.GetEvent();
817 v8::internal::Debug* debug = CcTest::i_isolate()->debug(); 817 v8::internal::Debug* debug = CcTest::i_isolate()->debug();
818 // When hitting a debug event listener there must be a break set. 818 // When hitting a debug event listener there must be a break set.
819 CHECK_NE(debug->break_id(), 0); 819 CHECK_NE(debug->break_id(), 0);
820 820
821 if (event == v8::Break) { 821 if (event == v8::Break) {
822 // Count the number of breaks. 822 // Count the number of breaks.
823 break_point_hit_count++; 823 break_point_hit_count++;
824 824
825 // Run the garbage collector to enforce heap verification if option 825 // Run the garbage collector to enforce heap verification if option
826 // --verify-heap is set. 826 // --verify-heap is set.
827 CcTest::heap()->CollectGarbage(v8::internal::NEW_SPACE); 827 CcTest::CollectGarbage(v8::internal::NEW_SPACE);
828 828
829 // Set the break flag again to come back here as soon as possible. 829 // Set the break flag again to come back here as soon as possible.
830 v8::Debug::DebugBreak(CcTest::isolate()); 830 v8::Debug::DebugBreak(CcTest::isolate());
831 } 831 }
832 } 832 }
833 833
834 834
835 // Debug event handler which re-issues a debug break until a limit has been 835 // Debug event handler which re-issues a debug break until a limit has been
836 // reached. 836 // reached.
837 int max_break_point_hit_count = 0; 837 int max_break_point_hit_count = 0;
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
1210 static void CallAndGC(v8::Local<v8::Context> context, 1210 static void CallAndGC(v8::Local<v8::Context> context,
1211 v8::Local<v8::Object> recv, v8::Local<v8::Function> f) { 1211 v8::Local<v8::Object> recv, v8::Local<v8::Function> f) {
1212 break_point_hit_count = 0; 1212 break_point_hit_count = 0;
1213 1213
1214 for (int i = 0; i < 3; i++) { 1214 for (int i = 0; i < 3; i++) {
1215 // Call function. 1215 // Call function.
1216 f->Call(context, recv, 0, NULL).ToLocalChecked(); 1216 f->Call(context, recv, 0, NULL).ToLocalChecked();
1217 CHECK_EQ(1 + i * 3, break_point_hit_count); 1217 CHECK_EQ(1 + i * 3, break_point_hit_count);
1218 1218
1219 // Scavenge and call function. 1219 // Scavenge and call function.
1220 CcTest::heap()->CollectGarbage(v8::internal::NEW_SPACE); 1220 CcTest::CollectGarbage(v8::internal::NEW_SPACE);
1221 f->Call(context, recv, 0, NULL).ToLocalChecked(); 1221 f->Call(context, recv, 0, NULL).ToLocalChecked();
1222 CHECK_EQ(2 + i * 3, break_point_hit_count); 1222 CHECK_EQ(2 + i * 3, break_point_hit_count);
1223 1223
1224 // Mark sweep (and perhaps compact) and call function. 1224 // Mark sweep (and perhaps compact) and call function.
1225 CcTest::heap()->CollectAllGarbage(); 1225 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask);
1226 f->Call(context, recv, 0, NULL).ToLocalChecked(); 1226 f->Call(context, recv, 0, NULL).ToLocalChecked();
1227 CHECK_EQ(3 + i * 3, break_point_hit_count); 1227 CHECK_EQ(3 + i * 3, break_point_hit_count);
1228 } 1228 }
1229 } 1229 }
1230 1230
1231 1231
1232 // Test that a break point can be set at a return store location. 1232 // Test that a break point can be set at a return store location.
1233 TEST(BreakPointSurviveGC) { 1233 TEST(BreakPointSurviveGC) {
1234 break_point_hit_count = 0; 1234 break_point_hit_count = 0;
1235 DebugLocalContext env; 1235 DebugLocalContext env;
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
2073 v8::Local<v8::Function> f; 2073 v8::Local<v8::Function> f;
2074 { 2074 {
2075 v8::HandleScope scope(env->GetIsolate()); 2075 v8::HandleScope scope(env->GetIsolate());
2076 CompileRunWithOrigin(script, "test.html"); 2076 CompileRunWithOrigin(script, "test.html");
2077 } 2077 }
2078 f = v8::Local<v8::Function>::Cast( 2078 f = v8::Local<v8::Function>::Cast(
2079 env->Global() 2079 env->Global()
2080 ->Get(context, v8_str(env->GetIsolate(), "f")) 2080 ->Get(context, v8_str(env->GetIsolate(), "f"))
2081 .ToLocalChecked()); 2081 .ToLocalChecked());
2082 2082
2083 CcTest::heap()->CollectAllGarbage(); 2083 CcTest::CollectAllGarbage(i::Heap::kFinalizeIncrementalMarkingMask);
2084 2084
2085 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 3, -1); 2085 SetScriptBreakPointByNameFromJS(env->GetIsolate(), "test.html", 3, -1);
2086 2086
2087 // Call f and check that there was no break points. 2087 // Call f and check that there was no break points.
2088 break_point_hit_count = 0; 2088 break_point_hit_count = 0;
2089 f->Call(context, env->Global(), 0, NULL).ToLocalChecked(); 2089 f->Call(context, env->Global(), 0, NULL).ToLocalChecked();
2090 CHECK_EQ(0, break_point_hit_count); 2090 CHECK_EQ(0, break_point_hit_count);
2091 2091
2092 // Recompile and run script and check that break point was hit. 2092 // Recompile and run script and check that break point was hit.
2093 break_point_hit_count = 0; 2093 break_point_hit_count = 0;
(...skipping 6089 matching lines...) Expand 10 before | Expand all | Expand 10 after
8183 "function foo() {\n" 8183 "function foo() {\n"
8184 " try { throw new Error(); } catch (e) {}\n" 8184 " try { throw new Error(); } catch (e) {}\n"
8185 "}\n" 8185 "}\n"
8186 "debugger;\n" 8186 "debugger;\n"
8187 "foo();\n" 8187 "foo();\n"
8188 "foo();\n"); 8188 "foo();\n");
8189 8189
8190 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr); 8190 v8::Debug::SetDebugEventListener(env->GetIsolate(), nullptr);
8191 CHECK_EQ(break_point_hit_count, 4); 8191 CHECK_EQ(break_point_hit_count, 4);
8192 } 8192 }
OLDNEW
« no previous file with comments | « test/cctest/test-cpu-profiler.cc ('k') | test/cctest/test-decls.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698