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

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

Issue 1132323002: Add Service ID zones to service protocol (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 "platform/assert.h" 5 #include "platform/assert.h"
6 #include "vm/globals.h" 6 #include "vm/globals.h"
7 #include "vm/object_id_ring.h" 7 #include "vm/object_id_ring.h"
8 #include "vm/unit_test.h" 8 #include "vm/unit_test.h"
9 #include "vm/dart_api_impl.h" 9 #include "vm/dart_api_impl.h"
10 #include "vm/dart_api_state.h" 10 #include "vm/dart_api_state.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 Isolate* isolate = Isolate::Current(); 105 Isolate* isolate = Isolate::Current();
106 Heap* heap = isolate->heap(); 106 Heap* heap = isolate->heap();
107 ObjectIdRing* ring = isolate->object_id_ring(); 107 ObjectIdRing* ring = isolate->object_id_ring();
108 ObjectIdRing::LookupResult kind = ObjectIdRing::kInvalid; 108 ObjectIdRing::LookupResult kind = ObjectIdRing::kInvalid;
109 RawObject* raw_obj = Api::UnwrapHandle(result); 109 RawObject* raw_obj = Api::UnwrapHandle(result);
110 // Located in new heap. 110 // Located in new heap.
111 EXPECT(raw_obj->IsNewObject()); 111 EXPECT(raw_obj->IsNewObject());
112 EXPECT_NE(Object::null(), raw_obj); 112 EXPECT_NE(Object::null(), raw_obj);
113 intptr_t raw_obj_id1 = ring->GetIdForObject(raw_obj); 113 intptr_t raw_obj_id1 = ring->GetIdForObject(raw_obj);
114 EXPECT_EQ(0, raw_obj_id1); 114 EXPECT_EQ(0, raw_obj_id1);
115 // Get id 0 again.
116 EXPECT_EQ(raw_obj_id1,
117 ring->GetIdForObject(raw_obj, ObjectIdRing::kExistingOrNewId));
118 // Add to ring a second time.
115 intptr_t raw_obj_id2 = ring->GetIdForObject(raw_obj); 119 intptr_t raw_obj_id2 = ring->GetIdForObject(raw_obj);
116 EXPECT_EQ(1, raw_obj_id2); 120 EXPECT_EQ(1, raw_obj_id2);
121 // Get id 0 again.
122 EXPECT_EQ(raw_obj_id1,
123 ring->GetIdForObject(raw_obj, ObjectIdRing::kExistingOrNewId));
117 RawObject* raw_obj1 = ring->GetObjectForId(raw_obj_id1, &kind); 124 RawObject* raw_obj1 = ring->GetObjectForId(raw_obj_id1, &kind);
118 EXPECT_EQ(ObjectIdRing::kValid, kind); 125 EXPECT_EQ(ObjectIdRing::kValid, kind);
119 RawObject* raw_obj2 = ring->GetObjectForId(raw_obj_id2, &kind); 126 RawObject* raw_obj2 = ring->GetObjectForId(raw_obj_id2, &kind);
120 EXPECT_EQ(ObjectIdRing::kValid, kind); 127 EXPECT_EQ(ObjectIdRing::kValid, kind);
121 EXPECT_NE(Object::null(), raw_obj1); 128 EXPECT_NE(Object::null(), raw_obj1);
122 EXPECT_NE(Object::null(), raw_obj2); 129 EXPECT_NE(Object::null(), raw_obj2);
123 EXPECT_EQ(RawObject::ToAddr(raw_obj), RawObject::ToAddr(raw_obj1)); 130 EXPECT_EQ(RawObject::ToAddr(raw_obj), RawObject::ToAddr(raw_obj1));
124 EXPECT_EQ(RawObject::ToAddr(raw_obj), RawObject::ToAddr(raw_obj2)); 131 EXPECT_EQ(RawObject::ToAddr(raw_obj), RawObject::ToAddr(raw_obj2));
125 // Force a scavenge. 132 // Force a scavenge.
126 heap->CollectGarbage(Heap::kNew); 133 heap->CollectGarbage(Heap::kNew);
127 RawObject* raw_object_moved1 = ring->GetObjectForId(raw_obj_id1, &kind); 134 RawObject* raw_object_moved1 = ring->GetObjectForId(raw_obj_id1, &kind);
128 EXPECT_EQ(ObjectIdRing::kValid, kind); 135 EXPECT_EQ(ObjectIdRing::kValid, kind);
129 RawObject* raw_object_moved2 = ring->GetObjectForId(raw_obj_id2, &kind); 136 RawObject* raw_object_moved2 = ring->GetObjectForId(raw_obj_id2, &kind);
130 EXPECT_EQ(ObjectIdRing::kValid, kind); 137 EXPECT_EQ(ObjectIdRing::kValid, kind);
131 EXPECT_NE(Object::null(), raw_object_moved1); 138 EXPECT_NE(Object::null(), raw_object_moved1);
132 EXPECT_NE(Object::null(), raw_object_moved2); 139 EXPECT_NE(Object::null(), raw_object_moved2);
133 EXPECT_EQ(RawObject::ToAddr(raw_object_moved1), 140 EXPECT_EQ(RawObject::ToAddr(raw_object_moved1),
134 RawObject::ToAddr(raw_object_moved2)); 141 RawObject::ToAddr(raw_object_moved2));
135 // Test that objects have moved. 142 // Test that objects have moved.
136 EXPECT_NE(RawObject::ToAddr(raw_obj1), RawObject::ToAddr(raw_object_moved1)); 143 EXPECT_NE(RawObject::ToAddr(raw_obj1), RawObject::ToAddr(raw_object_moved1));
137 EXPECT_NE(RawObject::ToAddr(raw_obj2), RawObject::ToAddr(raw_object_moved2)); 144 EXPECT_NE(RawObject::ToAddr(raw_obj2), RawObject::ToAddr(raw_object_moved2));
138 // Test that we still point at the same list. 145 // Test that we still point at the same list.
139 Dart_Handle moved_handle = Api::NewHandle(isolate, raw_object_moved1); 146 Dart_Handle moved_handle = Api::NewHandle(isolate, raw_object_moved1);
140 EXPECT_VALID(moved_handle); 147 EXPECT_VALID(moved_handle);
141 EXPECT(!Dart_IsNull(moved_handle)); 148 EXPECT(!Dart_IsNull(moved_handle));
142 EXPECT(Dart_IsList(moved_handle)); 149 EXPECT(Dart_IsList(moved_handle));
143 EXPECT_VALID(Dart_ListLength(moved_handle, &list_length)); 150 EXPECT_VALID(Dart_ListLength(moved_handle, &list_length));
144 EXPECT_EQ(3, list_length); 151 EXPECT_EQ(3, list_length);
152 // Test id reuse.
153 EXPECT_EQ(raw_obj_id1,
154 ring->GetIdForObject(raw_object_moved1, ObjectIdRing::kExistingOrNewId));
145 } 155 }
146 156
147 157
148 // Test that the ring table is updated with nulls when the old GC collects. 158 // Test that the ring table is updated with nulls when the old GC collects.
149 TEST_CASE(ObjectIdRingOldGCTest) { 159 TEST_CASE(ObjectIdRingOldGCTest) {
150 Isolate* isolate = Isolate::Current(); 160 Isolate* isolate = Isolate::Current();
151 Heap* heap = isolate->heap(); 161 Heap* heap = isolate->heap();
152 ObjectIdRing* ring = isolate->object_id_ring(); 162 ObjectIdRing* ring = isolate->object_id_ring();
153 163
154 ObjectIdRing::LookupResult kind = ObjectIdRing::kInvalid; 164 ObjectIdRing::LookupResult kind = ObjectIdRing::kInvalid;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 } 234 }
225 235
226 // Check our first entry reports it has expired. 236 // Check our first entry reports it has expired.
227 obj_lookup = ring->GetObjectForId(obj_id, &kind); 237 obj_lookup = ring->GetObjectForId(obj_id, &kind);
228 EXPECT_EQ(ObjectIdRing::kExpired, kind); 238 EXPECT_EQ(ObjectIdRing::kExpired, kind);
229 EXPECT_NE(obj.raw(), obj_lookup); 239 EXPECT_NE(obj.raw(), obj_lookup);
230 EXPECT_EQ(Object::null(), obj_lookup); 240 EXPECT_EQ(Object::null(), obj_lookup);
231 } 241 }
232 242
233 } // namespace dart 243 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698