Chromium Code Reviews| Index: test/cctest/test-profile-generator.cc |
| diff --git a/test/cctest/test-profile-generator.cc b/test/cctest/test-profile-generator.cc |
| index e9197896734da11548615e2424bafff2608e494f..97d63a75be719149d87982a54ff797e30607de8a 100644 |
| --- a/test/cctest/test-profile-generator.cc |
| +++ b/test/cctest/test-profile-generator.cc |
| @@ -905,3 +905,53 @@ TEST(Issue51919) { |
| for (int i = 0; i < CpuProfilesCollection::kMaxSimultaneousProfiles; ++i) |
| i::DeleteArray(titles[i]); |
| } |
| + |
| + |
| +TEST(ProfileNodeScriptId) { |
| + // This test does not pass with inlining enabled since inlined functions |
| + // don't appear in the stack trace. |
|
yurys
2013/07/01 14:50:00
I think we should be testing with inlining on as w
|
| + i::FLAG_use_inlining = false; |
| + |
| + v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| + v8::HandleScope scope(isolate); |
| + const char* extensions[] = { "v8/profiler" }; |
| + v8::ExtensionConfiguration config(1, extensions); |
| + v8::Local<v8::Context> context = v8::Context::New(isolate, &config); |
| + context->Enter(); |
|
yurys
2013/07/01 14:50:00
Please use LocalContext env(config); instead, it w
|
| + |
| + CpuProfiler* profiler = i::Isolate::Current()->cpu_profiler(); |
| + CHECK_EQ(0, profiler->GetProfilesCount()); |
| + v8::Handle<v8::Script> script_a = v8::Script::Compile(v8::String::New( |
| + "function a() { startProfiling(); }\n")); |
| + script_a->Run(); |
| + v8::Handle<v8::Script> script_b = v8::Script::Compile(v8::String::New( |
| + "function b() { a(); }\n" |
| + "b();\n" |
| + "stopProfiling();\n")); |
| + script_b->Run(); |
| + CHECK_EQ(1, profiler->GetProfilesCount()); |
| + CpuProfile* profile = profiler->GetProfile(NULL, 0); |
|
yurys
2013/07/01 14:50:00
Why don't we use public API here?
|
| + const ProfileTree* topDown = profile->top_down(); |
| + const ProfileNode* current = topDown->root(); |
| + const_cast<ProfileNode*>(current)->Print(0); |
| + // The tree should look like this: |
| + // (root) |
| + // (anonymous function) |
| + // b |
| + // a |
| + // There can also be: |
| + // startProfiling |
| + // if the sampler managed to get a tick. |
| + current = PickChild(current, "(anonymous function)"); |
|
yurys
2013/07/01 14:50:00
Please use i::ProfilerGenerator::kAnonymousFunctio
|
| + CHECK_NE(NULL, const_cast<ProfileNode*>(current)); |
| + |
| + current = PickChild(current, "b"); |
| + CHECK_NE(NULL, const_cast<ProfileNode*>(current)); |
| + CHECK_EQ(script_b->GetId(), current->entry()->script_id()); |
| + |
| + current = PickChild(current, "a"); |
| + CHECK_NE(NULL, const_cast<ProfileNode*>(current)); |
| + CHECK_EQ(script_a->GetId(), current->entry()->script_id()); |
| +} |
| + |
| + |