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

Side by Side Diff: runtime/vm/dart_api_impl_test.cc

Issue 10905251: Lazy peer API. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 3 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "include/dart_api.h" 5 #include "include/dart_api.h"
6 #include "platform/assert.h" 6 #include "platform/assert.h"
7 #include "platform/json.h" 7 #include "platform/json.h"
8 #include "platform/utils.h" 8 #include "platform/utils.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/dart_api_impl.h" 10 #include "vm/dart_api_impl.h"
(...skipping 6514 matching lines...) Expand 10 before | Expand all | Expand 10 after
6525 6525
6526 str = Dart_NewString32(NULL, 0); 6526 str = Dart_NewString32(NULL, 0);
6527 EXPECT_VALID(str); 6527 EXPECT_VALID(str);
6528 EXPECT(Dart_IsString(str)); 6528 EXPECT(Dart_IsString(str));
6529 len = -1; 6529 len = -1;
6530 EXPECT_VALID(Dart_StringLength(str, &len)); 6530 EXPECT_VALID(Dart_StringLength(str, &len));
6531 EXPECT_EQ(0, len); 6531 EXPECT_EQ(0, len);
6532 } 6532 }
6533 6533
6534 6534
6535 // Allocates an object in new space and assigns it a peer. Removes
6536 // the peer and check that the count of peer objects is decremented by
siva 2012/09/14 00:03:46 checks
cshapiro 2012/09/15 01:23:41 Done.
6537 // one.
6538 TEST_CASE(OneNewSpacePeer) {
6539 Isolate* isolate = Isolate::Current();
6540 Dart_Handle str = Dart_NewString("a string");
6541 EXPECT_VALID(str);
6542 EXPECT(Dart_IsString(str));
6543 EXPECT(!Dart_HasPeer(str));
6544 EXPECT_EQ(0, isolate->heap()->PeerCount());
6545 void* out = &out;
6546 EXPECT(Dart_IsError(Dart_GetPeer(str, &out)));
6547 EXPECT(out == NULL);
6548 int peer = 1234;
6549 EXPECT_VALID(Dart_SetPeer(str, &peer));
6550 EXPECT(Dart_HasPeer(str));
6551 EXPECT_EQ(1, isolate->heap()->PeerCount());
6552 EXPECT_VALID(Dart_GetPeer(str, &out));
6553 EXPECT(out == reinterpret_cast<void*>(&peer));
6554 EXPECT_VALID(Dart_SetPeer(str, NULL));
6555 EXPECT(!Dart_HasPeer(str));
6556 EXPECT_EQ(0, isolate->heap()->PeerCount());
6557 }
6558
6559
6560 // Allocates an object in old space and assigns it a peer. Allow the
siva 2012/09/14 00:03:46 in new space
cshapiro 2012/09/15 01:23:41 Done.
6561 // peer referent to be garbage collected and check that the count of
6562 // peer objects is decremented by one.
6563 TEST_CASE(CollectOneNewSpacePeer) {
6564 Isolate* isolate = Isolate::Current();
6565 Dart_EnterScope();
6566 {
6567 DARTSCOPE_NOCHECKS(isolate);
6568 Dart_Handle str = Dart_NewString("a string");
6569 EXPECT_VALID(str);
6570 EXPECT(Dart_IsString(str));
6571 EXPECT(!Dart_HasPeer(str));
6572 EXPECT_EQ(0, isolate->heap()->PeerCount());
6573 void* out = &out;
6574 EXPECT(Dart_IsError(Dart_GetPeer(str, &out)));
6575 EXPECT(out == NULL);
6576 int peer = 1234;
6577 EXPECT_VALID(Dart_SetPeer(str, &peer));
6578 EXPECT(Dart_HasPeer(str));
6579 EXPECT_EQ(1, isolate->heap()->PeerCount());
6580 EXPECT_VALID(Dart_GetPeer(str, &out));
6581 EXPECT(out == reinterpret_cast<void*>(&peer));
6582 isolate->heap()->CollectGarbage(Heap::kNew);
6583 EXPECT(Dart_HasPeer(str));
6584 EXPECT_EQ(1, isolate->heap()->PeerCount());
6585 EXPECT_VALID(Dart_GetPeer(str, &out));
6586 EXPECT(out == reinterpret_cast<void*>(&peer));
6587 }
6588 Dart_ExitScope();
6589 isolate->heap()->CollectGarbage(Heap::kNew);
6590 EXPECT_EQ(0, isolate->heap()->PeerCount());
6591 }
6592
6593
6594 // Allocates two objects in old space and assigns them peers. Removes
siva 2012/09/14 00:03:46 in new space
cshapiro 2012/09/15 01:23:41 Done.
6595 // the peers and check that the count of peer objects is decremented
6596 // by two.
6597 TEST_CASE(TwoNewSpacePeers) {
6598 Isolate* isolate = Isolate::Current();
6599 Dart_Handle s1 = Dart_NewString("s1");
6600 EXPECT_VALID(s1);
6601 EXPECT(Dart_IsString(s1));
6602 EXPECT(!Dart_HasPeer(s1));
6603 EXPECT_EQ(0, isolate->heap()->PeerCount());
6604 void* o1 = &o1;
6605 EXPECT(Dart_IsError(Dart_GetPeer(s1, &o1)));
6606 EXPECT(o1 == NULL);
6607 int p1 = 1234;
6608 EXPECT_VALID(Dart_SetPeer(s1, &p1));
6609 EXPECT(Dart_HasPeer(s1));
6610 EXPECT_EQ(1, isolate->heap()->PeerCount());
6611 EXPECT_VALID(Dart_GetPeer(s1, &o1));
6612 EXPECT(o1 == reinterpret_cast<void*>(&p1));
6613 Dart_Handle s2 = Dart_NewString("a string");
6614 EXPECT_VALID(s2);
6615 EXPECT(Dart_IsString(s2));
6616 EXPECT(!Dart_HasPeer(s2));
6617 EXPECT_EQ(1, isolate->heap()->PeerCount());
6618 void* o2 = &o2;
6619 EXPECT(Dart_IsError(Dart_GetPeer(s2, &o2)));
6620 EXPECT(o2 == NULL);
6621 int p2 = 5678;
6622 EXPECT_VALID(Dart_SetPeer(s2, &p2));
6623 EXPECT(Dart_HasPeer(s2));
6624 EXPECT_EQ(2, isolate->heap()->PeerCount());
6625 EXPECT_VALID(Dart_GetPeer(s2, &o2));
6626 EXPECT(o2 == reinterpret_cast<void*>(&p2));
6627 EXPECT_VALID(Dart_SetPeer(s1, NULL));
6628 EXPECT(!Dart_HasPeer(s1));
6629 EXPECT_EQ(1, isolate->heap()->PeerCount());
6630 EXPECT(Dart_IsError(Dart_GetPeer(s1, &o1)));
6631 EXPECT_VALID(Dart_SetPeer(s2, NULL));
6632 EXPECT(!Dart_HasPeer(s2));
6633 EXPECT_EQ(0, isolate->heap()->PeerCount());
6634 EXPECT(Dart_IsError(Dart_GetPeer(s2, &o2)));
6635 }
6636
6637
6638 // Allocates two objects in new space and assigns them a peer. Allow
6639 // the peer referents to be garbage collected and check that the count
6640 // of peer objects is decremented by two.
6641 TEST_CASE(CollectTwoNewSpacePeers) {
6642 Isolate* isolate = Isolate::Current();
6643 Dart_EnterScope();
6644 {
6645 DARTSCOPE_NOCHECKS(isolate);
6646 Dart_Handle s1 = Dart_NewString("s1");
6647 EXPECT_VALID(s1);
6648 EXPECT(Dart_IsString(s1));
6649 EXPECT(!Dart_HasPeer(s1));
6650 EXPECT_EQ(0, isolate->heap()->PeerCount());
6651 void* o1 = &o1;
6652 EXPECT(Dart_IsError(Dart_GetPeer(s1, &o1)));
6653 EXPECT(o1 == NULL);
6654 int p1 = 1234;
6655 EXPECT_VALID(Dart_SetPeer(s1, &p1));
6656 EXPECT(Dart_HasPeer(s1));
6657 EXPECT_EQ(1, isolate->heap()->PeerCount());
6658 EXPECT_VALID(Dart_GetPeer(s1, &o1));
6659 EXPECT(o1 == reinterpret_cast<void*>(&p1));
6660 Dart_Handle s2 = Dart_NewString("s2");
6661 EXPECT_VALID(s2);
6662 EXPECT(Dart_IsString(s2));
6663 EXPECT(!Dart_HasPeer(s2));
6664 EXPECT_EQ(1, isolate->heap()->PeerCount());
6665 void* o2 = &o2;
6666 EXPECT(Dart_IsError(Dart_GetPeer(s2, &o2)));
6667 EXPECT(o2 == NULL);
6668 int p2 = 5678;
6669 EXPECT_VALID(Dart_SetPeer(s2, &p2));
6670 EXPECT(Dart_HasPeer(s2));
6671 EXPECT_EQ(2, isolate->heap()->PeerCount());
6672 EXPECT_VALID(Dart_GetPeer(s2, &o2));
6673 EXPECT(o2 == reinterpret_cast<void*>(&p2));
6674 }
6675 Dart_ExitScope();
6676 isolate->heap()->CollectGarbage(Heap::kNew);
6677 EXPECT_EQ(0, isolate->heap()->PeerCount());
6678 }
6679
siva 2012/09/14 00:03:46 I think we also need a test case where the object
cshapiro 2012/09/15 01:23:41 Good idea. Done.
6680
6681 // Allocates an object in new space and assigns it a peer. Promotes
6682 // the peer to old space. Removes the peer and check that the count
6683 // of peer objects is decremented by one.
6684 TEST_CASE(OnePromotedPeer) {
6685 Isolate* isolate = Isolate::Current();
6686 Dart_Handle str = Dart_NewString("a string");
6687 EXPECT_VALID(str);
6688 EXPECT(Dart_IsString(str));
6689 EXPECT(!Dart_HasPeer(str));
6690 EXPECT_EQ(0, isolate->heap()->PeerCount());
6691 void* out = &out;
6692 EXPECT(Dart_IsError(Dart_GetPeer(str, &out)));
6693 EXPECT(out == NULL);
6694 int peer = 1234;
6695 EXPECT_VALID(Dart_SetPeer(str, &peer));
6696 EXPECT(Dart_HasPeer(str));
6697 EXPECT_EQ(1, isolate->heap()->PeerCount());
6698 isolate->heap()->CollectGarbage(Heap::kNew);
6699 isolate->heap()->CollectGarbage(Heap::kNew);
6700 {
6701 DARTSCOPE_NOCHECKS(isolate);
6702 String& handle = String::Handle();
6703 handle ^= Api::UnwrapHandle(str);
6704 EXPECT(handle.IsOld());
6705 }
6706 EXPECT_VALID(Dart_GetPeer(str, &out));
6707 EXPECT(out == reinterpret_cast<void*>(&peer));
siva 2012/09/14 00:03:46 EXPECT_EQ(1, isolate->heap()->PeerCount()); To ch
cshapiro 2012/09/15 01:23:41 Good idea. Done.
6708 EXPECT_VALID(Dart_SetPeer(str, NULL));
6709 EXPECT(!Dart_HasPeer(str));
6710 EXPECT_EQ(0, isolate->heap()->PeerCount());
6711 }
6712
6713
6714 // Allocates an object in old space and assigns it a peer. Removes
6715 // the peer and check that the count of peer objects is decremented by
6716 // one.
6717 TEST_CASE(OneOldSpacePeer) {
siva 2012/09/14 00:03:46 The code below is identical to the one in OneNewSp
cshapiro 2012/09/15 01:23:41 We could. But, I expect this to acquire space-spe
6718 Isolate* isolate = Isolate::Current();
6719 Dart_Handle str = Api::NewHandle(isolate, String::New("str", Heap::kOld));
6720 EXPECT_VALID(str);
6721 EXPECT(Dart_IsString(str));
6722 EXPECT(!Dart_HasPeer(str));
6723 EXPECT_EQ(0, isolate->heap()->PeerCount());
6724 void* out = &out;
6725 EXPECT(Dart_IsError(Dart_GetPeer(str, &out)));
6726 EXPECT(out == NULL);
6727 int peer = 1234;
6728 EXPECT_VALID(Dart_SetPeer(str, &peer));
6729 EXPECT(Dart_HasPeer(str));
6730 EXPECT_EQ(1, isolate->heap()->PeerCount());
6731 EXPECT_VALID(Dart_GetPeer(str, &out));
6732 EXPECT(out == reinterpret_cast<void*>(&peer));
6733 isolate->heap()->CollectGarbage(Heap::kOld);
6734 EXPECT(Dart_HasPeer(str));
6735 EXPECT_EQ(1, isolate->heap()->PeerCount());
6736 EXPECT_VALID(Dart_GetPeer(str, &out));
6737 EXPECT(out == reinterpret_cast<void*>(&peer));
6738 EXPECT_VALID(Dart_SetPeer(str, NULL));
6739 EXPECT(!Dart_HasPeer(str));
6740 EXPECT_EQ(0, isolate->heap()->PeerCount());
6741 }
6742
6743
6744 // Allocates an object in old space and assigns it a peer. Allow the
6745 // peer referent to be garbage collected and check that the count of
6746 // peer objects is decremented by one.
6747 TEST_CASE(CollectOneOldSpacePeer) {
siva 2012/09/14 00:03:46 Ditto comment about sharing with CollectOneNewSpac
6748 Isolate* isolate = Isolate::Current();
6749 Dart_EnterScope();
6750 {
6751 DARTSCOPE_NOCHECKS(isolate);
6752 Dart_Handle str = Api::NewHandle(isolate, String::New("str", Heap::kOld));
6753 EXPECT_VALID(str);
6754 EXPECT(Dart_IsString(str));
6755 EXPECT(!Dart_HasPeer(str));
6756 EXPECT_EQ(0, isolate->heap()->PeerCount());
6757 void* out = &out;
6758 EXPECT(Dart_IsError(Dart_GetPeer(str, &out)));
6759 EXPECT(out == NULL);
6760 int peer = 1234;
6761 EXPECT_VALID(Dart_SetPeer(str, &peer));
6762 EXPECT(Dart_HasPeer(str));
6763 EXPECT_EQ(1, isolate->heap()->PeerCount());
6764 EXPECT_VALID(Dart_GetPeer(str, &out));
6765 EXPECT(out == reinterpret_cast<void*>(&peer));
6766 isolate->heap()->CollectGarbage(Heap::kOld);
6767 EXPECT(Dart_HasPeer(str));
6768 EXPECT_EQ(1, isolate->heap()->PeerCount());
6769 EXPECT_VALID(Dart_GetPeer(str, &out));
6770 EXPECT(out == reinterpret_cast<void*>(&peer));
6771 }
6772 Dart_ExitScope();
6773 isolate->heap()->CollectGarbage(Heap::kOld);
6774 EXPECT_EQ(0, isolate->heap()->PeerCount());
6775 }
6776
6777
6778 // Allocates two objects in old space and assigns them peers. Removes
6779 // the peers and check that the count of peer objects is decremented
6780 // by two.
6781 TEST_CASE(TwoOldSpacePeers) {
siva 2012/09/14 00:03:46 Ditto comment.
cshapiro 2012/09/15 01:23:41 Done.
6782 Isolate* isolate = Isolate::Current();
6783 Dart_Handle s1 = Api::NewHandle(isolate, String::New("s1", Heap::kOld));
6784 EXPECT_VALID(s1);
6785 EXPECT(Dart_IsString(s1));
6786 EXPECT(!Dart_HasPeer(s1));
6787 EXPECT_EQ(0, isolate->heap()->PeerCount());
6788 void* o1 = &o1;
6789 EXPECT(Dart_IsError(Dart_GetPeer(s1, &o1)));
6790 EXPECT(o1 == NULL);
6791 int p1 = 1234;
6792 EXPECT_VALID(Dart_SetPeer(s1, &p1));
6793 EXPECT(Dart_HasPeer(s1));
6794 EXPECT_EQ(1, isolate->heap()->PeerCount());
6795 EXPECT_VALID(Dart_GetPeer(s1, &o1));
6796 EXPECT(o1 == reinterpret_cast<void*>(&p1));
6797 Dart_Handle s2 = Api::NewHandle(isolate, String::New("s2", Heap::kOld));
6798 EXPECT_VALID(s2);
6799 EXPECT(Dart_IsString(s2));
6800 EXPECT(!Dart_HasPeer(s2));
6801 EXPECT_EQ(1, isolate->heap()->PeerCount());
6802 void* o2 = &o2;
6803 EXPECT(Dart_IsError(Dart_GetPeer(s2, &o2)));
6804 EXPECT(o2 == NULL);
6805 int p2 = 5678;
6806 EXPECT_VALID(Dart_SetPeer(s2, &p2));
6807 EXPECT(Dart_HasPeer(s2));
6808 EXPECT_EQ(2, isolate->heap()->PeerCount());
6809 EXPECT_VALID(Dart_GetPeer(s2, &o2));
6810 EXPECT(o2 == reinterpret_cast<void*>(&p2));
6811 EXPECT_VALID(Dart_SetPeer(s1, NULL));
6812 EXPECT(!Dart_HasPeer(s1));
6813 EXPECT_EQ(1, isolate->heap()->PeerCount());
6814 EXPECT(Dart_IsError(Dart_GetPeer(s1, &o1)));
6815 EXPECT_VALID(Dart_SetPeer(s2, NULL));
6816 EXPECT(!Dart_HasPeer(s2));
6817 EXPECT_EQ(0, isolate->heap()->PeerCount());
6818 EXPECT(Dart_IsError(Dart_GetPeer(s2, &o2)));
6819 }
6820
6821
6822 // Allocates two objects in old space and assigns them a peer. Allow
6823 // the peer referents to be garbage collected and check that the count
6824 // of peer objects is decremented by two.
6825 TEST_CASE(CollectTwoOldSpacePeers) {
siva 2012/09/14 00:03:46 Ditto comment.
cshapiro 2012/09/15 01:23:41 Done.
6826 Isolate* isolate = Isolate::Current();
6827 Dart_EnterScope();
6828 {
6829 DARTSCOPE_NOCHECKS(isolate);
6830 Dart_Handle s1 = Api::NewHandle(isolate, String::New("s1", Heap::kOld));
6831 EXPECT_VALID(s1);
6832 EXPECT(Dart_IsString(s1));
6833 EXPECT(!Dart_HasPeer(s1));
6834 EXPECT_EQ(0, isolate->heap()->PeerCount());
6835 void* o1 = &o1;
6836 EXPECT(Dart_IsError(Dart_GetPeer(s1, &o1)));
6837 EXPECT(o1 == NULL);
6838 int p1 = 1234;
6839 EXPECT_VALID(Dart_SetPeer(s1, &p1));
6840 EXPECT(Dart_HasPeer(s1));
6841 EXPECT_EQ(1, isolate->heap()->PeerCount());
6842 EXPECT_VALID(Dart_GetPeer(s1, &o1));
6843 EXPECT(o1 == reinterpret_cast<void*>(&p1));
6844 Dart_Handle s2 = Api::NewHandle(isolate, String::New("s2", Heap::kOld));
6845 EXPECT_VALID(s2);
6846 EXPECT(Dart_IsString(s2));
6847 EXPECT(!Dart_HasPeer(s2));
6848 EXPECT_EQ(1, isolate->heap()->PeerCount());
6849 void* o2 = &o2;
6850 EXPECT(Dart_IsError(Dart_GetPeer(s2, &o2)));
6851 EXPECT(o2 == NULL);
6852 int p2 = 5678;
6853 EXPECT_VALID(Dart_SetPeer(s2, &p2));
6854 EXPECT(Dart_HasPeer(s2));
6855 EXPECT_EQ(2, isolate->heap()->PeerCount());
6856 EXPECT_VALID(Dart_GetPeer(s2, &o2));
6857 EXPECT(o2 == reinterpret_cast<void*>(&p2));
6858 }
6859 Dart_ExitScope();
6860 isolate->heap()->CollectGarbage(Heap::kOld);
6861 EXPECT_EQ(0, isolate->heap()->PeerCount());
6862 }
6863
6535 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 6864 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
6536 6865
6537 } // namespace dart 6866 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698