Chromium Code Reviews| Index: test/cctest/test-cpu-profiler.cc |
| diff --git a/test/cctest/test-cpu-profiler.cc b/test/cctest/test-cpu-profiler.cc |
| index 749ac154340bda2e4ec91e86158e5cb212614d90..17611acbf91409a796146dca528c85cf23d53da2 100644 |
| --- a/test/cctest/test-cpu-profiler.cc |
| +++ b/test/cctest/test-cpu-profiler.cc |
| @@ -238,6 +238,49 @@ TEST(CrashIfStoppingLastNonExistentProfile) { |
| } |
| +// http://code.google.com/p/v8/issues/detail?id=1398 |
| +// Long stacks (exceeding max frames limit) must not be erased. |
| +TEST(Issue1398) { |
| + TestSetup test_setup; |
| + CpuProfilesCollection profiles; |
| + profiles.StartProfiling("", 1); |
| + ProfileGenerator generator(&profiles); |
| + ProfilerEventsProcessor processor(i::Isolate::Current(), &generator); |
| + processor.Start(); |
| + while (!processor.running()) { |
|
Vitaly Repeshko
2011/05/19 11:31:01
ProfilerEventsProcessor sets "running" to true in
|
| + i::Thread::YieldCPU(); |
| + } |
| + |
| + processor.CodeCreateEvent(i::Logger::BUILTIN_TAG, |
| + "bbb", |
| + ToAddress(0x1200), |
| + 0x80); |
| + |
| + i::TickSample* sample = processor.TickSampleEvent(); |
| + 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] = ToAddress(0x1200); |
| + } |
| + |
| + processor.Stop(); |
| + processor.Join(); |
| + CpuProfile* profile = |
| + profiles.StopProfiling(TokenEnumerator::kNoSecurityToken, "", 1); |
| + CHECK_NE(NULL, profile); |
| + |
| + int actual_depth = 0; |
| + const ProfileNode* node = profile->top_down()->root(); |
| + while (node->children()->length() > 0) { |
| + node = node->children()->last(); |
| + ++actual_depth; |
| + } |
| + |
| + CHECK_EQ(1 + i::TickSample::kMaxFramesCount, actual_depth); // +1 for PC. |
| +} |
| + |
| + |
| TEST(DeleteAllCpuProfiles) { |
| InitializeVM(); |
| TestSetup test_setup; |