Index: test/cctest/test-cpu-profiler.cc |
diff --git a/test/cctest/test-cpu-profiler.cc b/test/cctest/test-cpu-profiler.cc |
index 6075fe16064be77c2b9ab36e2f84c58d462d7e3a..9a2496a72a96a77154be1003aab35b150300be8a 100644 |
--- a/test/cctest/test-cpu-profiler.cc |
+++ b/test/cctest/test-cpu-profiler.cc |
@@ -97,87 +97,64 @@ class TestSetup { |
} // namespace |
- |
-i::Code* CreateCode(LocalContext* env) { |
- static int counter = 0; |
- char script[256]; |
- char name[32]; |
- snprintf(name, sizeof(name), "function_%d", ++counter); |
- snprintf(script, sizeof(script), |
- "function %s() {\n" |
- "var counter = 0;\n" |
- "for (var i = 0; i < %d; ++i) counter += i;\n" |
- "return '%s_' + counter;\n" |
- "}\n" |
- "%s();\n", name, counter, name, name); |
- CompileRun(script); |
- i::Handle<i::JSFunction> fun = v8::Utils::OpenHandle( |
- *v8::Local<v8::Function>::Cast((*env)->Global()->Get(v8_str(name)))); |
- fprintf(stderr, "code size: %d\n", fun->code()->ExecutableSize()); |
- return fun->code(); |
-} |
- |
- |
TEST(CodeEvents) { |
CcTest::InitializeVM(); |
- LocalContext env; |
i::Isolate* isolate = i::Isolate::Current(); |
+ i::Heap* heap = isolate->heap(); |
i::Factory* factory = isolate->factory(); |
TestSetup test_setup; |
- |
- i::HandleScope scope(isolate); |
- |
- i::Code* aaa_code = CreateCode(&env); |
- i::Code* comment_code = CreateCode(&env); |
- i::Code* args5_code = CreateCode(&env); |
- i::Code* comment2_code = CreateCode(&env); |
- i::Code* moved_code = CreateCode(&env); |
- i::Code* args3_code = CreateCode(&env); |
- i::Code* args4_code = CreateCode(&env); |
- |
- CpuProfilesCollection* profiles = new CpuProfilesCollection; |
- profiles->StartProfiling("", 1, false); |
- ProfileGenerator generator(profiles); |
- ProfilerEventsProcessor processor(&generator, profiles); |
+ CpuProfilesCollection profiles; |
+ profiles.StartProfiling("", 1, false); |
+ ProfileGenerator generator(&profiles); |
+ ProfilerEventsProcessor processor(&generator, &profiles); |
processor.Start(); |
- CpuProfiler profiler(isolate, profiles, &generator, &processor); |
// Enqueue code creation events. |
+ i::HandleScope scope(isolate); |
const char* aaa_str = "aaa"; |
i::Handle<i::String> aaa_name = factory->NewStringFromAscii( |
i::Vector<const char>(aaa_str, i::StrLength(aaa_str))); |
- profiler.CodeCreateEvent(i::Logger::FUNCTION_TAG, aaa_code, *aaa_name); |
- profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, comment_code, "comment"); |
- profiler.CodeCreateEvent(i::Logger::STUB_TAG, args5_code, 5); |
- profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, comment2_code, "comment2"); |
- profiler.CodeMoveEvent(comment2_code->address(), moved_code->address()); |
- profiler.CodeCreateEvent(i::Logger::STUB_TAG, args3_code, 3); |
- profiler.CodeCreateEvent(i::Logger::STUB_TAG, args4_code, 4); |
- |
+ processor.CodeCreateEvent(i::Logger::FUNCTION_TAG, |
+ *aaa_name, |
+ heap->empty_string(), |
+ 0, |
+ ToAddress(0x1000), |
+ 0x100, |
+ ToAddress(0x10000), |
+ NULL); |
+ processor.CodeCreateEvent(i::Logger::BUILTIN_TAG, |
+ "bbb", |
+ ToAddress(0x1200), |
+ 0x80); |
+ processor.CodeCreateEvent(i::Logger::STUB_TAG, 5, ToAddress(0x1300), 0x10); |
+ processor.CodeCreateEvent(i::Logger::BUILTIN_TAG, |
+ "ddd", |
+ ToAddress(0x1400), |
+ 0x80); |
+ processor.CodeMoveEvent(ToAddress(0x1400), ToAddress(0x1500)); |
+ processor.CodeCreateEvent(i::Logger::STUB_TAG, 3, ToAddress(0x1600), 0x10); |
+ processor.CodeCreateEvent(i::Logger::STUB_TAG, 4, ToAddress(0x1605), 0x10); |
// Enqueue a tick event to enable code events processing. |
- EnqueueTickSampleEvent(&processor, aaa_code->address()); |
+ EnqueueTickSampleEvent(&processor, ToAddress(0x1000)); |
processor.Stop(); |
processor.Join(); |
// Check the state of profile generator. |
- CodeEntry* aaa = generator.code_map()->FindEntry(aaa_code->address()); |
- CHECK_NE(NULL, aaa); |
- CHECK_EQ(aaa_str, aaa->name()); |
- |
- CodeEntry* comment = generator.code_map()->FindEntry(comment_code->address()); |
- CHECK_NE(NULL, comment); |
- CHECK_EQ("comment", comment->name()); |
- |
- CodeEntry* args5 = generator.code_map()->FindEntry(args5_code->address()); |
- CHECK_NE(NULL, args5); |
- CHECK_EQ("5", args5->name()); |
- |
- CHECK_EQ(NULL, generator.code_map()->FindEntry(comment2_code->address())); |
- |
- CodeEntry* comment2 = generator.code_map()->FindEntry(moved_code->address()); |
- CHECK_NE(NULL, comment2); |
- CHECK_EQ("comment2", comment2->name()); |
+ CodeEntry* entry1 = generator.code_map()->FindEntry(ToAddress(0x1000)); |
+ CHECK_NE(NULL, entry1); |
+ CHECK_EQ(aaa_str, entry1->name()); |
+ CodeEntry* entry2 = generator.code_map()->FindEntry(ToAddress(0x1200)); |
+ CHECK_NE(NULL, entry2); |
+ CHECK_EQ("bbb", entry2->name()); |
+ CodeEntry* entry3 = generator.code_map()->FindEntry(ToAddress(0x1300)); |
+ CHECK_NE(NULL, entry3); |
+ CHECK_EQ("5", entry3->name()); |
+ CHECK_EQ(NULL, generator.code_map()->FindEntry(ToAddress(0x1400))); |
+ CodeEntry* entry4 = generator.code_map()->FindEntry(ToAddress(0x1500)); |
+ CHECK_NE(NULL, entry4); |
+ CHECK_EQ("ddd", entry4->name()); |
+ CHECK_EQ(NULL, generator.code_map()->FindEntry(ToAddress(0x1600))); |
} |
@@ -188,40 +165,32 @@ static int CompareProfileNodes(const T* p1, const T* p2) { |
TEST(TickEvents) { |
TestSetup test_setup; |
- LocalContext env; |
- i::Isolate* isolate = i::Isolate::Current(); |
- i::HandleScope scope(isolate); |
- |
- i::Code* frame1_code = CreateCode(&env); |
- i::Code* frame2_code = CreateCode(&env); |
- i::Code* frame3_code = CreateCode(&env); |
- |
- CpuProfilesCollection* profiles = new CpuProfilesCollection; |
- profiles->StartProfiling("", 1, false); |
- ProfileGenerator generator(profiles); |
- ProfilerEventsProcessor processor(&generator, profiles); |
+ CpuProfilesCollection profiles; |
+ profiles.StartProfiling("", 1, false); |
+ ProfileGenerator generator(&profiles); |
+ ProfilerEventsProcessor processor(&generator, &profiles); |
processor.Start(); |
- CpuProfiler profiler(isolate, profiles, &generator, &processor); |
- |
- profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame1_code, "bbb"); |
- profiler.CodeCreateEvent(i::Logger::STUB_TAG, frame2_code, 5); |
- profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, frame3_code, "ddd"); |
- |
- EnqueueTickSampleEvent(&processor, frame1_code->instruction_start()); |
- EnqueueTickSampleEvent( |
- &processor, |
- frame2_code->instruction_start() + frame2_code->ExecutableSize() / 2, |
- frame1_code->instruction_start() + frame2_code->ExecutableSize() / 2); |
- EnqueueTickSampleEvent( |
- &processor, |
- frame3_code->instruction_end() - 1, |
- frame2_code->instruction_end() - 1, |
- frame1_code->instruction_end() - 1); |
+ |
+ processor.CodeCreateEvent(i::Logger::BUILTIN_TAG, |
+ "bbb", |
+ ToAddress(0x1200), |
+ 0x80); |
+ processor.CodeCreateEvent(i::Logger::STUB_TAG, 5, ToAddress(0x1300), 0x10); |
+ processor.CodeCreateEvent(i::Logger::BUILTIN_TAG, |
+ "ddd", |
+ ToAddress(0x1400), |
+ 0x80); |
+ EnqueueTickSampleEvent(&processor, ToAddress(0x1210)); |
+ EnqueueTickSampleEvent(&processor, ToAddress(0x1305), ToAddress(0x1220)); |
+ EnqueueTickSampleEvent(&processor, |
+ ToAddress(0x1404), |
+ ToAddress(0x1305), |
+ ToAddress(0x1230)); |
processor.Stop(); |
processor.Join(); |
CpuProfile* profile = |
- profiles->StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1); |
+ profiles.StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1); |
CHECK_NE(NULL, profile); |
// Check call trees. |
@@ -260,33 +229,29 @@ TEST(CrashIfStoppingLastNonExistentProfile) { |
// Long stacks (exceeding max frames limit) must not be erased. |
TEST(Issue1398) { |
TestSetup test_setup; |
- LocalContext env; |
- i::Isolate* isolate = i::Isolate::Current(); |
- i::HandleScope scope(isolate); |
- |
- i::Code* code = CreateCode(&env); |
- |
- CpuProfilesCollection* profiles = new CpuProfilesCollection; |
- profiles->StartProfiling("", 1, false); |
- ProfileGenerator generator(profiles); |
- ProfilerEventsProcessor processor(&generator, profiles); |
+ CpuProfilesCollection profiles; |
+ profiles.StartProfiling("", 1, false); |
+ ProfileGenerator generator(&profiles); |
+ ProfilerEventsProcessor processor(&generator, &profiles); |
processor.Start(); |
- CpuProfiler profiler(isolate, profiles, &generator, &processor); |
- profiler.CodeCreateEvent(i::Logger::BUILTIN_TAG, code, "bbb"); |
+ processor.CodeCreateEvent(i::Logger::BUILTIN_TAG, |
+ "bbb", |
+ ToAddress(0x1200), |
+ 0x80); |
i::TickSample* sample = processor.TickSampleEvent(); |
- sample->pc = code->address(); |
+ sample->pc = ToAddress(0x1200); |
sample->tos = 0; |
sample->frames_count = i::TickSample::kMaxFramesCount; |
for (int i = 0; i < sample->frames_count; ++i) { |
- sample->stack[i] = code->address(); |
+ sample->stack[i] = ToAddress(0x1200); |
} |
processor.Stop(); |
processor.Join(); |
CpuProfile* profile = |
- profiles->StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1); |
+ profiles.StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1); |
CHECK_NE(NULL, profile); |
int actual_depth = 0; |