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

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

Issue 1314853002: [heap] Make the current GCCallbackFlags are part of {Heap}. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 5 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/cctest.h ('k') | no next file » | 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 2572 matching lines...) Expand 10 before | Expand all | Expand 10 after
2583 "function mkbar () { return new (new Function(\"\")) (); }" 2583 "function mkbar () { return new (new Function(\"\")) (); }"
2584 "function f (x) { return (x instanceof foo); }" 2584 "function f (x) { return (x instanceof foo); }"
2585 "function g () { f(mkbar()); }" 2585 "function g () { f(mkbar()); }"
2586 "f(new foo()); f(new foo());" 2586 "f(new foo()); f(new foo());"
2587 "%OptimizeFunctionOnNextCall(f);" 2587 "%OptimizeFunctionOnNextCall(f);"
2588 "f(new foo()); g();"); 2588 "f(new foo()); g();");
2589 } 2589 }
2590 2590
2591 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); 2591 IncrementalMarking* marking = CcTest::heap()->incremental_marking();
2592 marking->Stop(); 2592 marking->Stop();
2593 marking->Start(Heap::kNoGCFlags); 2593 CcTest::heap()->StartIncrementalMarking();
2594 2594
2595 Handle<JSFunction> f = 2595 Handle<JSFunction> f =
2596 v8::Utils::OpenHandle( 2596 v8::Utils::OpenHandle(
2597 *v8::Handle<v8::Function>::Cast( 2597 *v8::Handle<v8::Function>::Cast(
2598 CcTest::global()->Get(v8_str("f")))); 2598 CcTest::global()->Get(v8_str("f"))));
2599 2599
2600 CHECK(f->IsOptimized()); 2600 CHECK(f->IsOptimized());
2601 2601
2602 while (!Marking::IsBlack(Marking::MarkBitFrom(f->code())) && 2602 while (!Marking::IsBlack(Marking::MarkBitFrom(f->code())) &&
2603 !marking->IsStopped()) { 2603 !marking->IsStopped()) {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
2711 "f();"); 2711 "f();");
2712 } 2712 }
2713 Handle<JSFunction> f = 2713 Handle<JSFunction> f =
2714 v8::Utils::OpenHandle( 2714 v8::Utils::OpenHandle(
2715 *v8::Handle<v8::Function>::Cast( 2715 *v8::Handle<v8::Function>::Cast(
2716 CcTest::global()->Get(v8_str("f")))); 2716 CcTest::global()->Get(v8_str("f"))));
2717 CHECK(f->IsOptimized()); 2717 CHECK(f->IsOptimized());
2718 2718
2719 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); 2719 IncrementalMarking* marking = CcTest::heap()->incremental_marking();
2720 marking->Stop(); 2720 marking->Stop();
2721 marking->Start(Heap::kNoGCFlags); 2721 CcTest::heap()->StartIncrementalMarking();
2722 // The following calls will increment CcTest::heap()->global_ic_age(). 2722 // The following calls will increment CcTest::heap()->global_ic_age().
2723 CcTest::isolate()->ContextDisposedNotification(); 2723 CcTest::isolate()->ContextDisposedNotification();
2724 SimulateIncrementalMarking(CcTest::heap()); 2724 SimulateIncrementalMarking(CcTest::heap());
2725 CcTest::heap()->CollectAllGarbage(); 2725 CcTest::heap()->CollectAllGarbage();
2726 CHECK_EQ(CcTest::heap()->global_ic_age(), f->shared()->ic_age()); 2726 CHECK_EQ(CcTest::heap()->global_ic_age(), f->shared()->ic_age());
2727 CHECK_EQ(0, f->shared()->opt_count()); 2727 CHECK_EQ(0, f->shared()->opt_count());
2728 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); 2728 CHECK_EQ(0, f->shared()->code()->profiler_ticks());
2729 } 2729 }
2730 2730
2731 2731
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2768 CHECK_EQ(0, f->shared()->opt_count()); 2768 CHECK_EQ(0, f->shared()->opt_count());
2769 CHECK_EQ(0, f->shared()->code()->profiler_ticks()); 2769 CHECK_EQ(0, f->shared()->code()->profiler_ticks());
2770 } 2770 }
2771 2771
2772 2772
2773 HEAP_TEST(GCFlags) { 2773 HEAP_TEST(GCFlags) {
2774 CcTest::InitializeVM(); 2774 CcTest::InitializeVM();
2775 Heap* heap = CcTest::heap(); 2775 Heap* heap = CcTest::heap();
2776 2776
2777 heap->set_current_gc_flags(Heap::kNoGCFlags); 2777 heap->set_current_gc_flags(Heap::kNoGCFlags);
2778 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags()); 2778 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_);
2779 2779
2780 // Set the flags to check whether we appropriately resets them after the GC. 2780 // Set the flags to check whether we appropriately resets them after the GC.
2781 heap->set_current_gc_flags(Heap::kAbortIncrementalMarkingMask); 2781 heap->set_current_gc_flags(Heap::kAbortIncrementalMarkingMask);
2782 heap->CollectAllGarbage(Heap::kReduceMemoryFootprintMask); 2782 heap->CollectAllGarbage(Heap::kReduceMemoryFootprintMask);
2783 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags()); 2783 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_);
2784 2784
2785 MarkCompactCollector* collector = heap->mark_compact_collector(); 2785 MarkCompactCollector* collector = heap->mark_compact_collector();
2786 if (collector->sweeping_in_progress()) { 2786 if (collector->sweeping_in_progress()) {
2787 collector->EnsureSweepingCompleted(); 2787 collector->EnsureSweepingCompleted();
2788 } 2788 }
2789 2789
2790 IncrementalMarking* marking = heap->incremental_marking(); 2790 IncrementalMarking* marking = heap->incremental_marking();
2791 marking->Stop(); 2791 marking->Stop();
2792 marking->Start(Heap::kReduceMemoryFootprintMask); 2792 heap->StartIncrementalMarking(Heap::kReduceMemoryFootprintMask);
2793 CHECK_NE(0, heap->current_gc_flags() & Heap::kReduceMemoryFootprintMask); 2793 CHECK_NE(0, heap->current_gc_flags_ & Heap::kReduceMemoryFootprintMask);
2794 2794
2795 heap->CollectGarbage(NEW_SPACE); 2795 heap->CollectGarbage(NEW_SPACE);
2796 // NewSpace scavenges should not overwrite the flags. 2796 // NewSpace scavenges should not overwrite the flags.
2797 CHECK_NE(0, heap->current_gc_flags() & Heap::kReduceMemoryFootprintMask); 2797 CHECK_NE(0, heap->current_gc_flags_ & Heap::kReduceMemoryFootprintMask);
2798 2798
2799 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask); 2799 heap->CollectAllGarbage(Heap::kAbortIncrementalMarkingMask);
2800 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags()); 2800 CHECK_EQ(Heap::kNoGCFlags, heap->current_gc_flags_);
2801 } 2801 }
2802 2802
2803 2803
2804 TEST(IdleNotificationFinishMarking) { 2804 TEST(IdleNotificationFinishMarking) {
2805 i::FLAG_allow_natives_syntax = true; 2805 i::FLAG_allow_natives_syntax = true;
2806 CcTest::InitializeVM(); 2806 CcTest::InitializeVM();
2807 SimulateFullSpace(CcTest::heap()->old_space()); 2807 SimulateFullSpace(CcTest::heap()->old_space());
2808 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); 2808 IncrementalMarking* marking = CcTest::heap()->incremental_marking();
2809 marking->Stop(); 2809 marking->Stop();
2810 marking->Start(Heap::kNoGCFlags); 2810 CcTest::heap()->StartIncrementalMarking();
2811 2811
2812 CHECK_EQ(CcTest::heap()->gc_count(), 0); 2812 CHECK_EQ(CcTest::heap()->gc_count(), 0);
2813 2813
2814 // TODO(hpayer): We cannot write proper unit test right now for heap. 2814 // TODO(hpayer): We cannot write proper unit test right now for heap.
2815 // The ideal test would call kMaxIdleMarkingDelayCounter to test the 2815 // The ideal test would call kMaxIdleMarkingDelayCounter to test the
2816 // marking delay counter. 2816 // marking delay counter.
2817 2817
2818 // Perform a huge incremental marking step but don't complete marking. 2818 // Perform a huge incremental marking step but don't complete marking.
2819 intptr_t bytes_processed = 0; 2819 intptr_t bytes_processed = 0;
2820 do { 2820 do {
(...skipping 1932 matching lines...) Expand 10 before | Expand all | Expand 10 after
4753 4753
4754 TEST(IncrementalMarkingStepMakesBigProgressWithLargeObjects) { 4754 TEST(IncrementalMarkingStepMakesBigProgressWithLargeObjects) {
4755 CcTest::InitializeVM(); 4755 CcTest::InitializeVM();
4756 v8::HandleScope scope(CcTest::isolate()); 4756 v8::HandleScope scope(CcTest::isolate());
4757 CompileRun("function f(n) {" 4757 CompileRun("function f(n) {"
4758 " var a = new Array(n);" 4758 " var a = new Array(n);"
4759 " for (var i = 0; i < n; i += 100) a[i] = i;" 4759 " for (var i = 0; i < n; i += 100) a[i] = i;"
4760 "};" 4760 "};"
4761 "f(10 * 1024 * 1024);"); 4761 "f(10 * 1024 * 1024);");
4762 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); 4762 IncrementalMarking* marking = CcTest::heap()->incremental_marking();
4763 if (marking->IsStopped()) marking->Start(Heap::kNoGCFlags); 4763 if (marking->IsStopped()) {
4764 CcTest::heap()->StartIncrementalMarking();
4765 }
4764 // This big step should be sufficient to mark the whole array. 4766 // This big step should be sufficient to mark the whole array.
4765 marking->Step(100 * MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD); 4767 marking->Step(100 * MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD);
4766 DCHECK(marking->IsComplete() || 4768 DCHECK(marking->IsComplete() ||
4767 marking->IsReadyToOverApproximateWeakClosure()); 4769 marking->IsReadyToOverApproximateWeakClosure());
4768 } 4770 }
4769 4771
4770 4772
4771 TEST(DisableInlineAllocation) { 4773 TEST(DisableInlineAllocation) {
4772 i::FLAG_allow_natives_syntax = true; 4774 i::FLAG_allow_natives_syntax = true;
4773 CcTest::InitializeVM(); 4775 CcTest::InitializeVM();
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
5481 Handle<FixedArray> survivor = factory->NewFixedArray(1, NOT_TENURED); 5483 Handle<FixedArray> survivor = factory->NewFixedArray(1, NOT_TENURED);
5482 Handle<WeakCell> weak_cells[N]; 5484 Handle<WeakCell> weak_cells[N];
5483 5485
5484 for (int i = 0; i < N; i++) { 5486 for (int i = 0; i < N; i++) {
5485 HandleScope inner_scope(isolate); 5487 HandleScope inner_scope(isolate);
5486 Handle<HeapObject> value = 5488 Handle<HeapObject> value =
5487 i == 0 ? survivor : factory->NewFixedArray(1, NOT_TENURED); 5489 i == 0 ? survivor : factory->NewFixedArray(1, NOT_TENURED);
5488 Handle<WeakCell> weak_cell = factory->NewWeakCell(value); 5490 Handle<WeakCell> weak_cell = factory->NewWeakCell(value);
5489 CHECK(weak_cell->value()->IsFixedArray()); 5491 CHECK(weak_cell->value()->IsFixedArray());
5490 IncrementalMarking* marking = heap->incremental_marking(); 5492 IncrementalMarking* marking = heap->incremental_marking();
5491 if (marking->IsStopped()) marking->Start(Heap::kNoGCFlags); 5493 if (marking->IsStopped()) {
5494 heap->StartIncrementalMarking();
5495 }
5492 marking->Step(128, IncrementalMarking::NO_GC_VIA_STACK_GUARD); 5496 marking->Step(128, IncrementalMarking::NO_GC_VIA_STACK_GUARD);
5493 heap->CollectGarbage(NEW_SPACE); 5497 heap->CollectGarbage(NEW_SPACE);
5494 CHECK(weak_cell->value()->IsFixedArray()); 5498 CHECK(weak_cell->value()->IsFixedArray());
5495 weak_cells[i] = inner_scope.CloseAndEscape(weak_cell); 5499 weak_cells[i] = inner_scope.CloseAndEscape(weak_cell);
5496 } 5500 }
5497 heap->CollectAllGarbage(); 5501 heap->CollectAllGarbage();
5498 CHECK_EQ(*survivor, weak_cells[0]->value()); 5502 CHECK_EQ(*survivor, weak_cells[0]->value());
5499 for (int i = 1; i < N; i++) { 5503 for (int i = 1; i < N; i++) {
5500 CHECK(weak_cells[i]->cleared()); 5504 CHECK(weak_cells[i]->cleared());
5501 } 5505 }
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
5774 // Ensure that the object allocated where we need it. 5778 // Ensure that the object allocated where we need it.
5775 Page* page = Page::FromAddress(o->address()); 5779 Page* page = Page::FromAddress(o->address());
5776 CHECK_EQ(desired_offset, page->Offset(o->address())); 5780 CHECK_EQ(desired_offset, page->Offset(o->address()));
5777 5781
5778 // Now we have an object right at the end of the page. 5782 // Now we have an object right at the end of the page.
5779 5783
5780 // Enable incremental marking to trigger actions in Heap::AdjustLiveBytes() 5784 // Enable incremental marking to trigger actions in Heap::AdjustLiveBytes()
5781 // that would cause crash. 5785 // that would cause crash.
5782 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); 5786 IncrementalMarking* marking = CcTest::heap()->incremental_marking();
5783 marking->Stop(); 5787 marking->Stop();
5784 marking->Start(Heap::kNoGCFlags); 5788 CcTest::heap()->StartIncrementalMarking();
5785 CHECK(marking->IsMarking()); 5789 CHECK(marking->IsMarking());
5786 5790
5787 // Now everything is set up for crashing in JSObject::MigrateFastToFast() 5791 // Now everything is set up for crashing in JSObject::MigrateFastToFast()
5788 // when it calls heap->AdjustLiveBytes(...). 5792 // when it calls heap->AdjustLiveBytes(...).
5789 JSObject::MigrateToMap(o, map2); 5793 JSObject::MigrateToMap(o, map2);
5790 } 5794 }
5791 5795
5792 5796
5793 TEST(Regress3631) { 5797 TEST(Regress3631) {
5794 i::FLAG_expose_gc = true; 5798 i::FLAG_expose_gc = true;
5795 CcTest::InitializeVM(); 5799 CcTest::InitializeVM();
5796 v8::HandleScope scope(CcTest::isolate()); 5800 v8::HandleScope scope(CcTest::isolate());
5797 Isolate* isolate = CcTest::i_isolate(); 5801 Isolate* isolate = CcTest::i_isolate();
5798 Heap* heap = isolate->heap(); 5802 Heap* heap = isolate->heap();
5799 IncrementalMarking* marking = CcTest::heap()->incremental_marking(); 5803 IncrementalMarking* marking = CcTest::heap()->incremental_marking();
5800 v8::Local<v8::Value> result = CompileRun( 5804 v8::Local<v8::Value> result = CompileRun(
5801 "var weak_map = new WeakMap();" 5805 "var weak_map = new WeakMap();"
5802 "var future_keys = [];" 5806 "var future_keys = [];"
5803 "for (var i = 0; i < 50; i++) {" 5807 "for (var i = 0; i < 50; i++) {"
5804 " var key = {'k' : i + 0.1};" 5808 " var key = {'k' : i + 0.1};"
5805 " weak_map.set(key, 1);" 5809 " weak_map.set(key, 1);"
5806 " future_keys.push({'x' : i + 0.2});" 5810 " future_keys.push({'x' : i + 0.2});"
5807 "}" 5811 "}"
5808 "weak_map"); 5812 "weak_map");
5809 if (marking->IsStopped()) { 5813 if (marking->IsStopped()) {
5810 marking->Start(Heap::kNoGCFlags); 5814 CcTest::heap()->StartIncrementalMarking();
5811 } 5815 }
5812 // Incrementally mark the backing store. 5816 // Incrementally mark the backing store.
5813 Handle<JSObject> obj = 5817 Handle<JSObject> obj =
5814 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(result)); 5818 v8::Utils::OpenHandle(*v8::Handle<v8::Object>::Cast(result));
5815 Handle<JSWeakCollection> weak_map(reinterpret_cast<JSWeakCollection*>(*obj)); 5819 Handle<JSWeakCollection> weak_map(reinterpret_cast<JSWeakCollection*>(*obj));
5816 while (!Marking::IsBlack( 5820 while (!Marking::IsBlack(
5817 Marking::MarkBitFrom(HeapObject::cast(weak_map->table()))) && 5821 Marking::MarkBitFrom(HeapObject::cast(weak_map->table()))) &&
5818 !marking->IsStopped()) { 5822 !marking->IsStopped()) {
5819 marking->Step(MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD); 5823 marking->Step(MB, IncrementalMarking::NO_GC_VIA_STACK_GUARD);
5820 } 5824 }
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
6521 { 6525 {
6522 SharedFunctionInfo::Iterator iterator(isolate); 6526 SharedFunctionInfo::Iterator iterator(isolate);
6523 while (iterator.Next()) sfi_count--; 6527 while (iterator.Next()) sfi_count--;
6524 } 6528 }
6525 6529
6526 CHECK_EQ(0, sfi_count); 6530 CHECK_EQ(0, sfi_count);
6527 } 6531 }
6528 6532
6529 } // namespace internal 6533 } // namespace internal
6530 } // namespace v8 6534 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/cctest.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698