Chromium Code Reviews| Index: test/cctest/test-api.cc |
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc |
| index c5c932b7516cc70738ad918a9311dabe1e985427..f34fbcfa2ea8deac9e1b1f32f694137135052b33 100644 |
| --- a/test/cctest/test-api.cc |
| +++ b/test/cctest/test-api.cc |
| @@ -18563,6 +18563,8 @@ int prologue_call_count = 0; |
| int epilogue_call_count = 0; |
| int prologue_call_count_second = 0; |
| int epilogue_call_count_second = 0; |
| +int prologue_call_count_alloc = 0; |
| +int epilogue_call_count_alloc = 0; |
| void PrologueCallback(v8::GCType, v8::GCCallbackFlags flags) { |
| CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
| @@ -18624,6 +18626,40 @@ void EpilogueCallbackSecond(v8::Isolate* isolate, |
| } |
| +void PrologueCallbackAlloc(v8::Isolate* isolate, |
| + v8::GCType, |
| + v8::GCCallbackFlags flags) { |
| + v8::HandleScope scope(isolate); |
| + |
| + CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
| + CHECK_EQ(gc_callbacks_isolate, isolate); |
| + ++prologue_call_count_alloc; |
| + |
| + // Simulate full heap to see if we will reenter this callback |
| + SimulateFullSpace(CcTest::heap()->new_space()); |
| + |
| + Local<Object> obj = Object::New(isolate); |
| + ASSERT(!obj.IsEmpty()); |
|
Hannes Payer (out of office)
2014/03/11 10:57:20
Can we call CcTest::heap()->CollectAllGarbage(i::H
|
| +} |
| + |
| + |
| +void EpilogueCallbackAlloc(v8::Isolate* isolate, |
| + v8::GCType, |
| + v8::GCCallbackFlags flags) { |
| + v8::HandleScope scope(isolate); |
| + |
| + CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
| + CHECK_EQ(gc_callbacks_isolate, isolate); |
| + ++epilogue_call_count_alloc; |
| + |
| + // Simulate full heap to see if we will reenter this callback |
| + SimulateFullSpace(CcTest::heap()->new_space()); |
| + |
| + Local<Object> obj = Object::New(isolate); |
| + ASSERT(!obj.IsEmpty()); |
|
Hannes Payer (out of office)
2014/03/11 10:57:20
Can we call CcTest::heap()->CollectAllGarbage(i::H
|
| +} |
| + |
| + |
| TEST(GCCallbacksOld) { |
| LocalContext context; |
| @@ -18690,6 +18726,16 @@ TEST(GCCallbacks) { |
| CHECK_EQ(2, epilogue_call_count); |
| CHECK_EQ(2, prologue_call_count_second); |
| CHECK_EQ(2, epilogue_call_count_second); |
| + |
| + CHECK_EQ(0, prologue_call_count_alloc); |
| + CHECK_EQ(0, epilogue_call_count_alloc); |
| + isolate->AddGCPrologueCallback(PrologueCallbackAlloc); |
| + isolate->AddGCEpilogueCallback(EpilogueCallbackAlloc); |
| + CcTest::heap()->CollectAllGarbage(i::Heap::kNoGCFlags); |
|
Hannes Payer (out of office)
2014/03/11 10:57:20
CcTest::heap()->CollectAllGarbage(i::Heap::Heap::k
|
| + CHECK_EQ(1, prologue_call_count_alloc); |
| + CHECK_EQ(1, epilogue_call_count_alloc); |
| + isolate->RemoveGCPrologueCallback(PrologueCallbackAlloc); |
| + isolate->RemoveGCEpilogueCallback(EpilogueCallbackAlloc); |
| } |