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

Side by Side Diff: test/cctest/test-heap-profiler.cc

Issue 9858010: Complete switch to SnapshotObjectId. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: static_cast changed to int32_t Created 8 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « src/api.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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // 2 //
3 // Tests for heap profiler 3 // Tests for heap profiler
4 4
5 #include "v8.h" 5 #include "v8.h"
6 6
7 #include "cctest.h" 7 #include "cctest.h"
8 #include "heap-profiler.h" 8 #include "heap-profiler.h"
9 #include "snapshot.h" 9 #include "snapshot.h"
10 #include "utils-inl.h" 10 #include "utils-inl.h"
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 const v8::HeapSnapshot* snapshot = 337 const v8::HeapSnapshot* snapshot =
338 v8::HeapProfiler::TakeSnapshot(v8_str("internals")); 338 v8::HeapProfiler::TakeSnapshot(v8_str("internals"));
339 const v8::HeapGraphNode* global_node = GetGlobalObject(snapshot); 339 const v8::HeapGraphNode* global_node = GetGlobalObject(snapshot);
340 // The first reference will not present, because it's a Smi. 340 // The first reference will not present, because it's a Smi.
341 CHECK_EQ(NULL, GetProperty(global_node, v8::HeapGraphEdge::kInternal, "0")); 341 CHECK_EQ(NULL, GetProperty(global_node, v8::HeapGraphEdge::kInternal, "0"));
342 // The second reference is to an object. 342 // The second reference is to an object.
343 CHECK_NE(NULL, GetProperty(global_node, v8::HeapGraphEdge::kInternal, "1")); 343 CHECK_NE(NULL, GetProperty(global_node, v8::HeapGraphEdge::kInternal, "1"));
344 } 344 }
345 345
346 346
347 // Trying to introduce a check helper for uint64_t causes many 347 // Trying to introduce a check helper for uint64_t causes many
mnaganov (inactive) 2012/03/26 12:37:53 Please update the comment.
348 // overloading ambiguities, so it seems easier just to cast 348 // overloading ambiguities, so it seems easier just to cast
349 // them to a signed type. 349 // them to a signed type.
350 #define CHECK_EQ_UINT64_T(a, b) \ 350 #define CHECK_EQ_SNAPSHOT_OBJECT_ID(a, b) \
351 CHECK_EQ(static_cast<int64_t>(a), static_cast<int64_t>(b)) 351 CHECK_EQ(static_cast<int32_t>(a), static_cast<int32_t>(b))
352 #define CHECK_NE_UINT64_T(a, b) \ 352 #define CHECK_NE_SNAPSHOT_OBJECT_ID(a, b) \
353 CHECK((a) != (b)) // NOLINT 353 CHECK((a) != (b)) // NOLINT
354 354
355 TEST(HeapEntryIdsAndArrayShift) { 355 TEST(HeapEntryIdsAndArrayShift) {
356 v8::HandleScope scope; 356 v8::HandleScope scope;
357 LocalContext env; 357 LocalContext env;
358 358
359 CompileRun( 359 CompileRun(
360 "function AnObject() {\n" 360 "function AnObject() {\n"
361 " this.first = 'first';\n" 361 " this.first = 'first';\n"
362 " this.second = 'second';\n" 362 " this.second = 'second';\n"
363 "}\n" 363 "}\n"
364 "var a = new Array();\n" 364 "var a = new Array();\n"
365 "for (var i = 0; i < 10; ++i)\n" 365 "for (var i = 0; i < 10; ++i)\n"
366 " a.push(new AnObject());\n"); 366 " a.push(new AnObject());\n");
367 const v8::HeapSnapshot* snapshot1 = 367 const v8::HeapSnapshot* snapshot1 =
368 v8::HeapProfiler::TakeSnapshot(v8_str("s1")); 368 v8::HeapProfiler::TakeSnapshot(v8_str("s1"));
369 369
370 CompileRun( 370 CompileRun(
371 "for (var i = 0; i < 1; ++i)\n" 371 "for (var i = 0; i < 1; ++i)\n"
372 " a.shift();\n"); 372 " a.shift();\n");
373 373
374 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 374 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
375 375
376 const v8::HeapSnapshot* snapshot2 = 376 const v8::HeapSnapshot* snapshot2 =
377 v8::HeapProfiler::TakeSnapshot(v8_str("s2")); 377 v8::HeapProfiler::TakeSnapshot(v8_str("s2"));
378 378
379 const v8::HeapGraphNode* global1 = GetGlobalObject(snapshot1); 379 const v8::HeapGraphNode* global1 = GetGlobalObject(snapshot1);
380 const v8::HeapGraphNode* global2 = GetGlobalObject(snapshot2); 380 const v8::HeapGraphNode* global2 = GetGlobalObject(snapshot2);
381 CHECK_NE_UINT64_T(0, global1->GetId()); 381 CHECK_NE_SNAPSHOT_OBJECT_ID(0, global1->GetId());
382 CHECK_EQ_UINT64_T(global1->GetId(), global2->GetId()); 382 CHECK_EQ_SNAPSHOT_OBJECT_ID(global1->GetId(), global2->GetId());
383 383
384 const v8::HeapGraphNode* a1 = 384 const v8::HeapGraphNode* a1 =
385 GetProperty(global1, v8::HeapGraphEdge::kProperty, "a"); 385 GetProperty(global1, v8::HeapGraphEdge::kProperty, "a");
386 CHECK_NE(NULL, a1); 386 CHECK_NE(NULL, a1);
387 const v8::HeapGraphNode* e1 = 387 const v8::HeapGraphNode* e1 =
388 GetProperty(a1, v8::HeapGraphEdge::kHidden, "1"); 388 GetProperty(a1, v8::HeapGraphEdge::kHidden, "1");
389 CHECK_NE(NULL, e1); 389 CHECK_NE(NULL, e1);
390 const v8::HeapGraphNode* k1 = 390 const v8::HeapGraphNode* k1 =
391 GetProperty(e1, v8::HeapGraphEdge::kInternal, "elements"); 391 GetProperty(e1, v8::HeapGraphEdge::kInternal, "elements");
392 CHECK_NE(NULL, k1); 392 CHECK_NE(NULL, k1);
393 const v8::HeapGraphNode* a2 = 393 const v8::HeapGraphNode* a2 =
394 GetProperty(global2, v8::HeapGraphEdge::kProperty, "a"); 394 GetProperty(global2, v8::HeapGraphEdge::kProperty, "a");
395 CHECK_NE(NULL, a2); 395 CHECK_NE(NULL, a2);
396 const v8::HeapGraphNode* e2 = 396 const v8::HeapGraphNode* e2 =
397 GetProperty(a2, v8::HeapGraphEdge::kHidden, "1"); 397 GetProperty(a2, v8::HeapGraphEdge::kHidden, "1");
398 CHECK_NE(NULL, e2); 398 CHECK_NE(NULL, e2);
399 const v8::HeapGraphNode* k2 = 399 const v8::HeapGraphNode* k2 =
400 GetProperty(e2, v8::HeapGraphEdge::kInternal, "elements"); 400 GetProperty(e2, v8::HeapGraphEdge::kInternal, "elements");
401 CHECK_NE(NULL, k2); 401 CHECK_NE(NULL, k2);
402 402
403 CHECK_EQ_UINT64_T(a1->GetId(), a2->GetId()); 403 CHECK_EQ_SNAPSHOT_OBJECT_ID(a1->GetId(), a2->GetId());
404 CHECK_EQ_UINT64_T(e1->GetId(), e2->GetId()); 404 CHECK_EQ_SNAPSHOT_OBJECT_ID(e1->GetId(), e2->GetId());
405 CHECK_EQ_UINT64_T(k1->GetId(), k2->GetId()); 405 CHECK_EQ_SNAPSHOT_OBJECT_ID(k1->GetId(), k2->GetId());
406 } 406 }
407 407
408 TEST(HeapEntryIdsAndGC) { 408 TEST(HeapEntryIdsAndGC) {
409 v8::HandleScope scope; 409 v8::HandleScope scope;
410 LocalContext env; 410 LocalContext env;
411 411
412 CompileRun( 412 CompileRun(
413 "function A() {}\n" 413 "function A() {}\n"
414 "function B(x) { this.x = x; }\n" 414 "function B(x) { this.x = x; }\n"
415 "var a = new A();\n" 415 "var a = new A();\n"
416 "var b = new B(a);"); 416 "var b = new B(a);");
417 const v8::HeapSnapshot* snapshot1 = 417 const v8::HeapSnapshot* snapshot1 =
418 v8::HeapProfiler::TakeSnapshot(v8_str("s1")); 418 v8::HeapProfiler::TakeSnapshot(v8_str("s1"));
419 419
420 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags); 420 HEAP->CollectAllGarbage(i::Heap::kNoGCFlags);
421 421
422 const v8::HeapSnapshot* snapshot2 = 422 const v8::HeapSnapshot* snapshot2 =
423 v8::HeapProfiler::TakeSnapshot(v8_str("s2")); 423 v8::HeapProfiler::TakeSnapshot(v8_str("s2"));
424 424
425 const v8::HeapGraphNode* global1 = GetGlobalObject(snapshot1); 425 const v8::HeapGraphNode* global1 = GetGlobalObject(snapshot1);
426 const v8::HeapGraphNode* global2 = GetGlobalObject(snapshot2); 426 const v8::HeapGraphNode* global2 = GetGlobalObject(snapshot2);
427 CHECK_NE_UINT64_T(0, global1->GetId()); 427 CHECK_NE_SNAPSHOT_OBJECT_ID(0, global1->GetId());
428 CHECK_EQ_UINT64_T(global1->GetId(), global2->GetId()); 428 CHECK_EQ_SNAPSHOT_OBJECT_ID(global1->GetId(), global2->GetId());
429 const v8::HeapGraphNode* A1 = 429 const v8::HeapGraphNode* A1 =
430 GetProperty(global1, v8::HeapGraphEdge::kProperty, "A"); 430 GetProperty(global1, v8::HeapGraphEdge::kProperty, "A");
431 CHECK_NE(NULL, A1); 431 CHECK_NE(NULL, A1);
432 const v8::HeapGraphNode* A2 = 432 const v8::HeapGraphNode* A2 =
433 GetProperty(global2, v8::HeapGraphEdge::kProperty, "A"); 433 GetProperty(global2, v8::HeapGraphEdge::kProperty, "A");
434 CHECK_NE(NULL, A2); 434 CHECK_NE(NULL, A2);
435 CHECK_NE_UINT64_T(0, A1->GetId()); 435 CHECK_NE_SNAPSHOT_OBJECT_ID(0, A1->GetId());
436 CHECK_EQ_UINT64_T(A1->GetId(), A2->GetId()); 436 CHECK_EQ_SNAPSHOT_OBJECT_ID(A1->GetId(), A2->GetId());
437 const v8::HeapGraphNode* B1 = 437 const v8::HeapGraphNode* B1 =
438 GetProperty(global1, v8::HeapGraphEdge::kProperty, "B"); 438 GetProperty(global1, v8::HeapGraphEdge::kProperty, "B");
439 CHECK_NE(NULL, B1); 439 CHECK_NE(NULL, B1);
440 const v8::HeapGraphNode* B2 = 440 const v8::HeapGraphNode* B2 =
441 GetProperty(global2, v8::HeapGraphEdge::kProperty, "B"); 441 GetProperty(global2, v8::HeapGraphEdge::kProperty, "B");
442 CHECK_NE(NULL, B2); 442 CHECK_NE(NULL, B2);
443 CHECK_NE_UINT64_T(0, B1->GetId()); 443 CHECK_NE_SNAPSHOT_OBJECT_ID(0, B1->GetId());
444 CHECK_EQ_UINT64_T(B1->GetId(), B2->GetId()); 444 CHECK_EQ_SNAPSHOT_OBJECT_ID(B1->GetId(), B2->GetId());
445 const v8::HeapGraphNode* a1 = 445 const v8::HeapGraphNode* a1 =
446 GetProperty(global1, v8::HeapGraphEdge::kProperty, "a"); 446 GetProperty(global1, v8::HeapGraphEdge::kProperty, "a");
447 CHECK_NE(NULL, a1); 447 CHECK_NE(NULL, a1);
448 const v8::HeapGraphNode* a2 = 448 const v8::HeapGraphNode* a2 =
449 GetProperty(global2, v8::HeapGraphEdge::kProperty, "a"); 449 GetProperty(global2, v8::HeapGraphEdge::kProperty, "a");
450 CHECK_NE(NULL, a2); 450 CHECK_NE(NULL, a2);
451 CHECK_NE_UINT64_T(0, a1->GetId()); 451 CHECK_NE_SNAPSHOT_OBJECT_ID(0, a1->GetId());
452 CHECK_EQ_UINT64_T(a1->GetId(), a2->GetId()); 452 CHECK_EQ_SNAPSHOT_OBJECT_ID(a1->GetId(), a2->GetId());
453 const v8::HeapGraphNode* b1 = 453 const v8::HeapGraphNode* b1 =
454 GetProperty(global1, v8::HeapGraphEdge::kProperty, "b"); 454 GetProperty(global1, v8::HeapGraphEdge::kProperty, "b");
455 CHECK_NE(NULL, b1); 455 CHECK_NE(NULL, b1);
456 const v8::HeapGraphNode* b2 = 456 const v8::HeapGraphNode* b2 =
457 GetProperty(global2, v8::HeapGraphEdge::kProperty, "b"); 457 GetProperty(global2, v8::HeapGraphEdge::kProperty, "b");
458 CHECK_NE(NULL, b2); 458 CHECK_NE(NULL, b2);
459 CHECK_NE_UINT64_T(0, b1->GetId()); 459 CHECK_NE_SNAPSHOT_OBJECT_ID(0, b1->GetId());
460 CHECK_EQ_UINT64_T(b1->GetId(), b2->GetId()); 460 CHECK_EQ_SNAPSHOT_OBJECT_ID(b1->GetId(), b2->GetId());
461 } 461 }
462 462
463 463
464 TEST(HeapSnapshotRootPreservedAfterSorting) { 464 TEST(HeapSnapshotRootPreservedAfterSorting) {
465 v8::HandleScope scope; 465 v8::HandleScope scope;
466 LocalContext env; 466 LocalContext env;
467 const v8::HeapSnapshot* snapshot = 467 const v8::HeapSnapshot* snapshot =
468 v8::HeapProfiler::TakeSnapshot(v8_str("s")); 468 v8::HeapProfiler::TakeSnapshot(v8_str("s"));
469 const v8::HeapGraphNode* root1 = snapshot->GetRoot(); 469 const v8::HeapGraphNode* root1 = snapshot->GetRoot();
470 const_cast<i::HeapSnapshot*>(reinterpret_cast<const i::HeapSnapshot*>( 470 const_cast<i::HeapSnapshot*>(reinterpret_cast<const i::HeapSnapshot*>(
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 688
689 static void CheckChildrenIds(const v8::HeapSnapshot* snapshot, 689 static void CheckChildrenIds(const v8::HeapSnapshot* snapshot,
690 const v8::HeapGraphNode* node, 690 const v8::HeapGraphNode* node,
691 int level, int max_level) { 691 int level, int max_level) {
692 if (level > max_level) return; 692 if (level > max_level) return;
693 CHECK_EQ(node, snapshot->GetNodeById(node->GetId())); 693 CHECK_EQ(node, snapshot->GetNodeById(node->GetId()));
694 for (int i = 0, count = node->GetChildrenCount(); i < count; ++i) { 694 for (int i = 0, count = node->GetChildrenCount(); i < count; ++i) {
695 const v8::HeapGraphEdge* prop = node->GetChild(i); 695 const v8::HeapGraphEdge* prop = node->GetChild(i);
696 const v8::HeapGraphNode* child = 696 const v8::HeapGraphNode* child =
697 snapshot->GetNodeById(prop->GetToNode()->GetId()); 697 snapshot->GetNodeById(prop->GetToNode()->GetId());
698 CHECK_EQ_UINT64_T(prop->GetToNode()->GetId(), child->GetId()); 698 CHECK_EQ_SNAPSHOT_OBJECT_ID(prop->GetToNode()->GetId(), child->GetId());
699 CHECK_EQ(prop->GetToNode(), child); 699 CHECK_EQ(prop->GetToNode(), child);
700 CheckChildrenIds(snapshot, child, level + 1, max_level); 700 CheckChildrenIds(snapshot, child, level + 1, max_level);
701 } 701 }
702 } 702 }
703 703
704 704
705 TEST(HeapSnapshotGetNodeById) { 705 TEST(HeapSnapshotGetNodeById) {
706 v8::HandleScope scope; 706 v8::HandleScope scope;
707 LocalContext env; 707 LocalContext env;
708 708
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after
1359 // Dipose the persistent handles in a different order. 1359 // Dipose the persistent handles in a different order.
1360 p_AAA.Dispose(); 1360 p_AAA.Dispose();
1361 CHECK_EQ(global_handle_count + 2, 1361 CHECK_EQ(global_handle_count + 2,
1362 v8::HeapProfiler::GetPersistentHandleCount()); 1362 v8::HeapProfiler::GetPersistentHandleCount());
1363 p_CCC.Dispose(); 1363 p_CCC.Dispose();
1364 CHECK_EQ(global_handle_count + 1, 1364 CHECK_EQ(global_handle_count + 1,
1365 v8::HeapProfiler::GetPersistentHandleCount()); 1365 v8::HeapProfiler::GetPersistentHandleCount());
1366 p_BBB.Dispose(); 1366 p_BBB.Dispose();
1367 CHECK_EQ(global_handle_count, v8::HeapProfiler::GetPersistentHandleCount()); 1367 CHECK_EQ(global_handle_count, v8::HeapProfiler::GetPersistentHandleCount());
1368 } 1368 }
OLDNEW
« no previous file with comments | « src/api.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698