Chromium Code Reviews| Index: runtime/vm/profiler_test.cc |
| diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc |
| index 8dc7aea3266fff0d381c551d5aac3f758be7f2ca..696475d771391bbaddcbe3996d7c836268bfe6c7 100644 |
| --- a/runtime/vm/profiler_test.cc |
| +++ b/runtime/vm/profiler_test.cc |
| @@ -2809,6 +2809,86 @@ TEST_CASE(Profiler_GetSourceReport) { |
| EXPECT_SUBSTRING("\"inclusiveTicks\":[1,2]", js.ToCString()); |
| } |
| + |
| +TEST_CASE(Profiler_ProfileCodeTableTest) { |
| + Zone* Z = Thread::Current()->zone(); |
| + |
| + ProfileCodeTable* table = new (Z) ProfileCodeTable(); |
| + EXPECT_EQ(table->length(), 0); |
| + EXPECT_EQ(table->FindCodeForPC(42), static_cast<ProfileCode*>(NULL)); |
| + |
| + int64_t timestamp = 0; |
| + Code& null_code = Code::Handle(Z); |
| + |
| + ProfileCode* code1 = new (Z) |
| + ProfileCode(ProfileCode::kNativeCode, 50, 60, timestamp, null_code); |
| + EXPECT_EQ(table->InsertCode(code1), 0); |
| + EXPECT_EQ(table->FindCodeForPC(50), code1); |
|
zra
2017/06/14 17:49:22
Maybe try intermediate and end values here and bel
rmacnak
2017/06/14 18:14:08
Added
|
| + |
| + // Insert below all. |
| + ProfileCode* code2 = new (Z) |
| + ProfileCode(ProfileCode::kNativeCode, 10, 20, timestamp, null_code); |
| + EXPECT_EQ(table->InsertCode(code2), 0); |
| + EXPECT_EQ(table->FindCodeForPC(50), code1); |
| + EXPECT_EQ(table->FindCodeForPC(10), code2); |
| + |
| + // Insert above all. |
| + ProfileCode* code3 = new (Z) |
| + ProfileCode(ProfileCode::kNativeCode, 80, 90, timestamp, null_code); |
| + EXPECT_EQ(table->InsertCode(code3), 2); |
| + EXPECT_EQ(table->FindCodeForPC(50), code1); |
| + EXPECT_EQ(table->FindCodeForPC(10), code2); |
| + EXPECT_EQ(table->FindCodeForPC(80), code3); |
| + |
| + // Insert between. |
| + ProfileCode* code4 = new (Z) |
| + ProfileCode(ProfileCode::kNativeCode, 65, 75, timestamp, null_code); |
| + EXPECT_EQ(table->InsertCode(code4), 2); |
| + EXPECT_EQ(table->FindCodeForPC(50), code1); |
| + EXPECT_EQ(table->FindCodeForPC(10), code2); |
| + EXPECT_EQ(table->FindCodeForPC(80), code3); |
| + EXPECT_EQ(table->FindCodeForPC(65), code4); |
| + |
| + // Insert overlapping left. |
| + ProfileCode* code5 = new (Z) |
| + ProfileCode(ProfileCode::kNativeCode, 15, 25, timestamp, null_code); |
| + EXPECT_EQ(table->InsertCode(code5), 0); |
| + EXPECT_EQ(table->FindCodeForPC(50), code1); |
| + EXPECT_EQ(table->FindCodeForPC(10), code2); |
| + EXPECT_EQ(table->FindCodeForPC(80), code3); |
| + EXPECT_EQ(table->FindCodeForPC(65), code4); |
| + EXPECT_EQ(table->FindCodeForPC(15), code2); // Merged left. |
| + EXPECT_EQ(table->FindCodeForPC(24), code2); // Merged left. |
| + |
| + // Insert overlapping right. |
| + ProfileCode* code6 = new (Z) |
| + ProfileCode(ProfileCode::kNativeCode, 45, 55, timestamp, null_code); |
| + EXPECT_EQ(table->InsertCode(code6), 1); |
| + EXPECT_EQ(table->FindCodeForPC(50), code1); |
| + EXPECT_EQ(table->FindCodeForPC(10), code2); |
| + EXPECT_EQ(table->FindCodeForPC(80), code3); |
| + EXPECT_EQ(table->FindCodeForPC(65), code4); |
| + EXPECT_EQ(table->FindCodeForPC(15), code2); // Merged left. |
| + EXPECT_EQ(table->FindCodeForPC(24), code2); // Merged left. |
| + EXPECT_EQ(table->FindCodeForPC(45), code1); // Merged right. |
| + EXPECT_EQ(table->FindCodeForPC(54), code1); // Merged right. |
| + |
| + // Insert overlapping both. |
| + ProfileCode* code7 = new (Z) |
| + ProfileCode(ProfileCode::kNativeCode, 20, 50, timestamp, null_code); |
| + EXPECT_EQ(table->InsertCode(code7), 0); |
| + EXPECT_EQ(table->FindCodeForPC(50), code1); |
| + EXPECT_EQ(table->FindCodeForPC(10), code2); |
| + EXPECT_EQ(table->FindCodeForPC(80), code3); |
| + EXPECT_EQ(table->FindCodeForPC(65), code4); |
| + EXPECT_EQ(table->FindCodeForPC(15), code2); // Merged left. |
| + EXPECT_EQ(table->FindCodeForPC(24), code2); // Merged left. |
| + EXPECT_EQ(table->FindCodeForPC(45), code1); // Merged right. |
| + EXPECT_EQ(table->FindCodeForPC(54), code1); // Merged right. |
| + EXPECT_EQ(table->FindCodeForPC(20), code2); // Merged left. |
| + EXPECT_EQ(table->FindCodeForPC(49), code1); // Truncated. |
| +} |
| + |
| #endif // !PRODUCT |
| } // namespace dart |