Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(139)

Side by Side Diff: test/cctest/test-profile-generator.cc

Issue 2061623002: Introduce JIT code events dispatcher for the isolate. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebaseline Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/cctest/test-cpu-profiler.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 using i::ProfileTree; 44 using i::ProfileTree;
45 using i::ProfileGenerator; 45 using i::ProfileGenerator;
46 using i::TickSample; 46 using i::TickSample;
47 using i::Vector; 47 using i::Vector;
48 48
49 49
50 TEST(ProfileNodeFindOrAddChild) { 50 TEST(ProfileNodeFindOrAddChild) {
51 CcTest::InitializeVM(); 51 CcTest::InitializeVM();
52 ProfileTree tree(CcTest::i_isolate()); 52 ProfileTree tree(CcTest::i_isolate());
53 ProfileNode* node = tree.root(); 53 ProfileNode* node = tree.root();
54 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); 54 CodeEntry entry1(i::CodeEventListener::FUNCTION_TAG, "aaa");
55 ProfileNode* childNode1 = node->FindOrAddChild(&entry1); 55 ProfileNode* childNode1 = node->FindOrAddChild(&entry1);
56 CHECK(childNode1); 56 CHECK(childNode1);
57 CHECK_EQ(childNode1, node->FindOrAddChild(&entry1)); 57 CHECK_EQ(childNode1, node->FindOrAddChild(&entry1));
58 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); 58 CodeEntry entry2(i::CodeEventListener::FUNCTION_TAG, "bbb");
59 ProfileNode* childNode2 = node->FindOrAddChild(&entry2); 59 ProfileNode* childNode2 = node->FindOrAddChild(&entry2);
60 CHECK(childNode2); 60 CHECK(childNode2);
61 CHECK_NE(childNode1, childNode2); 61 CHECK_NE(childNode1, childNode2);
62 CHECK_EQ(childNode1, node->FindOrAddChild(&entry1)); 62 CHECK_EQ(childNode1, node->FindOrAddChild(&entry1));
63 CHECK_EQ(childNode2, node->FindOrAddChild(&entry2)); 63 CHECK_EQ(childNode2, node->FindOrAddChild(&entry2));
64 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); 64 CodeEntry entry3(i::CodeEventListener::FUNCTION_TAG, "ccc");
65 ProfileNode* childNode3 = node->FindOrAddChild(&entry3); 65 ProfileNode* childNode3 = node->FindOrAddChild(&entry3);
66 CHECK(childNode3); 66 CHECK(childNode3);
67 CHECK_NE(childNode1, childNode3); 67 CHECK_NE(childNode1, childNode3);
68 CHECK_NE(childNode2, childNode3); 68 CHECK_NE(childNode2, childNode3);
69 CHECK_EQ(childNode1, node->FindOrAddChild(&entry1)); 69 CHECK_EQ(childNode1, node->FindOrAddChild(&entry1));
70 CHECK_EQ(childNode2, node->FindOrAddChild(&entry2)); 70 CHECK_EQ(childNode2, node->FindOrAddChild(&entry2));
71 CHECK_EQ(childNode3, node->FindOrAddChild(&entry3)); 71 CHECK_EQ(childNode3, node->FindOrAddChild(&entry3));
72 } 72 }
73 73
74 74
75 TEST(ProfileNodeFindOrAddChildForSameFunction) { 75 TEST(ProfileNodeFindOrAddChildForSameFunction) {
76 CcTest::InitializeVM(); 76 CcTest::InitializeVM();
77 const char* aaa = "aaa"; 77 const char* aaa = "aaa";
78 ProfileTree tree(CcTest::i_isolate()); 78 ProfileTree tree(CcTest::i_isolate());
79 ProfileNode* node = tree.root(); 79 ProfileNode* node = tree.root();
80 CodeEntry entry1(i::Logger::FUNCTION_TAG, aaa); 80 CodeEntry entry1(i::CodeEventListener::FUNCTION_TAG, aaa);
81 ProfileNode* childNode1 = node->FindOrAddChild(&entry1); 81 ProfileNode* childNode1 = node->FindOrAddChild(&entry1);
82 CHECK(childNode1); 82 CHECK(childNode1);
83 CHECK_EQ(childNode1, node->FindOrAddChild(&entry1)); 83 CHECK_EQ(childNode1, node->FindOrAddChild(&entry1));
84 // The same function again. 84 // The same function again.
85 CodeEntry entry2(i::Logger::FUNCTION_TAG, aaa); 85 CodeEntry entry2(i::CodeEventListener::FUNCTION_TAG, aaa);
86 CHECK_EQ(childNode1, node->FindOrAddChild(&entry2)); 86 CHECK_EQ(childNode1, node->FindOrAddChild(&entry2));
87 // Now with a different security token. 87 // Now with a different security token.
88 CodeEntry entry3(i::Logger::FUNCTION_TAG, aaa); 88 CodeEntry entry3(i::CodeEventListener::FUNCTION_TAG, aaa);
89 CHECK_EQ(childNode1, node->FindOrAddChild(&entry3)); 89 CHECK_EQ(childNode1, node->FindOrAddChild(&entry3));
90 } 90 }
91 91
92 92
93 namespace { 93 namespace {
94 94
95 class ProfileTreeTestHelper { 95 class ProfileTreeTestHelper {
96 public: 96 public:
97 explicit ProfileTreeTestHelper(const ProfileTree* tree) 97 explicit ProfileTreeTestHelper(const ProfileTree* tree)
98 : tree_(tree) { } 98 : tree_(tree) { }
(...skipping 16 matching lines...) Expand all
115 115
116 private: 116 private:
117 const ProfileTree* tree_; 117 const ProfileTree* tree_;
118 }; 118 };
119 119
120 } // namespace 120 } // namespace
121 121
122 122
123 TEST(ProfileTreeAddPathFromEnd) { 123 TEST(ProfileTreeAddPathFromEnd) {
124 CcTest::InitializeVM(); 124 CcTest::InitializeVM();
125 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); 125 CodeEntry entry1(i::CodeEventListener::FUNCTION_TAG, "aaa");
126 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); 126 CodeEntry entry2(i::CodeEventListener::FUNCTION_TAG, "bbb");
127 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); 127 CodeEntry entry3(i::CodeEventListener::FUNCTION_TAG, "ccc");
128 ProfileTree tree(CcTest::i_isolate()); 128 ProfileTree tree(CcTest::i_isolate());
129 ProfileTreeTestHelper helper(&tree); 129 ProfileTreeTestHelper helper(&tree);
130 CHECK(!helper.Walk(&entry1)); 130 CHECK(!helper.Walk(&entry1));
131 CHECK(!helper.Walk(&entry2)); 131 CHECK(!helper.Walk(&entry2));
132 CHECK(!helper.Walk(&entry3)); 132 CHECK(!helper.Walk(&entry3));
133 133
134 CodeEntry* path[] = {NULL, &entry3, NULL, &entry2, NULL, NULL, &entry1, NULL}; 134 CodeEntry* path[] = {NULL, &entry3, NULL, &entry2, NULL, NULL, &entry1, NULL};
135 std::vector<CodeEntry*> path_vec(path, path + arraysize(path)); 135 std::vector<CodeEntry*> path_vec(path, path + arraysize(path));
136 tree.AddPathFromEnd(path_vec); 136 tree.AddPathFromEnd(path_vec);
137 CHECK(!helper.Walk(&entry2)); 137 CHECK(!helper.Walk(&entry2));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 } 180 }
181 181
182 182
183 TEST(ProfileTreeCalculateTotalTicks) { 183 TEST(ProfileTreeCalculateTotalTicks) {
184 CcTest::InitializeVM(); 184 CcTest::InitializeVM();
185 ProfileTree empty_tree(CcTest::i_isolate()); 185 ProfileTree empty_tree(CcTest::i_isolate());
186 CHECK_EQ(0u, empty_tree.root()->self_ticks()); 186 CHECK_EQ(0u, empty_tree.root()->self_ticks());
187 empty_tree.root()->IncrementSelfTicks(); 187 empty_tree.root()->IncrementSelfTicks();
188 CHECK_EQ(1u, empty_tree.root()->self_ticks()); 188 CHECK_EQ(1u, empty_tree.root()->self_ticks());
189 189
190 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); 190 CodeEntry entry1(i::CodeEventListener::FUNCTION_TAG, "aaa");
191 CodeEntry* e1_path[] = {&entry1}; 191 CodeEntry* e1_path[] = {&entry1};
192 std::vector<CodeEntry*> e1_path_vec(e1_path, e1_path + arraysize(e1_path)); 192 std::vector<CodeEntry*> e1_path_vec(e1_path, e1_path + arraysize(e1_path));
193 193
194 ProfileTree single_child_tree(CcTest::i_isolate()); 194 ProfileTree single_child_tree(CcTest::i_isolate());
195 single_child_tree.AddPathFromEnd(e1_path_vec); 195 single_child_tree.AddPathFromEnd(e1_path_vec);
196 single_child_tree.root()->IncrementSelfTicks(); 196 single_child_tree.root()->IncrementSelfTicks();
197 CHECK_EQ(1u, single_child_tree.root()->self_ticks()); 197 CHECK_EQ(1u, single_child_tree.root()->self_ticks());
198 ProfileTreeTestHelper single_child_helper(&single_child_tree); 198 ProfileTreeTestHelper single_child_helper(&single_child_tree);
199 ProfileNode* node1 = single_child_helper.Walk(&entry1); 199 ProfileNode* node1 = single_child_helper.Walk(&entry1);
200 CHECK(node1); 200 CHECK(node1);
201 CHECK_EQ(1u, single_child_tree.root()->self_ticks()); 201 CHECK_EQ(1u, single_child_tree.root()->self_ticks());
202 CHECK_EQ(1u, node1->self_ticks()); 202 CHECK_EQ(1u, node1->self_ticks());
203 203
204 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); 204 CodeEntry entry2(i::CodeEventListener::FUNCTION_TAG, "bbb");
205 CodeEntry* e2_e1_path[] = {&entry2, &entry1}; 205 CodeEntry* e2_e1_path[] = {&entry2, &entry1};
206 std::vector<CodeEntry*> e2_e1_path_vec(e2_e1_path, 206 std::vector<CodeEntry*> e2_e1_path_vec(e2_e1_path,
207 e2_e1_path + arraysize(e2_e1_path)); 207 e2_e1_path + arraysize(e2_e1_path));
208 208
209 ProfileTree flat_tree(CcTest::i_isolate()); 209 ProfileTree flat_tree(CcTest::i_isolate());
210 ProfileTreeTestHelper flat_helper(&flat_tree); 210 ProfileTreeTestHelper flat_helper(&flat_tree);
211 flat_tree.AddPathFromEnd(e1_path_vec); 211 flat_tree.AddPathFromEnd(e1_path_vec);
212 flat_tree.AddPathFromEnd(e1_path_vec); 212 flat_tree.AddPathFromEnd(e1_path_vec);
213 flat_tree.AddPathFromEnd(e2_e1_path_vec); 213 flat_tree.AddPathFromEnd(e2_e1_path_vec);
214 flat_tree.AddPathFromEnd(e2_e1_path_vec); 214 flat_tree.AddPathFromEnd(e2_e1_path_vec);
215 flat_tree.AddPathFromEnd(e2_e1_path_vec); 215 flat_tree.AddPathFromEnd(e2_e1_path_vec);
216 // Results in {root,0,0} -> {entry1,0,2} -> {entry2,0,3} 216 // Results in {root,0,0} -> {entry1,0,2} -> {entry2,0,3}
217 CHECK_EQ(0u, flat_tree.root()->self_ticks()); 217 CHECK_EQ(0u, flat_tree.root()->self_ticks());
218 node1 = flat_helper.Walk(&entry1); 218 node1 = flat_helper.Walk(&entry1);
219 CHECK(node1); 219 CHECK(node1);
220 CHECK_EQ(2u, node1->self_ticks()); 220 CHECK_EQ(2u, node1->self_ticks());
221 ProfileNode* node2 = flat_helper.Walk(&entry1, &entry2); 221 ProfileNode* node2 = flat_helper.Walk(&entry1, &entry2);
222 CHECK(node2); 222 CHECK(node2);
223 CHECK_EQ(3u, node2->self_ticks()); 223 CHECK_EQ(3u, node2->self_ticks());
224 // Must calculate {root,5,0} -> {entry1,5,2} -> {entry2,3,3} 224 // Must calculate {root,5,0} -> {entry1,5,2} -> {entry2,3,3}
225 CHECK_EQ(0u, flat_tree.root()->self_ticks()); 225 CHECK_EQ(0u, flat_tree.root()->self_ticks());
226 CHECK_EQ(2u, node1->self_ticks()); 226 CHECK_EQ(2u, node1->self_ticks());
227 227
228 CodeEntry* e2_path[] = {&entry2}; 228 CodeEntry* e2_path[] = {&entry2};
229 std::vector<CodeEntry*> e2_path_vec(e2_path, e2_path + arraysize(e2_path)); 229 std::vector<CodeEntry*> e2_path_vec(e2_path, e2_path + arraysize(e2_path));
230 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); 230 CodeEntry entry3(i::CodeEventListener::FUNCTION_TAG, "ccc");
231 CodeEntry* e3_path[] = {&entry3}; 231 CodeEntry* e3_path[] = {&entry3};
232 std::vector<CodeEntry*> e3_path_vec(e3_path, e3_path + arraysize(e3_path)); 232 std::vector<CodeEntry*> e3_path_vec(e3_path, e3_path + arraysize(e3_path));
233 233
234 ProfileTree wide_tree(CcTest::i_isolate()); 234 ProfileTree wide_tree(CcTest::i_isolate());
235 ProfileTreeTestHelper wide_helper(&wide_tree); 235 ProfileTreeTestHelper wide_helper(&wide_tree);
236 wide_tree.AddPathFromEnd(e1_path_vec); 236 wide_tree.AddPathFromEnd(e1_path_vec);
237 wide_tree.AddPathFromEnd(e1_path_vec); 237 wide_tree.AddPathFromEnd(e1_path_vec);
238 wide_tree.AddPathFromEnd(e2_e1_path_vec); 238 wide_tree.AddPathFromEnd(e2_e1_path_vec);
239 wide_tree.AddPathFromEnd(e2_path_vec); 239 wide_tree.AddPathFromEnd(e2_path_vec);
240 wide_tree.AddPathFromEnd(e2_path_vec); 240 wide_tree.AddPathFromEnd(e2_path_vec);
(...skipping 29 matching lines...) Expand all
270 } 270 }
271 271
272 272
273 static inline i::Address ToAddress(int n) { 273 static inline i::Address ToAddress(int n) {
274 return reinterpret_cast<i::Address>(n); 274 return reinterpret_cast<i::Address>(n);
275 } 275 }
276 276
277 277
278 TEST(CodeMapAddCode) { 278 TEST(CodeMapAddCode) {
279 CodeMap code_map; 279 CodeMap code_map;
280 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); 280 CodeEntry entry1(i::CodeEventListener::FUNCTION_TAG, "aaa");
281 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); 281 CodeEntry entry2(i::CodeEventListener::FUNCTION_TAG, "bbb");
282 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); 282 CodeEntry entry3(i::CodeEventListener::FUNCTION_TAG, "ccc");
283 CodeEntry entry4(i::Logger::FUNCTION_TAG, "ddd"); 283 CodeEntry entry4(i::CodeEventListener::FUNCTION_TAG, "ddd");
284 code_map.AddCode(ToAddress(0x1500), &entry1, 0x200); 284 code_map.AddCode(ToAddress(0x1500), &entry1, 0x200);
285 code_map.AddCode(ToAddress(0x1700), &entry2, 0x100); 285 code_map.AddCode(ToAddress(0x1700), &entry2, 0x100);
286 code_map.AddCode(ToAddress(0x1900), &entry3, 0x50); 286 code_map.AddCode(ToAddress(0x1900), &entry3, 0x50);
287 code_map.AddCode(ToAddress(0x1950), &entry4, 0x10); 287 code_map.AddCode(ToAddress(0x1950), &entry4, 0x10);
288 CHECK(!code_map.FindEntry(0)); 288 CHECK(!code_map.FindEntry(0));
289 CHECK(!code_map.FindEntry(ToAddress(0x1500 - 1))); 289 CHECK(!code_map.FindEntry(ToAddress(0x1500 - 1)));
290 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500))); 290 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500)));
291 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500 + 0x100))); 291 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500 + 0x100)));
292 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500 + 0x200 - 1))); 292 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500 + 0x200 - 1)));
293 CHECK_EQ(&entry2, code_map.FindEntry(ToAddress(0x1700))); 293 CHECK_EQ(&entry2, code_map.FindEntry(ToAddress(0x1700)));
294 CHECK_EQ(&entry2, code_map.FindEntry(ToAddress(0x1700 + 0x50))); 294 CHECK_EQ(&entry2, code_map.FindEntry(ToAddress(0x1700 + 0x50)));
295 CHECK_EQ(&entry2, code_map.FindEntry(ToAddress(0x1700 + 0x100 - 1))); 295 CHECK_EQ(&entry2, code_map.FindEntry(ToAddress(0x1700 + 0x100 - 1)));
296 CHECK(!code_map.FindEntry(ToAddress(0x1700 + 0x100))); 296 CHECK(!code_map.FindEntry(ToAddress(0x1700 + 0x100)));
297 CHECK(!code_map.FindEntry(ToAddress(0x1900 - 1))); 297 CHECK(!code_map.FindEntry(ToAddress(0x1900 - 1)));
298 CHECK_EQ(&entry3, code_map.FindEntry(ToAddress(0x1900))); 298 CHECK_EQ(&entry3, code_map.FindEntry(ToAddress(0x1900)));
299 CHECK_EQ(&entry3, code_map.FindEntry(ToAddress(0x1900 + 0x28))); 299 CHECK_EQ(&entry3, code_map.FindEntry(ToAddress(0x1900 + 0x28)));
300 CHECK_EQ(&entry4, code_map.FindEntry(ToAddress(0x1950))); 300 CHECK_EQ(&entry4, code_map.FindEntry(ToAddress(0x1950)));
301 CHECK_EQ(&entry4, code_map.FindEntry(ToAddress(0x1950 + 0x7))); 301 CHECK_EQ(&entry4, code_map.FindEntry(ToAddress(0x1950 + 0x7)));
302 CHECK_EQ(&entry4, code_map.FindEntry(ToAddress(0x1950 + 0x10 - 1))); 302 CHECK_EQ(&entry4, code_map.FindEntry(ToAddress(0x1950 + 0x10 - 1)));
303 CHECK(!code_map.FindEntry(ToAddress(0x1950 + 0x10))); 303 CHECK(!code_map.FindEntry(ToAddress(0x1950 + 0x10)));
304 CHECK(!code_map.FindEntry(ToAddress(0xFFFFFFFF))); 304 CHECK(!code_map.FindEntry(ToAddress(0xFFFFFFFF)));
305 } 305 }
306 306
307 307
308 TEST(CodeMapMoveAndDeleteCode) { 308 TEST(CodeMapMoveAndDeleteCode) {
309 CodeMap code_map; 309 CodeMap code_map;
310 CodeEntry entry1(i::Logger::FUNCTION_TAG, "aaa"); 310 CodeEntry entry1(i::CodeEventListener::FUNCTION_TAG, "aaa");
311 CodeEntry entry2(i::Logger::FUNCTION_TAG, "bbb"); 311 CodeEntry entry2(i::CodeEventListener::FUNCTION_TAG, "bbb");
312 code_map.AddCode(ToAddress(0x1500), &entry1, 0x200); 312 code_map.AddCode(ToAddress(0x1500), &entry1, 0x200);
313 code_map.AddCode(ToAddress(0x1700), &entry2, 0x100); 313 code_map.AddCode(ToAddress(0x1700), &entry2, 0x100);
314 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500))); 314 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1500)));
315 CHECK_EQ(&entry2, code_map.FindEntry(ToAddress(0x1700))); 315 CHECK_EQ(&entry2, code_map.FindEntry(ToAddress(0x1700)));
316 code_map.MoveCode(ToAddress(0x1500), ToAddress(0x1700)); // Deprecate bbb. 316 code_map.MoveCode(ToAddress(0x1500), ToAddress(0x1700)); // Deprecate bbb.
317 CHECK(!code_map.FindEntry(ToAddress(0x1500))); 317 CHECK(!code_map.FindEntry(ToAddress(0x1500)));
318 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1700))); 318 CHECK_EQ(&entry1, code_map.FindEntry(ToAddress(0x1700)));
319 CodeEntry entry3(i::Logger::FUNCTION_TAG, "ccc"); 319 CodeEntry entry3(i::CodeEventListener::FUNCTION_TAG, "ccc");
320 code_map.AddCode(ToAddress(0x1750), &entry3, 0x100); 320 code_map.AddCode(ToAddress(0x1750), &entry3, 0x100);
321 CHECK(!code_map.FindEntry(ToAddress(0x1700))); 321 CHECK(!code_map.FindEntry(ToAddress(0x1700)));
322 CHECK_EQ(&entry3, code_map.FindEntry(ToAddress(0x1750))); 322 CHECK_EQ(&entry3, code_map.FindEntry(ToAddress(0x1750)));
323 } 323 }
324 324
325 325
326 namespace { 326 namespace {
327 327
328 class TestSetup { 328 class TestSetup {
329 public: 329 public:
(...skipping 10 matching lines...) Expand all
340 bool old_flag_prof_browser_mode_; 340 bool old_flag_prof_browser_mode_;
341 }; 341 };
342 342
343 } // namespace 343 } // namespace
344 344
345 TEST(RecordTickSample) { 345 TEST(RecordTickSample) {
346 TestSetup test_setup; 346 TestSetup test_setup;
347 CpuProfilesCollection profiles(CcTest::heap()); 347 CpuProfilesCollection profiles(CcTest::heap());
348 profiles.StartProfiling("", false); 348 profiles.StartProfiling("", false);
349 ProfileGenerator generator(&profiles); 349 ProfileGenerator generator(&profiles);
350 CodeEntry* entry1 = profiles.NewCodeEntry(i::Logger::FUNCTION_TAG, "aaa"); 350 CodeEntry* entry1 =
351 CodeEntry* entry2 = profiles.NewCodeEntry(i::Logger::FUNCTION_TAG, "bbb"); 351 profiles.NewCodeEntry(i::CodeEventListener::FUNCTION_TAG, "aaa");
352 CodeEntry* entry3 = profiles.NewCodeEntry(i::Logger::FUNCTION_TAG, "ccc"); 352 CodeEntry* entry2 =
353 profiles.NewCodeEntry(i::CodeEventListener::FUNCTION_TAG, "bbb");
354 CodeEntry* entry3 =
355 profiles.NewCodeEntry(i::CodeEventListener::FUNCTION_TAG, "ccc");
353 generator.code_map()->AddCode(ToAddress(0x1500), entry1, 0x200); 356 generator.code_map()->AddCode(ToAddress(0x1500), entry1, 0x200);
354 generator.code_map()->AddCode(ToAddress(0x1700), entry2, 0x100); 357 generator.code_map()->AddCode(ToAddress(0x1700), entry2, 0x100);
355 generator.code_map()->AddCode(ToAddress(0x1900), entry3, 0x50); 358 generator.code_map()->AddCode(ToAddress(0x1900), entry3, 0x50);
356 359
357 // We are building the following calls tree: 360 // We are building the following calls tree:
358 // -> aaa - sample1 361 // -> aaa - sample1
359 // aaa -> bbb -> ccc - sample2 362 // aaa -> bbb -> ccc - sample2
360 // -> ccc -> aaa - sample3 363 // -> ccc -> aaa - sample3
361 TickSample sample1; 364 TickSample sample1;
362 sample1.pc = ToAddress(0x1600); 365 sample1.pc = ToAddress(0x1600);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 CheckNodeIds(node->children()->at(i), expectedId); 409 CheckNodeIds(node->children()->at(i), expectedId);
407 } 410 }
408 } 411 }
409 412
410 413
411 TEST(SampleIds) { 414 TEST(SampleIds) {
412 TestSetup test_setup; 415 TestSetup test_setup;
413 CpuProfilesCollection profiles(CcTest::heap()); 416 CpuProfilesCollection profiles(CcTest::heap());
414 profiles.StartProfiling("", true); 417 profiles.StartProfiling("", true);
415 ProfileGenerator generator(&profiles); 418 ProfileGenerator generator(&profiles);
416 CodeEntry* entry1 = profiles.NewCodeEntry(i::Logger::FUNCTION_TAG, "aaa"); 419 CodeEntry* entry1 =
417 CodeEntry* entry2 = profiles.NewCodeEntry(i::Logger::FUNCTION_TAG, "bbb"); 420 profiles.NewCodeEntry(i::CodeEventListener::FUNCTION_TAG, "aaa");
418 CodeEntry* entry3 = profiles.NewCodeEntry(i::Logger::FUNCTION_TAG, "ccc"); 421 CodeEntry* entry2 =
422 profiles.NewCodeEntry(i::CodeEventListener::FUNCTION_TAG, "bbb");
423 CodeEntry* entry3 =
424 profiles.NewCodeEntry(i::CodeEventListener::FUNCTION_TAG, "ccc");
419 generator.code_map()->AddCode(ToAddress(0x1500), entry1, 0x200); 425 generator.code_map()->AddCode(ToAddress(0x1500), entry1, 0x200);
420 generator.code_map()->AddCode(ToAddress(0x1700), entry2, 0x100); 426 generator.code_map()->AddCode(ToAddress(0x1700), entry2, 0x100);
421 generator.code_map()->AddCode(ToAddress(0x1900), entry3, 0x50); 427 generator.code_map()->AddCode(ToAddress(0x1900), entry3, 0x50);
422 428
423 // We are building the following calls tree: 429 // We are building the following calls tree:
424 // -> aaa #3 - sample1 430 // -> aaa #3 - sample1
425 // (root)#1 -> aaa #2 -> bbb #4 -> ccc #5 - sample2 431 // (root)#1 -> aaa #2 -> bbb #4 -> ccc #5 - sample2
426 // -> ccc #6 -> aaa #7 - sample3 432 // -> ccc #6 -> aaa #7 - sample3
427 TickSample sample1; 433 TickSample sample1;
428 sample1.timestamp = v8::base::TimeTicks::HighResolutionNow(); 434 sample1.timestamp = v8::base::TimeTicks::HighResolutionNow();
(...skipping 28 matching lines...) Expand all
457 CHECK_EQ(expected_id[i], profile->sample(i)->id()); 463 CHECK_EQ(expected_id[i], profile->sample(i)->id());
458 } 464 }
459 } 465 }
460 466
461 467
462 TEST(NoSamples) { 468 TEST(NoSamples) {
463 TestSetup test_setup; 469 TestSetup test_setup;
464 CpuProfilesCollection profiles(CcTest::heap()); 470 CpuProfilesCollection profiles(CcTest::heap());
465 profiles.StartProfiling("", false); 471 profiles.StartProfiling("", false);
466 ProfileGenerator generator(&profiles); 472 ProfileGenerator generator(&profiles);
467 CodeEntry* entry1 = profiles.NewCodeEntry(i::Logger::FUNCTION_TAG, "aaa"); 473 CodeEntry* entry1 =
474 profiles.NewCodeEntry(i::CodeEventListener::FUNCTION_TAG, "aaa");
468 generator.code_map()->AddCode(ToAddress(0x1500), entry1, 0x200); 475 generator.code_map()->AddCode(ToAddress(0x1500), entry1, 0x200);
469 476
470 // We are building the following calls tree: 477 // We are building the following calls tree:
471 // (root)#1 -> aaa #2 -> aaa #3 - sample1 478 // (root)#1 -> aaa #2 -> aaa #3 - sample1
472 TickSample sample1; 479 TickSample sample1;
473 sample1.pc = ToAddress(0x1600); 480 sample1.pc = ToAddress(0x1600);
474 sample1.stack[0] = ToAddress(0x1510); 481 sample1.stack[0] = ToAddress(0x1510);
475 sample1.frames_count = 1; 482 sample1.frames_count = 1;
476 generator.RecordTickSample(sample1); 483 generator.RecordTickSample(sample1);
477 484
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 // (root) 718 // (root)
712 // "" 719 // ""
713 // kDebuggerStatement 720 // kDebuggerStatement
714 current = PickChild(current, ""); 721 current = PickChild(current, "");
715 CHECK(const_cast<v8::CpuProfileNode*>(current)); 722 CHECK(const_cast<v8::CpuProfileNode*>(current));
716 723
717 current = PickChild(current, "Debugger"); 724 current = PickChild(current, "Debugger");
718 CHECK(const_cast<v8::CpuProfileNode*>(current)); 725 CHECK(const_cast<v8::CpuProfileNode*>(current));
719 CHECK(!strcmp("DebuggerStatement", current->GetBailoutReason())); 726 CHECK(!strcmp("DebuggerStatement", current->GetBailoutReason()));
720 } 727 }
OLDNEW
« no previous file with comments | « test/cctest/test-cpu-profiler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698