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 17678 matching lines...) Loading... |
17689 CompileRun(source); | 17689 CompileRun(source); |
17690 | 17690 |
17691 script = v8::Script::Compile(v8_str("new C1();")); | 17691 script = v8::Script::Compile(v8_str("new C1();")); |
17692 for (int i = 0; i < 10; i++) { | 17692 for (int i = 0; i < 10; i++) { |
17693 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); | 17693 v8::Handle<v8::Object> c1 = v8::Handle<v8::Object>::Cast(script->Run()); |
17694 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); | 17694 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); |
17695 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); | 17695 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); |
17696 } | 17696 } |
17697 } | 17697 } |
17698 | 17698 |
| 17699 v8::Isolate* gc_callbacks_isolate = NULL; |
17699 int prologue_call_count = 0; | 17700 int prologue_call_count = 0; |
17700 int epilogue_call_count = 0; | 17701 int epilogue_call_count = 0; |
17701 int prologue_call_count_second = 0; | 17702 int prologue_call_count_second = 0; |
17702 int epilogue_call_count_second = 0; | 17703 int epilogue_call_count_second = 0; |
17703 | 17704 |
17704 void PrologueCallback(v8::GCType, v8::GCCallbackFlags) { | 17705 void PrologueCallback(v8::GCType, v8::GCCallbackFlags flags) { |
| 17706 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
17705 ++prologue_call_count; | 17707 ++prologue_call_count; |
17706 } | 17708 } |
17707 | 17709 |
17708 | 17710 |
17709 void EpilogueCallback(v8::GCType, v8::GCCallbackFlags) { | 17711 void PrologueCallback(v8::Isolate* isolate, |
| 17712 v8::GCType, |
| 17713 v8::GCCallbackFlags flags) { |
| 17714 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
| 17715 CHECK_EQ(gc_callbacks_isolate, isolate); |
| 17716 ++prologue_call_count; |
| 17717 } |
| 17718 |
| 17719 |
| 17720 void EpilogueCallback(v8::GCType, v8::GCCallbackFlags flags) { |
| 17721 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
17710 ++epilogue_call_count; | 17722 ++epilogue_call_count; |
17711 } | 17723 } |
17712 | 17724 |
17713 | 17725 |
17714 void PrologueCallbackSecond(v8::GCType, v8::GCCallbackFlags) { | 17726 void EpilogueCallback(v8::Isolate* isolate, |
| 17727 v8::GCType, |
| 17728 v8::GCCallbackFlags flags) { |
| 17729 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
| 17730 CHECK_EQ(gc_callbacks_isolate, isolate); |
| 17731 ++epilogue_call_count; |
| 17732 } |
| 17733 |
| 17734 |
| 17735 void PrologueCallbackSecond(v8::GCType, v8::GCCallbackFlags flags) { |
| 17736 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
17715 ++prologue_call_count_second; | 17737 ++prologue_call_count_second; |
17716 } | 17738 } |
17717 | 17739 |
17718 | 17740 |
17719 void EpilogueCallbackSecond(v8::GCType, v8::GCCallbackFlags) { | 17741 void PrologueCallbackSecond(v8::Isolate* isolate, |
| 17742 v8::GCType, |
| 17743 v8::GCCallbackFlags flags) { |
| 17744 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
| 17745 CHECK_EQ(gc_callbacks_isolate, isolate); |
| 17746 ++prologue_call_count_second; |
| 17747 } |
| 17748 |
| 17749 |
| 17750 void EpilogueCallbackSecond(v8::GCType, v8::GCCallbackFlags flags) { |
| 17751 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
17720 ++epilogue_call_count_second; | 17752 ++epilogue_call_count_second; |
17721 } | 17753 } |
17722 | 17754 |
17723 | 17755 |
17724 TEST(GCCallbacks) { | 17756 void EpilogueCallbackSecond(v8::Isolate* isolate, |
| 17757 v8::GCType, |
| 17758 v8::GCCallbackFlags flags) { |
| 17759 CHECK_EQ(flags, v8::kNoGCCallbackFlags); |
| 17760 CHECK_EQ(gc_callbacks_isolate, isolate); |
| 17761 ++epilogue_call_count_second; |
| 17762 } |
| 17763 |
| 17764 |
| 17765 TEST(GCCallbacksOld) { |
17725 LocalContext context; | 17766 LocalContext context; |
17726 | 17767 |
17727 v8::V8::AddGCPrologueCallback(PrologueCallback); | 17768 v8::V8::AddGCPrologueCallback(PrologueCallback); |
17728 v8::V8::AddGCEpilogueCallback(EpilogueCallback); | 17769 v8::V8::AddGCEpilogueCallback(EpilogueCallback); |
17729 CHECK_EQ(0, prologue_call_count); | 17770 CHECK_EQ(0, prologue_call_count); |
17730 CHECK_EQ(0, epilogue_call_count); | 17771 CHECK_EQ(0, epilogue_call_count); |
17731 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); | 17772 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
17732 CHECK_EQ(1, prologue_call_count); | 17773 CHECK_EQ(1, prologue_call_count); |
17733 CHECK_EQ(1, epilogue_call_count); | 17774 CHECK_EQ(1, epilogue_call_count); |
17734 v8::V8::AddGCPrologueCallback(PrologueCallbackSecond); | 17775 v8::V8::AddGCPrologueCallback(PrologueCallbackSecond); |
(...skipping 13 matching lines...) Loading... |
17748 v8::V8::RemoveGCPrologueCallback(PrologueCallbackSecond); | 17789 v8::V8::RemoveGCPrologueCallback(PrologueCallbackSecond); |
17749 v8::V8::RemoveGCEpilogueCallback(EpilogueCallbackSecond); | 17790 v8::V8::RemoveGCEpilogueCallback(EpilogueCallbackSecond); |
17750 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); | 17791 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
17751 CHECK_EQ(2, prologue_call_count); | 17792 CHECK_EQ(2, prologue_call_count); |
17752 CHECK_EQ(2, epilogue_call_count); | 17793 CHECK_EQ(2, epilogue_call_count); |
17753 CHECK_EQ(2, prologue_call_count_second); | 17794 CHECK_EQ(2, prologue_call_count_second); |
17754 CHECK_EQ(2, epilogue_call_count_second); | 17795 CHECK_EQ(2, epilogue_call_count_second); |
17755 } | 17796 } |
17756 | 17797 |
17757 | 17798 |
| 17799 TEST(GCCallbacks) { |
| 17800 LocalContext context; |
| 17801 v8::Isolate* isolate = context->GetIsolate(); |
| 17802 gc_callbacks_isolate = isolate; |
| 17803 isolate->AddGCPrologueCallback(PrologueCallback); |
| 17804 isolate->AddGCEpilogueCallback(EpilogueCallback); |
| 17805 CHECK_EQ(0, prologue_call_count); |
| 17806 CHECK_EQ(0, epilogue_call_count); |
| 17807 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| 17808 CHECK_EQ(1, prologue_call_count); |
| 17809 CHECK_EQ(1, epilogue_call_count); |
| 17810 isolate->AddGCPrologueCallback(PrologueCallbackSecond); |
| 17811 isolate->AddGCEpilogueCallback(EpilogueCallbackSecond); |
| 17812 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| 17813 CHECK_EQ(2, prologue_call_count); |
| 17814 CHECK_EQ(2, epilogue_call_count); |
| 17815 CHECK_EQ(1, prologue_call_count_second); |
| 17816 CHECK_EQ(1, epilogue_call_count_second); |
| 17817 isolate->RemoveGCPrologueCallback(PrologueCallback); |
| 17818 isolate->RemoveGCEpilogueCallback(EpilogueCallback); |
| 17819 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| 17820 CHECK_EQ(2, prologue_call_count); |
| 17821 CHECK_EQ(2, epilogue_call_count); |
| 17822 CHECK_EQ(2, prologue_call_count_second); |
| 17823 CHECK_EQ(2, epilogue_call_count_second); |
| 17824 isolate->RemoveGCPrologueCallback(PrologueCallbackSecond); |
| 17825 isolate->RemoveGCEpilogueCallback(EpilogueCallbackSecond); |
| 17826 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); |
| 17827 CHECK_EQ(2, prologue_call_count); |
| 17828 CHECK_EQ(2, epilogue_call_count); |
| 17829 CHECK_EQ(2, prologue_call_count_second); |
| 17830 CHECK_EQ(2, epilogue_call_count_second); |
| 17831 } |
| 17832 |
| 17833 |
17758 THREADED_TEST(AddToJSFunctionResultCache) { | 17834 THREADED_TEST(AddToJSFunctionResultCache) { |
17759 i::FLAG_stress_compaction = false; | 17835 i::FLAG_stress_compaction = false; |
17760 i::FLAG_allow_natives_syntax = true; | 17836 i::FLAG_allow_natives_syntax = true; |
17761 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 17837 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
17762 | 17838 |
17763 LocalContext context; | 17839 LocalContext context; |
17764 | 17840 |
17765 const char* code = | 17841 const char* code = |
17766 "(function() {" | 17842 "(function() {" |
17767 " var key0 = 'a';" | 17843 " var key0 = 'a';" |
(...skipping 2821 matching lines...) Loading... |
20589 Local<Object> data2 = v8::Object::New(); | 20665 Local<Object> data2 = v8::Object::New(); |
20590 function_new_expected_env = data2; | 20666 function_new_expected_env = data2; |
20591 Local<Function> func2 = Function::New(isolate, FunctionNewCallback, data2); | 20667 Local<Function> func2 = Function::New(isolate, FunctionNewCallback, data2); |
20592 CHECK(!func2->IsNull()); | 20668 CHECK(!func2->IsNull()); |
20593 CHECK_NE(func, func2); | 20669 CHECK_NE(func, func2); |
20594 env->Global()->Set(v8_str("func2"), func2); | 20670 env->Global()->Set(v8_str("func2"), func2); |
20595 Local<Value> result2 = CompileRun("func2();"); | 20671 Local<Value> result2 = CompileRun("func2();"); |
20596 CHECK_EQ(v8::Integer::New(17, isolate), result2); | 20672 CHECK_EQ(v8::Integer::New(17, isolate), result2); |
20597 } | 20673 } |
20598 | 20674 |
OLD | NEW |