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

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

Issue 1473403003: Move ApiLocalScope out of class ApiState into class Thread so that the API local handles and zone e… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: self-code-review Created 5 years 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
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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 " return [1, 2, 3];\n" 126 " return [1, 2, 3];\n"
127 "}\n"; 127 "}\n";
128 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 128 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
129 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL); 129 Dart_Handle result = Dart_Invoke(lib, NewString("main"), 0, NULL);
130 intptr_t list_length = 0; 130 intptr_t list_length = 0;
131 EXPECT_VALID(result); 131 EXPECT_VALID(result);
132 EXPECT(!Dart_IsNull(result)); 132 EXPECT(!Dart_IsNull(result));
133 EXPECT(Dart_IsList(result)); 133 EXPECT(Dart_IsList(result));
134 EXPECT_VALID(Dart_ListLength(result, &list_length)); 134 EXPECT_VALID(Dart_ListLength(result, &list_length));
135 EXPECT_EQ(3, list_length); 135 EXPECT_EQ(3, list_length);
136 Isolate* isolate = Isolate::Current(); 136 Isolate* isolate = thread->isolate();
137 Heap* heap = isolate->heap(); 137 Heap* heap = isolate->heap();
138 ObjectIdRing* ring = isolate->object_id_ring(); 138 ObjectIdRing* ring = isolate->object_id_ring();
139 ObjectIdRing::LookupResult kind = ObjectIdRing::kInvalid; 139 ObjectIdRing::LookupResult kind = ObjectIdRing::kInvalid;
140 RawObject* raw_obj = Api::UnwrapHandle(result); 140 RawObject* raw_obj = Api::UnwrapHandle(result);
141 // Located in new heap. 141 // Located in new heap.
142 EXPECT(raw_obj->IsNewObject()); 142 EXPECT(raw_obj->IsNewObject());
143 EXPECT_NE(Object::null(), raw_obj); 143 EXPECT_NE(Object::null(), raw_obj);
144 intptr_t raw_obj_id1 = ring->GetIdForObject(raw_obj); 144 intptr_t raw_obj_id1 = ring->GetIdForObject(raw_obj);
145 EXPECT_EQ(0, raw_obj_id1); 145 EXPECT_EQ(0, raw_obj_id1);
146 // Get id 0 again. 146 // Get id 0 again.
(...skipping 20 matching lines...) Expand all
167 RawObject* raw_object_moved2 = ring->GetObjectForId(raw_obj_id2, &kind); 167 RawObject* raw_object_moved2 = ring->GetObjectForId(raw_obj_id2, &kind);
168 EXPECT_EQ(ObjectIdRing::kValid, kind); 168 EXPECT_EQ(ObjectIdRing::kValid, kind);
169 EXPECT_NE(Object::null(), raw_object_moved1); 169 EXPECT_NE(Object::null(), raw_object_moved1);
170 EXPECT_NE(Object::null(), raw_object_moved2); 170 EXPECT_NE(Object::null(), raw_object_moved2);
171 EXPECT_EQ(RawObject::ToAddr(raw_object_moved1), 171 EXPECT_EQ(RawObject::ToAddr(raw_object_moved1),
172 RawObject::ToAddr(raw_object_moved2)); 172 RawObject::ToAddr(raw_object_moved2));
173 // Test that objects have moved. 173 // Test that objects have moved.
174 EXPECT_NE(RawObject::ToAddr(raw_obj1), RawObject::ToAddr(raw_object_moved1)); 174 EXPECT_NE(RawObject::ToAddr(raw_obj1), RawObject::ToAddr(raw_object_moved1));
175 EXPECT_NE(RawObject::ToAddr(raw_obj2), RawObject::ToAddr(raw_object_moved2)); 175 EXPECT_NE(RawObject::ToAddr(raw_obj2), RawObject::ToAddr(raw_object_moved2));
176 // Test that we still point at the same list. 176 // Test that we still point at the same list.
177 Dart_Handle moved_handle = Api::NewHandle(isolate, raw_object_moved1); 177 Dart_Handle moved_handle = Api::NewHandle(thread, raw_object_moved1);
178 EXPECT_VALID(moved_handle); 178 EXPECT_VALID(moved_handle);
179 EXPECT(!Dart_IsNull(moved_handle)); 179 EXPECT(!Dart_IsNull(moved_handle));
180 EXPECT(Dart_IsList(moved_handle)); 180 EXPECT(Dart_IsList(moved_handle));
181 EXPECT_VALID(Dart_ListLength(moved_handle, &list_length)); 181 EXPECT_VALID(Dart_ListLength(moved_handle, &list_length));
182 EXPECT_EQ(3, list_length); 182 EXPECT_EQ(3, list_length);
183 // Test id reuse. 183 // Test id reuse.
184 EXPECT_EQ(raw_obj_id1, 184 EXPECT_EQ(raw_obj_id1,
185 ring->GetIdForObject(raw_object_moved1, ObjectIdRing::kReuseId)); 185 ring->GetIdForObject(raw_object_moved1, ObjectIdRing::kReuseId));
186 } 186 }
187 187
188 188
189 // Test that the ring table is updated with nulls when the old GC collects. 189 // Test that the ring table is updated with nulls when the old GC collects.
190 TEST_CASE(ObjectIdRingOldGCTest) { 190 TEST_CASE(ObjectIdRingOldGCTest) {
191 Isolate* isolate = Isolate::Current(); 191 Isolate* isolate = thread->isolate();
192 Heap* heap = isolate->heap(); 192 Heap* heap = isolate->heap();
193 ObjectIdRing* ring = isolate->object_id_ring(); 193 ObjectIdRing* ring = isolate->object_id_ring();
194 194
195 ObjectIdRing::LookupResult kind = ObjectIdRing::kInvalid; 195 ObjectIdRing::LookupResult kind = ObjectIdRing::kInvalid;
196 intptr_t raw_obj_id1 = -1; 196 intptr_t raw_obj_id1 = -1;
197 intptr_t raw_obj_id2 = -1; 197 intptr_t raw_obj_id2 = -1;
198 { 198 {
199 Dart_EnterScope(); 199 Dart_EnterScope();
200 Dart_Handle result; 200 Dart_Handle result;
201 // Create a string in the old heap. 201 // Create a string in the old heap.
202 result = Api::NewHandle(isolate, String::New("old", Heap::kOld)); 202 result = Api::NewHandle(thread, String::New("old", Heap::kOld));
203 EXPECT_VALID(result); 203 EXPECT_VALID(result);
204 intptr_t string_length = 0; 204 intptr_t string_length = 0;
205 // Inspect string. 205 // Inspect string.
206 EXPECT(!Dart_IsNull(result)); 206 EXPECT(!Dart_IsNull(result));
207 EXPECT(Dart_IsString(result)); 207 EXPECT(Dart_IsString(result));
208 EXPECT_VALID(Dart_StringLength(result, &string_length)); 208 EXPECT_VALID(Dart_StringLength(result, &string_length));
209 EXPECT_EQ(3, string_length); 209 EXPECT_EQ(3, string_length);
210 RawObject* raw_obj = Api::UnwrapHandle(result); 210 RawObject* raw_obj = Api::UnwrapHandle(result);
211 // Verify that it is located in old heap. 211 // Verify that it is located in old heap.
212 EXPECT(raw_obj->IsOldObject()); 212 EXPECT(raw_obj->IsOldObject());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 } 265 }
266 266
267 // Check our first entry reports it has expired. 267 // Check our first entry reports it has expired.
268 obj_lookup = ring->GetObjectForId(obj_id, &kind); 268 obj_lookup = ring->GetObjectForId(obj_id, &kind);
269 EXPECT_EQ(ObjectIdRing::kExpired, kind); 269 EXPECT_EQ(ObjectIdRing::kExpired, kind);
270 EXPECT_NE(obj.raw(), obj_lookup); 270 EXPECT_NE(obj.raw(), obj_lookup);
271 EXPECT_EQ(Object::null(), obj_lookup); 271 EXPECT_EQ(Object::null(), obj_lookup);
272 } 272 }
273 273
274 } // namespace dart 274 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698