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

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: disallow re-entering callbacks 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());
Hannes Payer (out of office) 2014/03/11 10:57:20 Can we call CcTest::heap()->CollectAllGarbage(i::H
18643 }
18644
18645
18646 void EpilogueCallbackAlloc(v8::Isolate* isolate,
18647 v8::GCType,
18648 v8::GCCallbackFlags flags) {
18649 v8::HandleScope scope(isolate);
18650
18651 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
18652 CHECK_EQ(gc_callbacks_isolate, isolate);
18653 ++epilogue_call_count_alloc;
18654
18655 // Simulate full heap to see if we will reenter this callback
18656 SimulateFullSpace(CcTest::heap()->new_space());
18657
18658 Local<Object> obj = Object::New(isolate);
18659 ASSERT(!obj.IsEmpty());
Hannes Payer (out of office) 2014/03/11 10:57:20 Can we call CcTest::heap()->CollectAllGarbage(i::H
18660 }
18661
18662
18627 TEST(GCCallbacksOld) { 18663 TEST(GCCallbacksOld) {
18628 LocalContext context; 18664 LocalContext context;
18629 18665
18630 v8::V8::AddGCPrologueCallback(PrologueCallback); 18666 v8::V8::AddGCPrologueCallback(PrologueCallback);
18631 v8::V8::AddGCEpilogueCallback(EpilogueCallback); 18667 v8::V8::AddGCEpilogueCallback(EpilogueCallback);
18632 CHECK_EQ(0, prologue_call_count); 18668 CHECK_EQ(0, prologue_call_count);
18633 CHECK_EQ(0, epilogue_call_count); 18669 CHECK_EQ(0, epilogue_call_count);
18634 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); 18670 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags);
18635 CHECK_EQ(1, prologue_call_count); 18671 CHECK_EQ(1, prologue_call_count);
18636 CHECK_EQ(1, epilogue_call_count); 18672 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); 18719 CHECK_EQ(2, epilogue_call_count);
18684 CHECK_EQ(2, prologue_call_count_second); 18720 CHECK_EQ(2, prologue_call_count_second);
18685 CHECK_EQ(2, epilogue_call_count_second); 18721 CHECK_EQ(2, epilogue_call_count_second);
18686 isolate->RemoveGCPrologueCallback(PrologueCallbackSecond); 18722 isolate->RemoveGCPrologueCallback(PrologueCallbackSecond);
18687 isolate->RemoveGCEpilogueCallback(EpilogueCallbackSecond); 18723 isolate->RemoveGCEpilogueCallback(EpilogueCallbackSecond);
18688 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); 18724 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags);
18689 CHECK_EQ(2, prologue_call_count); 18725 CHECK_EQ(2, prologue_call_count);
18690 CHECK_EQ(2, epilogue_call_count); 18726 CHECK_EQ(2, epilogue_call_count);
18691 CHECK_EQ(2, prologue_call_count_second); 18727 CHECK_EQ(2, prologue_call_count_second);
18692 CHECK_EQ(2, epilogue_call_count_second); 18728 CHECK_EQ(2, epilogue_call_count_second);
18729
18730 CHECK_EQ(0, prologue_call_count_alloc);
18731 CHECK_EQ(0, epilogue_call_count_alloc);
18732 isolate->AddGCPrologueCallback(PrologueCallbackAlloc);
18733 isolate->AddGCEpilogueCallback(EpilogueCallbackAlloc);
18734 CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags);
Hannes Payer (out of office) 2014/03/11 10:57:20 CcTest::heap()->CollectAllGarbage(i::Heap::Heap::k
18735 CHECK_EQ(1, prologue_call_count_alloc);
18736 CHECK_EQ(1, epilogue_call_count_alloc);
18737 isolate->RemoveGCPrologueCallback(PrologueCallbackAlloc);
18738 isolate->RemoveGCEpilogueCallback(EpilogueCallbackAlloc);
18693 } 18739 }
18694 18740
18695 18741
18696 THREADED_TEST(AddToJSFunctionResultCache) { 18742 THREADED_TEST(AddToJSFunctionResultCache) {
18697 i::FLAG_stress_compaction = false; 18743 i::FLAG_stress_compaction = false;
18698 i::FLAG_allow_natives_syntax = true; 18744 i::FLAG_allow_natives_syntax = true;
18699 v8::HandleScope scope(CcTest::isolate()); 18745 v8::HandleScope scope(CcTest::isolate());
18700 18746
18701 LocalContext context; 18747 LocalContext context;
18702 18748
(...skipping 3406 matching lines...) Expand 10 before | Expand all | Expand 10 after
22109 Local<Object> ApiCallOptimizationChecker::holder; 22155 Local<Object> ApiCallOptimizationChecker::holder;
22110 Local<Object> ApiCallOptimizationChecker::callee; 22156 Local<Object> ApiCallOptimizationChecker::callee;
22111 int ApiCallOptimizationChecker::count = 0; 22157 int ApiCallOptimizationChecker::count = 0;
22112 22158
22113 22159
22114 TEST(TestFunctionCallOptimization) { 22160 TEST(TestFunctionCallOptimization) {
22115 i::FLAG_allow_natives_syntax = true; 22161 i::FLAG_allow_natives_syntax = true;
22116 ApiCallOptimizationChecker checker; 22162 ApiCallOptimizationChecker checker;
22117 checker.RunAll(); 22163 checker.RunAll();
22118 } 22164 }
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