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

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

Issue 17072002: Introduce THREADED_PROFILED_TEST macro (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Moved THREADED_PROFILED_TEST macro into test-api.cc Created 7 years, 6 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 | « no previous file | 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 using ::v8::Script; 66 using ::v8::Script;
67 using ::v8::StackTrace; 67 using ::v8::StackTrace;
68 using ::v8::String; 68 using ::v8::String;
69 using ::v8::TryCatch; 69 using ::v8::TryCatch;
70 using ::v8::Undefined; 70 using ::v8::Undefined;
71 using ::v8::UniqueId; 71 using ::v8::UniqueId;
72 using ::v8::V8; 72 using ::v8::V8;
73 using ::v8::Value; 73 using ::v8::Value;
74 74
75 75
76 #define THREADED_PROFILED_TEST(Name) \
77 static void Test##Name(); \
78 TEST(Name##WithProfiler) { \
79 RunWithProfiler(&Test##Name); \
80 } \
81 THREADED_TEST(Name)
82
83 void RunWithProfiler(void (*test)()) {
84 LocalContext env;
85 v8::HandleScope scope(env->GetIsolate());
86 v8::Local<v8::String> profile_name = v8::String::New("my_profile1");
87 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
88
89 cpu_profiler->StartCpuProfiling(profile_name);
90 (*test)();
91 cpu_profiler->DeleteAllCpuProfiles();
92 }
93
94
76 static void ExpectString(const char* code, const char* expected) { 95 static void ExpectString(const char* code, const char* expected) {
77 Local<Value> result = CompileRun(code); 96 Local<Value> result = CompileRun(code);
78 CHECK(result->IsString()); 97 CHECK(result->IsString());
79 String::Utf8Value utf8(result); 98 String::Utf8Value utf8(result);
80 CHECK_EQ(expected, *utf8); 99 CHECK_EQ(expected, *utf8);
81 } 100 }
82 101
83 static void ExpectInt32(const char* code, int expected) { 102 static void ExpectInt32(const char* code, int expected) {
84 Local<Value> result = CompileRun(code); 103 Local<Value> result = CompileRun(code);
85 CHECK(result->IsInt32()); 104 CHECK(result->IsInt32());
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 ApiTestFuzzer::Fuzz(); 950 ApiTestFuzzer::Fuzz();
932 CheckReturnValue(info, FUNCTION_ADDR(Return239Callback)); 951 CheckReturnValue(info, FUNCTION_ADDR(Return239Callback));
933 info.GetReturnValue().Set(v8_str("bad value")); 952 info.GetReturnValue().Set(v8_str("bad value"));
934 info.GetReturnValue().Set(v8_num(239)); 953 info.GetReturnValue().Set(v8_num(239));
935 } 954 }
936 955
937 956
938 template<typename Handler> 957 template<typename Handler>
939 static void TestFunctionTemplateInitializer(Handler handler, 958 static void TestFunctionTemplateInitializer(Handler handler,
940 Handler handler_2) { 959 Handler handler_2) {
941 for (int i = 0; i < 2; i++) { 960 // Test constructor calls.
942 bool is_profiling = (i > 0); 961 {
943 // Test constructor calls. 962 LocalContext env;
944 { 963 v8::HandleScope scope(env->GetIsolate());
945 LocalContext env;
946 v8::HandleScope scope(env->GetIsolate());
947 964
948 v8::Local<v8::String> profile_name = v8::String::New("my_profile1"); 965 Local<v8::FunctionTemplate> fun_templ =
949 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 966 v8::FunctionTemplate::New(handler);
950 if (is_profiling) { 967 Local<Function> fun = fun_templ->GetFunction();
951 cpu_profiler->StartCpuProfiling(profile_name); 968 env->Global()->Set(v8_str("obj"), fun);
952 } 969 Local<Script> script = v8_compile("obj()");
970 for (int i = 0; i < 30; i++) {
971 CHECK_EQ(102, script->Run()->Int32Value());
972 }
973 }
974 // Use SetCallHandler to initialize a function template, should work like
975 // the previous one.
976 {
977 LocalContext env;
978 v8::HandleScope scope(env->GetIsolate());
953 979
954 Local<v8::FunctionTemplate> fun_templ = 980 Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
955 v8::FunctionTemplate::New(handler); 981 fun_templ->SetCallHandler(handler_2);
956 Local<Function> fun = fun_templ->GetFunction(); 982 Local<Function> fun = fun_templ->GetFunction();
957 env->Global()->Set(v8_str("obj"), fun); 983 env->Global()->Set(v8_str("obj"), fun);
958 Local<Script> script = v8_compile("obj()"); 984 Local<Script> script = v8_compile("obj()");
959 for (int i = 0; i < 30; i++) { 985 for (int i = 0; i < 30; i++) {
960 CHECK_EQ(102, script->Run()->Int32Value()); 986 CHECK_EQ(102, script->Run()->Int32Value());
961 }
962
963 if (is_profiling) {
964 cpu_profiler->StopCpuProfiling(profile_name);
965 }
966 }
967 // Use SetCallHandler to initialize a function template, should work like
968 // the previous one.
969 {
970 LocalContext env;
971 v8::HandleScope scope(env->GetIsolate());
972
973 v8::Local<v8::String> profile_name = v8::String::New("my_profile2");
974 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
975 if (is_profiling) {
976 cpu_profiler->StartCpuProfiling(profile_name);
977 }
978
979 Local<v8::FunctionTemplate> fun_templ = v8::FunctionTemplate::New();
980 fun_templ->SetCallHandler(handler_2);
981 Local<Function> fun = fun_templ->GetFunction();
982 env->Global()->Set(v8_str("obj"), fun);
983 Local<Script> script = v8_compile("obj()");
984 for (int i = 0; i < 30; i++) {
985 CHECK_EQ(102, script->Run()->Int32Value());
986 }
987
988 if (is_profiling) {
989 cpu_profiler->DeleteAllCpuProfiles();
990 }
991 } 987 }
992 } 988 }
993 } 989 }
994 990
995 991
996 template<typename Constructor, typename Accessor> 992 template<typename Constructor, typename Accessor>
997 static void TestFunctionTemplateAccessor(Constructor constructor, 993 static void TestFunctionTemplateAccessor(Constructor constructor,
998 Accessor accessor) { 994 Accessor accessor) {
999 for (int i = 0; i < 2; i++) { 995 LocalContext env;
1000 bool is_profiling = (i > 0); 996 v8::HandleScope scope(env->GetIsolate());
1001 LocalContext env;
1002 v8::HandleScope scope(env->GetIsolate());
1003 997
1004 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 998 Local<v8::FunctionTemplate> fun_templ =
1005 if (is_profiling) { 999 v8::FunctionTemplate::New(constructor);
1006 v8::Local<v8::String> profile_name = v8::String::New("my_profile1"); 1000 fun_templ->SetClassName(v8_str("funky"));
1007 cpu_profiler->StartCpuProfiling(profile_name); 1001 fun_templ->InstanceTemplate()->SetAccessor(v8_str("m"), accessor);
1008 } 1002 Local<Function> fun = fun_templ->GetFunction();
1009 1003 env->Global()->Set(v8_str("obj"), fun);
1010 Local<v8::FunctionTemplate> fun_templ = 1004 Local<Value> result = v8_compile("(new obj()).toString()")->Run();
1011 v8::FunctionTemplate::New(constructor); 1005 CHECK_EQ(v8_str("[object funky]"), result);
1012 fun_templ->SetClassName(v8_str("funky")); 1006 CompileRun("var obj_instance = new obj();");
1013 fun_templ->InstanceTemplate()->SetAccessor(v8_str("m"), accessor); 1007 Local<Script> script;
1014 Local<Function> fun = fun_templ->GetFunction(); 1008 script = v8_compile("obj_instance.x");
1015 env->Global()->Set(v8_str("obj"), fun); 1009 for (int i = 0; i < 30; i++) {
1016 Local<Value> result = v8_compile("(new obj()).toString()")->Run(); 1010 CHECK_EQ(1, script->Run()->Int32Value());
1017 CHECK_EQ(v8_str("[object funky]"), result); 1011 }
1018 CompileRun("var obj_instance = new obj();"); 1012 script = v8_compile("obj_instance.m");
1019 Local<Script> script; 1013 for (int i = 0; i < 30; i++) {
1020 script = v8_compile("obj_instance.x"); 1014 CHECK_EQ(239, script->Run()->Int32Value());
1021 for (int i = 0; i < 30; i++) {
1022 CHECK_EQ(1, script->Run()->Int32Value());
1023 }
1024 script = v8_compile("obj_instance.m");
1025 for (int i = 0; i < 30; i++) {
1026 CHECK_EQ(239, script->Run()->Int32Value());
1027 }
1028
1029 if (is_profiling) {
1030 cpu_profiler->DeleteAllCpuProfiles();
1031 }
1032 } 1015 }
1033 } 1016 }
1034 1017
1035 1018
1036 THREADED_TEST(FunctionTemplate) { 1019 THREADED_PROFILED_TEST(FunctionTemplate) {
1037 TestFunctionTemplateInitializer(handle_call, handle_call_2); 1020 TestFunctionTemplateInitializer(handle_call, handle_call_2);
1038 TestFunctionTemplateInitializer(handle_call_indirect, handle_call_indirect_2); 1021 TestFunctionTemplateInitializer(handle_call_indirect, handle_call_indirect_2);
1039 TestFunctionTemplateInitializer(handle_callback, handle_callback_2); 1022 TestFunctionTemplateInitializer(handle_callback, handle_callback_2);
1040 1023
1041 TestFunctionTemplateAccessor(construct_call, Return239); 1024 TestFunctionTemplateAccessor(construct_call, Return239);
1042 TestFunctionTemplateAccessor(construct_call_indirect, Return239Indirect); 1025 TestFunctionTemplateAccessor(construct_call_indirect, Return239Indirect);
1043 TestFunctionTemplateAccessor(construct_callback, Return239Callback); 1026 TestFunctionTemplateAccessor(construct_callback, Return239Callback);
1044 } 1027 }
1045 1028
1046 1029
(...skipping 13 matching lines...) Expand all
1060 1043
1061 static void SimpleCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { 1044 static void SimpleCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
1062 ApiTestFuzzer::Fuzz(); 1045 ApiTestFuzzer::Fuzz();
1063 CheckReturnValue(info, FUNCTION_ADDR(SimpleCallback)); 1046 CheckReturnValue(info, FUNCTION_ADDR(SimpleCallback));
1064 info.GetReturnValue().Set(v8_num(51423 + info.Length())); 1047 info.GetReturnValue().Set(v8_num(51423 + info.Length()));
1065 } 1048 }
1066 1049
1067 1050
1068 template<typename Callback> 1051 template<typename Callback>
1069 static void TestSimpleCallback(Callback callback) { 1052 static void TestSimpleCallback(Callback callback) {
1070 for (int i = 0; i < 2; i++) { 1053 LocalContext env;
1071 bool is_profiling = i; 1054 v8::HandleScope scope(env->GetIsolate());
1072 LocalContext env;
1073 v8::HandleScope scope(env->GetIsolate());
1074 1055
1075 v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler(); 1056 v8::Handle<v8::ObjectTemplate> object_template = v8::ObjectTemplate::New();
1076 if (is_profiling) { 1057 object_template->Set("callback", v8::FunctionTemplate::New(callback));
1077 v8::Local<v8::String> profile_name = v8::String::New("my_profile1"); 1058 v8::Local<v8::Object> object = object_template->NewInstance();
1078 cpu_profiler->StartCpuProfiling(profile_name); 1059 (*env)->Global()->Set(v8_str("callback_object"), object);
1079 } 1060 v8::Handle<v8::Script> script;
1080 1061 script = v8_compile("callback_object.callback(17)");
1081 v8::Handle<v8::ObjectTemplate> object_template = v8::ObjectTemplate::New(); 1062 for (int i = 0; i < 30; i++) {
1082 object_template->Set("callback", v8::FunctionTemplate::New(callback)); 1063 CHECK_EQ(51424, script->Run()->Int32Value());
1083 v8::Local<v8::Object> object = object_template->NewInstance(); 1064 }
1084 (*env)->Global()->Set(v8_str("callback_object"), object); 1065 script = v8_compile("callback_object.callback(17, 24)");
1085 v8::Handle<v8::Script> script; 1066 for (int i = 0; i < 30; i++) {
1086 script = v8_compile("callback_object.callback(17)"); 1067 CHECK_EQ(51425, script->Run()->Int32Value());
1087 for (int i = 0; i < 30; i++) {
1088 CHECK_EQ(51424, script->Run()->Int32Value());
1089 }
1090 script = v8_compile("callback_object.callback(17, 24)");
1091 for (int i = 0; i < 30; i++) {
1092 CHECK_EQ(51425, script->Run()->Int32Value());
1093 }
1094
1095 if (is_profiling) {
1096 cpu_profiler->DeleteAllCpuProfiles();
1097 }
1098 } 1068 }
1099 } 1069 }
1100 1070
1101 1071
1102 THREADED_TEST(SimpleCallback) { 1072 THREADED_PROFILED_TEST(SimpleCallback) {
1103 TestSimpleCallback(SimpleDirectCallback); 1073 TestSimpleCallback(SimpleDirectCallback);
1104 TestSimpleCallback(SimpleIndirectCallback); 1074 TestSimpleCallback(SimpleIndirectCallback);
1105 TestSimpleCallback(SimpleCallback); 1075 TestSimpleCallback(SimpleCallback);
1106 } 1076 }
1107 1077
1108 1078
1109 template<typename T> 1079 template<typename T>
1110 void FastReturnValueCallback(const v8::FunctionCallbackInfo<v8::Value>& info); 1080 void FastReturnValueCallback(const v8::FunctionCallbackInfo<v8::Value>& info);
1111 1081
1112 // constant return values 1082 // constant return values
(...skipping 18340 matching lines...) Expand 10 before | Expand all | Expand 10 after
19453 i::Semaphore* sem_; 19423 i::Semaphore* sem_;
19454 volatile int sem_value_; 19424 volatile int sem_value_;
19455 }; 19425 };
19456 19426
19457 19427
19458 THREADED_TEST(SemaphoreInterruption) { 19428 THREADED_TEST(SemaphoreInterruption) {
19459 ThreadInterruptTest().RunTest(); 19429 ThreadInterruptTest().RunTest();
19460 } 19430 }
19461 19431
19462 #endif // WIN32 19432 #endif // WIN32
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698