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

Side by Side Diff: test/cctest/test-mark-compact.cc

Issue 14175005: New GC related APIs: Implicit references. (Closed) Base URL: git://github.com/v8/v8.git@master
Patch Set: Code review (mstarzinger) + test update Created 7 years, 8 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-heap-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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 { 363 {
364 Object** g1_objects[] = { g1s1.location(), g1s2.location() }; 364 Object** g1_objects[] = { g1s1.location(), g1s2.location() };
365 Object** g1_children[] = { g1c1.location() }; 365 Object** g1_children[] = { g1c1.location() };
366 Object** g2_objects[] = { g2s1.location(), g2s2.location() }; 366 Object** g2_objects[] = { g2s1.location(), g2s2.location() };
367 Object** g2_children[] = { g2c1.location() }; 367 Object** g2_children[] = { g2c1.location() };
368 global_handles->AddObjectGroup(g1_objects, 2, NULL); 368 global_handles->AddObjectGroup(g1_objects, 2, NULL);
369 global_handles->AddImplicitReferences( 369 global_handles->AddImplicitReferences(
370 Handle<HeapObject>::cast(g1s1).location(), g1_children, 1); 370 Handle<HeapObject>::cast(g1s1).location(), g1_children, 1);
371 global_handles->AddObjectGroup(g2_objects, 2, NULL); 371 global_handles->AddObjectGroup(g2_objects, 2, NULL);
372 global_handles->AddImplicitReferences( 372 global_handles->AddImplicitReferences(
373 Handle<HeapObject>::cast(g2s2).location(), g2_children, 1); 373 Handle<HeapObject>::cast(g2s1).location(), g2_children, 1);
374 } 374 }
375 // Do a full GC 375 // Do a full GC
376 HEAP->CollectGarbage(OLD_POINTER_SPACE); 376 HEAP->CollectGarbage(OLD_POINTER_SPACE);
377 377
378 // All object should be alive. 378 // All object should be alive.
379 CHECK_EQ(0, NumberOfWeakCalls); 379 CHECK_EQ(0, NumberOfWeakCalls);
380 380
381 // Weaken the root. 381 // Weaken the root.
382 global_handles->MakeWeak(root.location(), 382 global_handles->MakeWeak(root.location(),
383 reinterpret_cast<void*>(1234), 383 reinterpret_cast<void*>(1234),
384 NULL, 384 NULL,
385 &WeakPointerCallback); 385 &WeakPointerCallback);
386 // But make children strong roots---all the objects (except for children) 386 // But make children strong roots---all the objects (except for children)
387 // should be collectable now. 387 // should be collectable now.
388 global_handles->ClearWeakness(g1c1.location()); 388 global_handles->ClearWeakness(g1c1.location());
389 global_handles->ClearWeakness(g2c1.location()); 389 global_handles->ClearWeakness(g2c1.location());
390 390
391 // Groups are deleted, rebuild groups. 391 // Groups are deleted, rebuild groups.
392 { 392 {
393 Object** g1_objects[] = { g1s1.location(), g1s2.location() }; 393 Object** g1_objects[] = { g1s1.location(), g1s2.location() };
394 Object** g1_children[] = { g1c1.location() }; 394 Object** g1_children[] = { g1c1.location() };
395 Object** g2_objects[] = { g2s1.location(), g2s2.location() }; 395 Object** g2_objects[] = { g2s1.location(), g2s2.location() };
396 Object** g2_children[] = { g2c1.location() }; 396 Object** g2_children[] = { g2c1.location() };
397 global_handles->AddObjectGroup(g1_objects, 2, NULL); 397 global_handles->AddObjectGroup(g1_objects, 2, NULL);
398 global_handles->AddImplicitReferences( 398 global_handles->AddImplicitReferences(
399 Handle<HeapObject>::cast(g1s1).location(), g1_children, 1); 399 Handle<HeapObject>::cast(g1s1).location(), g1_children, 1);
400 global_handles->AddObjectGroup(g2_objects, 2, NULL); 400 global_handles->AddObjectGroup(g2_objects, 2, NULL);
401 global_handles->AddImplicitReferences( 401 global_handles->AddImplicitReferences(
402 Handle<HeapObject>::cast(g2s2).location(), g2_children, 1); 402 Handle<HeapObject>::cast(g2s1).location(), g2_children, 1);
403 } 403 }
404 404
405 HEAP->CollectGarbage(OLD_POINTER_SPACE); 405 HEAP->CollectGarbage(OLD_POINTER_SPACE);
406 406
407 // All objects should be gone. 5 global handles in total. 407 // All objects should be gone. 5 global handles in total.
408 CHECK_EQ(5, NumberOfWeakCalls); 408 CHECK_EQ(5, NumberOfWeakCalls);
409 409
410 // And now make children weak again and collect them. 410 // And now make children weak again and collect them.
411 global_handles->MakeWeak(g1c1.location(), 411 global_handles->MakeWeak(g1c1.location(),
412 reinterpret_cast<void*>(1234), 412 reinterpret_cast<void*>(1234),
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 NULL, 470 NULL,
471 &WeakPointerCallback); 471 &WeakPointerCallback);
472 472
473 Handle<Object> root = global_handles->Create(*g1s1); // make a root. 473 Handle<Object> root = global_handles->Create(*g1s1); // make a root.
474 474
475 // Connect group 1 and 2, make a cycle. 475 // Connect group 1 and 2, make a cycle.
476 Handle<FixedArray>::cast(g1s2)->set(0, *g2s2); 476 Handle<FixedArray>::cast(g1s2)->set(0, *g2s2);
477 Handle<FixedArray>::cast(g2s1)->set(0, *g1s1); 477 Handle<FixedArray>::cast(g2s1)->set(0, *g1s1);
478 478
479 { 479 {
480 Object** g1_children[] = { g1c1.location() };
481 Object** g2_children[] = { g2c1.location() };
482 global_handles->SetObjectGroupId(g1s1.location(), v8::UniqueId(1)); 480 global_handles->SetObjectGroupId(g1s1.location(), v8::UniqueId(1));
483 global_handles->SetObjectGroupId(g1s2.location(), v8::UniqueId(1)); 481 global_handles->SetObjectGroupId(g1s2.location(), v8::UniqueId(1));
484 global_handles->AddImplicitReferences( 482 global_handles->SetObjectGroupRepresentative(
485 Handle<HeapObject>::cast(g1s1).location(), g1_children, 1); 483 v8::UniqueId(1), reinterpret_cast<HeapObject**>(g1s1.location()));
484 global_handles->AddImplicitReference(v8::UniqueId(1), g1c1.location());
486 global_handles->SetObjectGroupId(g2s1.location(), v8::UniqueId(2)); 485 global_handles->SetObjectGroupId(g2s1.location(), v8::UniqueId(2));
487 global_handles->SetObjectGroupId(g2s2.location(), v8::UniqueId(2)); 486 global_handles->SetObjectGroupId(g2s2.location(), v8::UniqueId(2));
488 global_handles->AddImplicitReferences( 487 global_handles->SetObjectGroupRepresentative(
489 Handle<HeapObject>::cast(g2s2).location(), g2_children, 1); 488 v8::UniqueId(2), reinterpret_cast<HeapObject**>(g2s1.location()));
489 global_handles->AddImplicitReference(v8::UniqueId(2), g2c1.location());
490 } 490 }
491 // Do a full GC 491 // Do a full GC
492 heap->CollectGarbage(OLD_POINTER_SPACE); 492 heap->CollectGarbage(OLD_POINTER_SPACE);
493 493
494 // All object should be alive. 494 // All object should be alive.
495 CHECK_EQ(0, NumberOfWeakCalls); 495 CHECK_EQ(0, NumberOfWeakCalls);
496 496
497 // Weaken the root. 497 // Weaken the root.
498 global_handles->MakeWeak(root.location(), 498 global_handles->MakeWeak(root.location(),
499 reinterpret_cast<void*>(1234), 499 reinterpret_cast<void*>(1234),
500 NULL, 500 NULL,
501 &WeakPointerCallback); 501 &WeakPointerCallback);
502 // But make children strong roots---all the objects (except for children) 502 // But make children strong roots---all the objects (except for children)
503 // should be collectable now. 503 // should be collectable now.
504 global_handles->ClearWeakness(g1c1.location()); 504 global_handles->ClearWeakness(g1c1.location());
505 global_handles->ClearWeakness(g2c1.location()); 505 global_handles->ClearWeakness(g2c1.location());
506 506
507 // Groups are deleted, rebuild groups. 507 // Groups are deleted, rebuild groups.
508 { 508 {
509 Object** g1_children[] = { g1c1.location() };
510 Object** g2_children[] = { g2c1.location() };
511 global_handles->SetObjectGroupId(g1s1.location(), v8::UniqueId(1)); 509 global_handles->SetObjectGroupId(g1s1.location(), v8::UniqueId(1));
512 global_handles->SetObjectGroupId(g1s2.location(), v8::UniqueId(1)); 510 global_handles->SetObjectGroupId(g1s2.location(), v8::UniqueId(1));
513 global_handles->AddImplicitReferences( 511 global_handles->SetObjectGroupRepresentative(
514 Handle<HeapObject>::cast(g1s1).location(), g1_children, 1); 512 v8::UniqueId(1), reinterpret_cast<HeapObject**>(g1s1.location()));
513 global_handles->AddImplicitReference(v8::UniqueId(1), g1c1.location());
515 global_handles->SetObjectGroupId(g2s1.location(), v8::UniqueId(2)); 514 global_handles->SetObjectGroupId(g2s1.location(), v8::UniqueId(2));
516 global_handles->SetObjectGroupId(g2s2.location(), v8::UniqueId(2)); 515 global_handles->SetObjectGroupId(g2s2.location(), v8::UniqueId(2));
517 global_handles->AddImplicitReferences( 516 global_handles->SetObjectGroupRepresentative(
518 Handle<HeapObject>::cast(g2s2).location(), g2_children, 1); 517 v8::UniqueId(2), reinterpret_cast<HeapObject**>(g2s1.location()));
518 global_handles->AddImplicitReference(v8::UniqueId(2), g2c1.location());
519 } 519 }
520 520
521 heap->CollectGarbage(OLD_POINTER_SPACE); 521 heap->CollectGarbage(OLD_POINTER_SPACE);
522 522
523 // All objects should be gone. 5 global handles in total. 523 // All objects should be gone. 5 global handles in total.
524 CHECK_EQ(5, NumberOfWeakCalls); 524 CHECK_EQ(5, NumberOfWeakCalls);
525 525
526 // And now make children weak again and collect them. 526 // And now make children weak again and collect them.
527 global_handles->MakeWeak(g1c1.location(), 527 global_handles->MakeWeak(g1c1.location(),
528 reinterpret_cast<void*>(1234), 528 reinterpret_cast<void*>(1234),
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 if (v8::internal::Snapshot::IsEnabled()) { 676 if (v8::internal::Snapshot::IsEnabled()) {
677 CHECK_LE(delta, 2900 * 1024); 677 CHECK_LE(delta, 2900 * 1024);
678 } else { 678 } else {
679 CHECK_LE(delta, 3400 * 1024); 679 CHECK_LE(delta, 3400 * 1024);
680 } 680 }
681 } 681 }
682 } 682 }
683 } 683 }
684 684
685 #endif // __linux__ and !USE_SIMULATOR 685 #endif // __linux__ and !USE_SIMULATOR
OLDNEW
« no previous file with comments | « test/cctest/test-heap-profiler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698