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

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

Issue 24205004: Rollback trunk to 3.21.16.2 (Closed) Base URL: https://v8.googlecode.com/svn/trunk
Patch Set: Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « test/cctest/test-accessors.cc ('k') | test/cctest/test-flags.cc » ('j') | 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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 using ::v8::Script; 70 using ::v8::Script;
71 using ::v8::StackTrace; 71 using ::v8::StackTrace;
72 using ::v8::String; 72 using ::v8::String;
73 using ::v8::TryCatch; 73 using ::v8::TryCatch;
74 using ::v8::Undefined; 74 using ::v8::Undefined;
75 using ::v8::UniqueId; 75 using ::v8::UniqueId;
76 using ::v8::V8; 76 using ::v8::V8;
77 using ::v8::Value; 77 using ::v8::Value;
78 78
79 79
80 // TODO(bmeurer): Don't run profiled tests when using the simulator.
81 // This is a temporary work-around, until the profiler is fixed.
82 #if USE_SIMULATOR
83 #define THREADED_PROFILED_TEST(Name) \
84 THREADED_TEST(Name)
85 #else
86 #define THREADED_PROFILED_TEST(Name) \ 80 #define THREADED_PROFILED_TEST(Name) \
87 static void Test##Name(); \ 81 static void Test##Name(); \
88 TEST(Name##WithProfiler) { \ 82 TEST(Name##WithProfiler) { \
89 RunWithProfiler(&Test##Name); \ 83 RunWithProfiler(&Test##Name); \
90 } \ 84 } \
91 THREADED_TEST(Name) 85 THREADED_TEST(Name)
92 #endif
93
94 86
95 void RunWithProfiler(void (*test)()) { 87 void RunWithProfiler(void (*test)()) {
96 LocalContext env; 88 LocalContext env;
97 v8::HandleScope scope(env->GetIsolate()); 89 v8::HandleScope scope(env->GetIsolate());
98 v8::Local<v8::String> profile_name = v8::String::New("my_profile1"); 90 v8::Local<v8::String> profile_name = v8::String::New("my_profile1");
99 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 91 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
100 92
101 cpu_profiler->StartCpuProfiling(profile_name); 93 cpu_profiler->StartCpuProfiling(profile_name);
102 (*test)(); 94 (*test)();
103 cpu_profiler->DeleteAllCpuProfiles(); 95 cpu_profiler->DeleteAllCpuProfiles();
(...skipping 14538 matching lines...) Expand 10 before | Expand all | Expand 10 after
14642 } 14634 }
14643 two_byte_content_[14] = 'b'; 14635 two_byte_content_[14] = 'b';
14644 14636
14645 // Create the input string for the regexp - the one we are going to change 14637 // Create the input string for the regexp - the one we are going to change
14646 // properties of. 14638 // properties of.
14647 input_ = factory->NewExternalStringFromAscii(&ascii_resource_); 14639 input_ = factory->NewExternalStringFromAscii(&ascii_resource_);
14648 14640
14649 // Inject the input as a global variable. 14641 // Inject the input as a global variable.
14650 i::Handle<i::String> input_name = 14642 i::Handle<i::String> input_name =
14651 factory->NewStringFromAscii(i::Vector<const char>("input", 5)); 14643 factory->NewStringFromAscii(i::Vector<const char>("input", 5));
14652 i::JSReceiver::SetProperty( 14644 i::Isolate::Current()->native_context()->global_object()->SetProperty(
14653 i::handle(i::Isolate::Current()->native_context()->global_object()), 14645 *input_name,
14654 input_name, 14646 *input_,
14655 input_,
14656 NONE, 14647 NONE,
14657 i::kNonStrictMode); 14648 i::kNonStrictMode)->ToObjectChecked();
14658 14649
14659 MorphThread morph_thread(this); 14650 MorphThread morph_thread(this);
14660 morph_thread.Start(); 14651 morph_thread.Start();
14661 v8::Locker::StartPreemption(1); 14652 v8::Locker::StartPreemption(1);
14662 LongRunningRegExp(); 14653 LongRunningRegExp();
14663 { 14654 {
14664 v8::Unlocker unlock(CcTest::default_isolate()); 14655 v8::Unlocker unlock(CcTest::default_isolate());
14665 morph_thread.Join(); 14656 morph_thread.Join();
14666 } 14657 }
14667 v8::Locker::StopPreemption(); 14658 v8::Locker::StopPreemption();
(...skipping 3030 matching lines...) Expand 10 before | Expand all | Expand 10 after
17698 CompileRun(source); 17689 CompileRun(source);
17699 17690
17700 script = v8::Script::Compile(v8_str("new C1();")); 17691 script = v8::Script::Compile(v8_str("new C1();"));
17701 for (int i = 0; i < 10; i++) { 17692 for (int i = 0; i < 10; i++) {
17702 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());
17703 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value()); 17694 CHECK_EQ(42, c1->Get(v8_str("x"))->Int32Value());
17704 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value()); 17695 CHECK_EQ(23, c1->Get(v8_str("y"))->Int32Value());
17705 } 17696 }
17706 } 17697 }
17707 17698
17708 v8::Isolate* gc_callbacks_isolate = NULL;
17709 int prologue_call_count = 0; 17699 int prologue_call_count = 0;
17710 int epilogue_call_count = 0; 17700 int epilogue_call_count = 0;
17711 int prologue_call_count_second = 0; 17701 int prologue_call_count_second = 0;
17712 int epilogue_call_count_second = 0; 17702 int epilogue_call_count_second = 0;
17713 17703
17714 void PrologueCallback(v8::GCType, v8::GCCallbackFlags flags) { 17704 void PrologueCallback(v8::GCType, v8::GCCallbackFlags) {
17715 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17716 ++prologue_call_count; 17705 ++prologue_call_count;
17717 } 17706 }
17718 17707
17719 17708
17720 void PrologueCallback(v8::Isolate* isolate, 17709 void EpilogueCallback(v8::GCType, v8::GCCallbackFlags) {
17721 v8::GCType,
17722 v8::GCCallbackFlags flags) {
17723 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17724 CHECK_EQ(gc_callbacks_isolate, isolate);
17725 ++prologue_call_count;
17726 }
17727
17728
17729 void EpilogueCallback(v8::GCType, v8::GCCallbackFlags flags) {
17730 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17731 ++epilogue_call_count; 17710 ++epilogue_call_count;
17732 } 17711 }
17733 17712
17734 17713
17735 void EpilogueCallback(v8::Isolate* isolate, 17714 void PrologueCallbackSecond(v8::GCType, v8::GCCallbackFlags) {
17736 v8::GCType,
17737 v8::GCCallbackFlags flags) {
17738 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17739 CHECK_EQ(gc_callbacks_isolate, isolate);
17740 ++epilogue_call_count;
17741 }
17742
17743
17744 void PrologueCallbackSecond(v8::GCType, v8::GCCallbackFlags flags) {
17745 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17746 ++prologue_call_count_second; 17715 ++prologue_call_count_second;
17747 } 17716 }
17748 17717
17749 17718
17750 void PrologueCallbackSecond(v8::Isolate* isolate, 17719 void EpilogueCallbackSecond(v8::GCType, v8::GCCallbackFlags) {
17751 v8::GCType,
17752 v8::GCCallbackFlags flags) {
17753 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17754 CHECK_EQ(gc_callbacks_isolate, isolate);
17755 ++prologue_call_count_second;
17756 }
17757
17758
17759 void EpilogueCallbackSecond(v8::GCType, v8::GCCallbackFlags flags) {
17760 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17761 ++epilogue_call_count_second; 17720 ++epilogue_call_count_second;
17762 } 17721 }
17763 17722
17764 17723
17765 void EpilogueCallbackSecond(v8::Isolate* isolate, 17724 TEST(GCCallbacks) {
17766 v8::GCType,
17767 v8::GCCallbackFlags flags) {
17768 CHECK_EQ(flags, v8::kNoGCCallbackFlags);
17769 CHECK_EQ(gc_callbacks_isolate, isolate);
17770 ++epilogue_call_count_second;
17771 }
17772
17773
17774 TEST(GCCallbacksOld) {
17775 LocalContext context; 17725 LocalContext context;
17776 17726
17777 v8::V8::AddGCPrologueCallback(PrologueCallback); 17727 v8::V8::AddGCPrologueCallback(PrologueCallback);
17778 v8::V8::AddGCEpilogueCallback(EpilogueCallback); 17728 v8::V8::AddGCEpilogueCallback(EpilogueCallback);
17779 CHECK_EQ(0, prologue_call_count); 17729 CHECK_EQ(0, prologue_call_count);
17780 CHECK_EQ(0, epilogue_call_count); 17730 CHECK_EQ(0, epilogue_call_count);
17781 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 17731 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17782 CHECK_EQ(1, prologue_call_count); 17732 CHECK_EQ(1, prologue_call_count);
17783 CHECK_EQ(1, epilogue_call_count); 17733 CHECK_EQ(1, epilogue_call_count);
17784 v8::V8::AddGCPrologueCallback(PrologueCallbackSecond); 17734 v8::V8::AddGCPrologueCallback(PrologueCallbackSecond);
(...skipping 13 matching lines...) Expand all
17798 v8::V8::RemoveGCPrologueCallback(PrologueCallbackSecond); 17748 v8::V8::RemoveGCPrologueCallback(PrologueCallbackSecond);
17799 v8::V8::RemoveGCEpilogueCallback(EpilogueCallbackSecond); 17749 v8::V8::RemoveGCEpilogueCallback(EpilogueCallbackSecond);
17800 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 17750 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17801 CHECK_EQ(2, prologue_call_count); 17751 CHECK_EQ(2, prologue_call_count);
17802 CHECK_EQ(2, epilogue_call_count); 17752 CHECK_EQ(2, epilogue_call_count);
17803 CHECK_EQ(2, prologue_call_count_second); 17753 CHECK_EQ(2, prologue_call_count_second);
17804 CHECK_EQ(2, epilogue_call_count_second); 17754 CHECK_EQ(2, epilogue_call_count_second);
17805 } 17755 }
17806 17756
17807 17757
17808 TEST(GCCallbacks) {
17809 LocalContext context;
17810 v8::Isolate* isolate = context->GetIsolate();
17811 gc_callbacks_isolate = isolate;
17812 isolate->AddGCPrologueCallback(PrologueCallback);
17813 isolate->AddGCEpilogueCallback(EpilogueCallback);
17814 CHECK_EQ(0, prologue_call_count);
17815 CHECK_EQ(0, epilogue_call_count);
17816 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17817 CHECK_EQ(1, prologue_call_count);
17818 CHECK_EQ(1, epilogue_call_count);
17819 isolate->AddGCPrologueCallback(PrologueCallbackSecond);
17820 isolate->AddGCEpilogueCallback(EpilogueCallbackSecond);
17821 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17822 CHECK_EQ(2, prologue_call_count);
17823 CHECK_EQ(2, epilogue_call_count);
17824 CHECK_EQ(1, prologue_call_count_second);
17825 CHECK_EQ(1, epilogue_call_count_second);
17826 isolate->RemoveGCPrologueCallback(PrologueCallback);
17827 isolate->RemoveGCEpilogueCallback(EpilogueCallback);
17828 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17829 CHECK_EQ(2, prologue_call_count);
17830 CHECK_EQ(2, epilogue_call_count);
17831 CHECK_EQ(2, prologue_call_count_second);
17832 CHECK_EQ(2, epilogue_call_count_second);
17833 isolate->RemoveGCPrologueCallback(PrologueCallbackSecond);
17834 isolate->RemoveGCEpilogueCallback(EpilogueCallbackSecond);
17835 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
17836 CHECK_EQ(2, prologue_call_count);
17837 CHECK_EQ(2, epilogue_call_count);
17838 CHECK_EQ(2, prologue_call_count_second);
17839 CHECK_EQ(2, epilogue_call_count_second);
17840 }
17841
17842
17843 THREADED_TEST(AddToJSFunctionResultCache) { 17758 THREADED_TEST(AddToJSFunctionResultCache) {
17844 i::FLAG_stress_compaction = false; 17759 i::FLAG_stress_compaction = false;
17845 i::FLAG_allow_natives_syntax = true; 17760 i::FLAG_allow_natives_syntax = true;
17846 v8::HandleScope scope(v8::Isolate::GetCurrent()); 17761 v8::HandleScope scope(v8::Isolate::GetCurrent());
17847 17762
17848 LocalContext context; 17763 LocalContext context;
17849 17764
17850 const char* code = 17765 const char* code =
17851 "(function() {" 17766 "(function() {"
17852 " var key0 = 'a';" 17767 " var key0 = 'a';"
(...skipping 2809 matching lines...) Expand 10 before | Expand all | Expand 10 after
20662 env->Global()->Set(v8_str("func"), func); 20577 env->Global()->Set(v8_str("func"), func);
20663 Local<Value> result = CompileRun("func();"); 20578 Local<Value> result = CompileRun("func();");
20664 CHECK_EQ(v8::Integer::New(17, isolate), result); 20579 CHECK_EQ(v8::Integer::New(17, isolate), result);
20665 // Verify function not cached 20580 // Verify function not cached
20666 int serial_number = 20581 int serial_number =
20667 i::Smi::cast(v8::Utils::OpenHandle(*func) 20582 i::Smi::cast(v8::Utils::OpenHandle(*func)
20668 ->shared()->get_api_func_data()->serial_number())->value(); 20583 ->shared()->get_api_func_data()->serial_number())->value();
20669 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 20584 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
20670 i::Object* elm = i_isolate->native_context()->function_cache() 20585 i::Object* elm = i_isolate->native_context()->function_cache()
20671 ->GetElementNoExceptionThrown(i_isolate, serial_number); 20586 ->GetElementNoExceptionThrown(i_isolate, serial_number);
20672 CHECK(elm->IsUndefined()); 20587 CHECK(elm->IsNull());
20673 // Verify that each Function::New creates a new function instance
20674 Local<Object> data2 = v8::Object::New();
20675 function_new_expected_env = data2;
20676 Local<Function> func2 = Function::New(isolate, FunctionNewCallback, data2);
20677 CHECK(!func2->IsNull());
20678 CHECK_NE(func, func2);
20679 env->Global()->Set(v8_str("func2"), func2);
20680 Local<Value> result2 = CompileRun("func2();");
20681 CHECK_EQ(v8::Integer::New(17, isolate), result2);
20682 } 20588 }
20683 20589
OLDNEW
« no previous file with comments | « test/cctest/test-accessors.cc ('k') | test/cctest/test-flags.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698