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

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

Issue 177243012: heap: allow allocation in gc prologue/epilogue (Closed) Base URL: gh:v8/v8@master
Patch Set: fixes Created 6 years, 9 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 | « src/heap-inl.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 18545 matching lines...) Expand 10 before | Expand all | Expand 10 after
18556 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); 18556 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value());
18557 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); 18557 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value());
18558 } 18558 }
18559 } 18559 }
18560 18560
18561 v8::Isolate* gc_callbacks_isolate = NULL; 18561 v8::Isolate* gc_callbacks_isolate = NULL;
18562 int prologue_call_count = 0; 18562 int prologue_call_count = 0;
18563 int epilogue_call_count = 0; 18563 int epilogue_call_count = 0;
18564 int prologue_call_count_second = 0; 18564 int prologue_call_count_second = 0;
18565 int epilogue_call_count_second = 0; 18565 int epilogue_call_count_second = 0;
18566 int prologue_call_count_alloc = 0;
18567 int epilogue_call_count_alloc = 0;
18566 18568
18567 void PrologueCallback(v8::GCType, v8::GCCallbackFlags flags) { 18569 void PrologueCallback(v8::GCType, v8::GCCallbackFlags flags) {
18568 CHECK_EQ(flags, v8::kNoGCCallbackFlags); 18570 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
18569 ++prologue_call_count; 18571 ++prologue_call_count;
18570 } 18572 }
18571 18573
18572 18574
18573 void PrologueCallback(v8::Isolate* isolate, 18575 void PrologueCallback(v8::Isolate* isolate,
18574 v8::GCType, 18576 v8::GCType,
18575 v8::GCCallbackFlags flags) { 18577 v8::GCCallbackFlags flags) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
18617 18619
18618 void EpilogueCallbackSecond(v8::Isolate* isolate, 18620 void EpilogueCallbackSecond(v8::Isolate* isolate,
18619 v8::GCType, 18621 v8::GCType,
18620 v8::GCCallbackFlags flags) { 18622 v8::GCCallbackFlags flags) {
18621 CHECK_EQ(flags, v8::kNoGCCallbackFlags); 18623 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
18622 CHECK_EQ(gc_callbacks_isolate, isolate); 18624 CHECK_EQ(gc_callbacks_isolate, isolate);
18623 ++epilogue_call_count_second; 18625 ++epilogue_call_count_second;
18624 } 18626 }
18625 18627
18626 18628
18629 void PrologueCallbackAlloc(v8::Isolate* isolate,
18630 v8::GCType,
18631 v8::GCCallbackFlags flags) {
18632 v8::HandleScope scope(isolate);
18633
18634 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
18635 CHECK_EQ(gc_callbacks_isolate, isolate);
18636 ++prologue_call_count_alloc;
18637
18638 // Simulate full heap to see if we will reenter this callback
18639 SimulateFullSpace(CcTest::heap()->new_space());
18640
18641 Local<Object> obj = Object::New(isolate);
18642 ASSERT(!obj.IsEmpty());
18643
18644 CcTest::heap()->CollectAllGarbage(
18645 i::Heap::Heap::kAbortIncrementalMarkingMask);
18646 }
18647
18648
18649 void EpilogueCallbackAlloc(v8::Isolate* isolate,
18650 v8::GCType,
18651 v8::GCCallbackFlags flags) {
18652 v8::HandleScope scope(isolate);
18653
18654 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
18655 CHECK_EQ(gc_callbacks_isolate, isolate);
18656 ++epilogue_call_count_alloc;
18657
18658 // Simulate full heap to see if we will reenter this callback
18659 SimulateFullSpace(CcTest::heap()->new_space());
18660
18661 Local<Object> obj = Object::New(isolate);
18662 ASSERT(!obj.IsEmpty());
18663
18664 CcTest::heap()->CollectAllGarbage(
18665 i::Heap::Heap::kAbortIncrementalMarkingMask);
18666 }
18667
18668
18627 TEST(GCCallbacksOld) { 18669 TEST(GCCallbacksOld) {
18628 LocalContext context; 18670 LocalContext context;
18629 18671
18630 v8::V8::AddGCPrologueCallback(PrologueCallback); 18672 v8::V8::AddGCPrologueCallback(PrologueCallback);
18631 v8::V8::AddGCEpilogueCallback(EpilogueCallback); 18673 v8::V8::AddGCEpilogueCallback(EpilogueCallback);
18632 CHECK_EQ(0, prologue_call_count); 18674 CHECK_EQ(0, prologue_call_count);
18633 CHECK_EQ(0, epilogue_call_count); 18675 CHECK_EQ(0, epilogue_call_count);
18634 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); 18676 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags);
18635 CHECK_EQ(1, prologue_call_count); 18677 CHECK_EQ(1, prologue_call_count);
18636 CHECK_EQ(1, epilogue_call_count); 18678 CHECK_EQ(1, epilogue_call_count);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
18683 CHECK_EQ(2, epilogue_call_count); 18725 CHECK_EQ(2, epilogue_call_count);
18684 CHECK_EQ(2, prologue_call_count_second); 18726 CHECK_EQ(2, prologue_call_count_second);
18685 CHECK_EQ(2, epilogue_call_count_second); 18727 CHECK_EQ(2, epilogue_call_count_second);
18686 isolate->RemoveGCPrologueCallback(PrologueCallbackSecond); 18728 isolate->RemoveGCPrologueCallback(PrologueCallbackSecond);
18687 isolate->RemoveGCEpilogueCallback(EpilogueCallbackSecond); 18729 isolate->RemoveGCEpilogueCallback(EpilogueCallbackSecond);
18688 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); 18730 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags);
18689 CHECK_EQ(2, prologue_call_count); 18731 CHECK_EQ(2, prologue_call_count);
18690 CHECK_EQ(2, epilogue_call_count); 18732 CHECK_EQ(2, epilogue_call_count);
18691 CHECK_EQ(2, prologue_call_count_second); 18733 CHECK_EQ(2, prologue_call_count_second);
18692 CHECK_EQ(2, epilogue_call_count_second); 18734 CHECK_EQ(2, epilogue_call_count_second);
18735
18736 CHECK_EQ(0, prologue_call_count_alloc);
18737 CHECK_EQ(0, epilogue_call_count_alloc);
18738 isolate->AddGCPrologueCallback(PrologueCallbackAlloc);
18739 isolate->AddGCEpilogueCallback(EpilogueCallbackAlloc);
18740 CcTest::heap()->CollectAllGarbage(
18741 i::Heap::Heap::kAbortIncrementalMarkingMask);
18742 CHECK_EQ(1, prologue_call_count_alloc);
18743 CHECK_EQ(1, epilogue_call_count_alloc);
18744 isolate->RemoveGCPrologueCallback(PrologueCallbackAlloc);
18745 isolate->RemoveGCEpilogueCallback(EpilogueCallbackAlloc);
18693 } 18746 }
18694 18747
18695 18748
18696 THREADED_TEST(AddToJSFunctionResultCache) { 18749 THREADED_TEST(AddToJSFunctionResultCache) {
18697 i::FLAG_stress_compaction = false; 18750 i::FLAG_stress_compaction = false;
18698 i::FLAG_allow_natives_syntax = true; 18751 i::FLAG_allow_natives_syntax = true;
18699 v8::HandleScope scope(CcTest::isolate()); 18752 v8::HandleScope scope(CcTest::isolate());
18700 18753
18701 LocalContext context; 18754 LocalContext context;
18702 18755
(...skipping 3406 matching lines...) Expand 10 before | Expand all | Expand 10 after
22109 Local<Object> ApiCallOptimizationChecker::holder; 22162 Local<Object> ApiCallOptimizationChecker::holder;
22110 Local<Object> ApiCallOptimizationChecker::callee; 22163 Local<Object> ApiCallOptimizationChecker::callee;
22111 int ApiCallOptimizationChecker::count = 0; 22164 int ApiCallOptimizationChecker::count = 0;
22112 22165
22113 22166
22114 TEST(TestFunctionCallOptimization) { 22167 TEST(TestFunctionCallOptimization) {
22115 i::FLAG_allow_natives_syntax = true; 22168 i::FLAG_allow_natives_syntax = true;
22116 ApiCallOptimizationChecker checker; 22169 ApiCallOptimizationChecker checker;
22117 checker.RunAll(); 22170 checker.RunAll();
22118 } 22171 }
OLDNEW
« no previous file with comments | « src/heap-inl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698