| Index: test/cctest/test-cpu-profiler.cc
|
| diff --git a/test/cctest/test-cpu-profiler.cc b/test/cctest/test-cpu-profiler.cc
|
| index 188fbd948066ade0def73c4c894d1ba515aa5477..8fea3ad638926291fb492349ad0b91de6a12a516 100644
|
| --- a/test/cctest/test-cpu-profiler.cc
|
| +++ b/test/cctest/test-cpu-profiler.cc
|
| @@ -799,3 +799,79 @@ TEST(NativeAccessorNameInProfile2) {
|
|
|
| cpu_profiler->DeleteAllCpuProfiles();
|
| }
|
| +
|
| +
|
| +static const char* cpu_profiler_sourceURL_source =
|
| +"function start(timeout) {\n"
|
| +" var start = Date.now();\n"
|
| +" var duration = 0;\n"
|
| +" do {\n"
|
| +" try {\n"
|
| +" duration = Date.now() - start;\n"
|
| +" } catch(e) { }\n"
|
| +" } while (duration < timeout);\n"
|
| +" return duration;\n"
|
| +"}\n"
|
| +"//# sourceURL=cpu_profiler_sourceURL_source.js";
|
| +
|
| +
|
| +TEST(SourceURLSupportForNewFunctions) {
|
| + LocalContext env;
|
| + v8::HandleScope scope(env->GetIsolate());
|
| +
|
| + v8::Script::Compile(v8::String::New(cpu_profiler_sourceURL_source))->Run();
|
| + v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| + env->Global()->Get(v8::String::New("start")));
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| + int32_t profiling_interval_ms = 100;
|
| +
|
| + // Cold run.
|
| + v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| + cpu_profiler->StartCpuProfiling(profile_name);
|
| + v8::Handle<v8::Value> args[] = { v8::Integer::New(profiling_interval_ms) };
|
| + function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| + const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| + CHECK_NE(NULL, profile);
|
| +
|
| + // Dump collected profile to have a better diagnostic in case of failure.
|
| + reinterpret_cast<i::CpuProfile*>(
|
| + const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| + const v8::CpuProfileNode* startNode = GetChild(root, "start");
|
| +
|
| + CHECK_EQ(v8::String::New("cpu_profiler_sourceURL_source.js"),
|
| + startNode->GetScriptResourceName());
|
| +
|
| + cpu_profiler->DeleteAllCpuProfiles();
|
| +}
|
| +
|
| +TEST(LogExistingFunctionSourceURLCheck) {
|
| + LocalContext env;
|
| + v8::HandleScope scope(env->GetIsolate());
|
| +
|
| + v8::Script::Compile(v8::String::New(cpu_profiler_sourceURL_source))->Run();
|
| + v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(
|
| + env->Global()->Get(v8::String::New("start")));
|
| + v8::CpuProfiler* cpu_profiler = env->GetIsolate()->GetCpuProfiler();
|
| + int32_t profiling_interval_ms = 100;
|
| +
|
| + // Warm up.
|
| + v8::Handle<v8::Value> args[] = { v8::Integer::New(profiling_interval_ms) };
|
| + function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| +
|
| + v8::Local<v8::String> profile_name = v8::String::New("my_profile");
|
| + cpu_profiler->StartCpuProfiling(profile_name);
|
| + function->Call(env->Global(), ARRAY_SIZE(args), args);
|
| + const v8::CpuProfile* profile = cpu_profiler->StopCpuProfiling(profile_name);
|
| + CHECK_NE(NULL, profile);
|
| +
|
| + // Dump collected profile to have a better diagnostic in case of failure.
|
| + reinterpret_cast<i::CpuProfile*>(
|
| + const_cast<v8::CpuProfile*>(profile))->Print();
|
| + const v8::CpuProfileNode* root = profile->GetTopDownRoot();
|
| + const v8::CpuProfileNode* startNode = GetChild(root, "start");
|
| + CHECK_EQ(v8::String::New("cpu_profiler_sourceURL_source.js"),
|
| + startNode->GetScriptResourceName());
|
| +
|
| + cpu_profiler->DeleteAllCpuProfiles();
|
| +}
|
|
|