OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |