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

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

Issue 1310463005: - Ensure that HandleScope is initialized with a thread. (Remove (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 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
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 "bin/builtin.h" 5 #include "bin/builtin.h"
6 #include "include/dart_api.h" 6 #include "include/dart_api.h"
7 #include "include/dart_mirrors_api.h" 7 #include "include/dart_mirrors_api.h"
8 #include "include/dart_native_api.h" 8 #include "include/dart_native_api.h"
9 #include "include/dart_tools_api.h" 9 #include "include/dart_tools_api.h"
10 #include "platform/assert.h" 10 #include "platform/assert.h"
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 EXPECT(!Dart_IdentityEquals(five, mint)); 609 EXPECT(!Dart_IdentityEquals(five, mint));
610 EXPECT(!Dart_IdentityEquals(abc, xyz)); 610 EXPECT(!Dart_IdentityEquals(abc, xyz));
611 611
612 // Case where identical() is not the same as pointer equality. 612 // Case where identical() is not the same as pointer equality.
613 Dart_Handle nan1 = Dart_NewDouble(NAN); 613 Dart_Handle nan1 = Dart_NewDouble(NAN);
614 Dart_Handle nan2 = Dart_NewDouble(NAN); 614 Dart_Handle nan2 = Dart_NewDouble(NAN);
615 EXPECT(Dart_IdentityEquals(nan1, nan2)); 615 EXPECT(Dart_IdentityEquals(nan1, nan2));
616 616
617 // Non-instance objects. 617 // Non-instance objects.
618 { 618 {
619 Isolate* isolate = Isolate::Current(); 619 DARTSCOPE(Thread::Current());
620 DARTSCOPE(isolate);
621 Dart_Handle lib1 = Dart_LookupLibrary(dart_core); 620 Dart_Handle lib1 = Dart_LookupLibrary(dart_core);
622 Dart_Handle lib2 = Dart_LookupLibrary(dart_mirrors); 621 Dart_Handle lib2 = Dart_LookupLibrary(dart_mirrors);
623 622
624 EXPECT(Dart_IdentityEquals(lib1, lib1)); 623 EXPECT(Dart_IdentityEquals(lib1, lib1));
625 EXPECT(Dart_IdentityEquals(lib2, lib2)); 624 EXPECT(Dart_IdentityEquals(lib2, lib2));
626 EXPECT(!Dart_IdentityEquals(lib1, lib2)); 625 EXPECT(!Dart_IdentityEquals(lib1, lib2));
627 626
628 // Mix instance and non-instance. 627 // Mix instance and non-instance.
629 EXPECT(!Dart_IdentityEquals(lib1, nan1)); 628 EXPECT(!Dart_IdentityEquals(lib1, nan1));
630 EXPECT(!Dart_IdentityEquals(nan1, lib1)); 629 EXPECT(!Dart_IdentityEquals(nan1, lib1));
(...skipping 24 matching lines...) Expand all
655 654
656 // Note abc and abc_again are not required to have equal identity hashes. 655 // Note abc and abc_again are not required to have equal identity hashes.
657 656
658 // Case where identical() is not the same as pointer equality. 657 // Case where identical() is not the same as pointer equality.
659 Dart_Handle nan1 = Dart_NewDouble(NAN); 658 Dart_Handle nan1 = Dart_NewDouble(NAN);
660 Dart_Handle nan2 = Dart_NewDouble(NAN); 659 Dart_Handle nan2 = Dart_NewDouble(NAN);
661 EXPECT_EQ(Dart_IdentityHash(nan1), Dart_IdentityHash(nan2)); 660 EXPECT_EQ(Dart_IdentityHash(nan1), Dart_IdentityHash(nan2));
662 661
663 // Non-instance objects. 662 // Non-instance objects.
664 { 663 {
665 Isolate* isolate = Isolate::Current(); 664 DARTSCOPE(Thread::Current());
666 DARTSCOPE(isolate);
667 Dart_Handle lib1 = Dart_LookupLibrary(dart_core); 665 Dart_Handle lib1 = Dart_LookupLibrary(dart_core);
668 Dart_Handle lib2 = Dart_LookupLibrary(dart_mirrors); 666 Dart_Handle lib2 = Dart_LookupLibrary(dart_mirrors);
669 667
670 EXPECT_EQ(Dart_IdentityHash(lib1), Dart_IdentityHash(lib1)); 668 EXPECT_EQ(Dart_IdentityHash(lib1), Dart_IdentityHash(lib1));
671 EXPECT_EQ(Dart_IdentityHash(lib2), Dart_IdentityHash(lib2)); 669 EXPECT_EQ(Dart_IdentityHash(lib2), Dart_IdentityHash(lib2));
672 } 670 }
673 } 671 }
674 672
675 673
676 TEST_CASE(ObjectEquals) { 674 TEST_CASE(ObjectEquals) {
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
1168 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); 1166 Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
1169 EXPECT_EQ(40, peer8); 1167 EXPECT_EQ(40, peer8);
1170 EXPECT_EQ(41, peer16); 1168 EXPECT_EQ(41, peer16);
1171 Isolate::Current()->heap()->CollectGarbage(Heap::kNew); 1169 Isolate::Current()->heap()->CollectGarbage(Heap::kNew);
1172 EXPECT_EQ(80, peer8); 1170 EXPECT_EQ(80, peer8);
1173 EXPECT_EQ(82, peer16); 1171 EXPECT_EQ(82, peer16);
1174 } 1172 }
1175 1173
1176 1174
1177 TEST_CASE(ExternalStringPretenure) { 1175 TEST_CASE(ExternalStringPretenure) {
1178 Isolate* isolate = Isolate::Current();
1179 { 1176 {
1180 Dart_EnterScope(); 1177 Dart_EnterScope();
1181 static const uint8_t big_data8[16*MB] = {0, }; 1178 static const uint8_t big_data8[16*MB] = {0, };
1182 Dart_Handle big8 = Dart_NewExternalLatin1String( 1179 Dart_Handle big8 = Dart_NewExternalLatin1String(
1183 big_data8, 1180 big_data8,
1184 ARRAY_SIZE(big_data8), 1181 ARRAY_SIZE(big_data8),
1185 NULL, 1182 NULL,
1186 NULL); 1183 NULL);
1187 EXPECT_VALID(big8); 1184 EXPECT_VALID(big8);
1188 static const uint16_t big_data16[16*MB/2] = {0, }; 1185 static const uint16_t big_data16[16*MB/2] = {0, };
(...skipping 10 matching lines...) Expand all
1199 NULL); 1196 NULL);
1200 EXPECT_VALID(small8); 1197 EXPECT_VALID(small8);
1201 static const uint16_t small_data16[] = {'b', 'a', 'r'}; 1198 static const uint16_t small_data16[] = {'b', 'a', 'r'};
1202 Dart_Handle small16 = Dart_NewExternalUTF16String( 1199 Dart_Handle small16 = Dart_NewExternalUTF16String(
1203 small_data16, 1200 small_data16,
1204 ARRAY_SIZE(small_data16), 1201 ARRAY_SIZE(small_data16),
1205 NULL, 1202 NULL,
1206 NULL); 1203 NULL);
1207 EXPECT_VALID(small16); 1204 EXPECT_VALID(small16);
1208 { 1205 {
1209 DARTSCOPE(isolate); 1206 DARTSCOPE(Thread::Current());
1210 String& handle = String::Handle(); 1207 String& handle = String::Handle();
1211 handle ^= Api::UnwrapHandle(big8); 1208 handle ^= Api::UnwrapHandle(big8);
1212 EXPECT(handle.IsOld()); 1209 EXPECT(handle.IsOld());
1213 handle ^= Api::UnwrapHandle(big16); 1210 handle ^= Api::UnwrapHandle(big16);
1214 EXPECT(handle.IsOld()); 1211 EXPECT(handle.IsOld());
1215 handle ^= Api::UnwrapHandle(small8); 1212 handle ^= Api::UnwrapHandle(small8);
1216 EXPECT(handle.IsNew()); 1213 EXPECT(handle.IsNew());
1217 handle ^= Api::UnwrapHandle(small16); 1214 handle ^= Api::UnwrapHandle(small16);
1218 EXPECT(handle.IsNew()); 1215 EXPECT(handle.IsNew());
1219 } 1216 }
1220 Dart_ExitScope(); 1217 Dart_ExitScope();
1221 } 1218 }
1222 } 1219 }
1223 1220
1224 1221
1225 TEST_CASE(ExternalTypedDataPretenure) { 1222 TEST_CASE(ExternalTypedDataPretenure) {
1226 Isolate* isolate = Isolate::Current();
1227 { 1223 {
1228 Dart_EnterScope(); 1224 Dart_EnterScope();
1229 static const int kBigLength = 16*MB/8; 1225 static const int kBigLength = 16*MB/8;
1230 int64_t* big_data = new int64_t[kBigLength](); 1226 int64_t* big_data = new int64_t[kBigLength]();
1231 Dart_Handle big = Dart_NewExternalTypedData( 1227 Dart_Handle big = Dart_NewExternalTypedData(
1232 Dart_TypedData_kInt64, 1228 Dart_TypedData_kInt64,
1233 big_data, 1229 big_data,
1234 kBigLength); 1230 kBigLength);
1235 EXPECT_VALID(big); 1231 EXPECT_VALID(big);
1236 static const int kSmallLength = 16*KB/8; 1232 static const int kSmallLength = 16*KB/8;
1237 int64_t* small_data = new int64_t[kSmallLength](); 1233 int64_t* small_data = new int64_t[kSmallLength]();
1238 Dart_Handle small = Dart_NewExternalTypedData( 1234 Dart_Handle small = Dart_NewExternalTypedData(
1239 Dart_TypedData_kInt64, 1235 Dart_TypedData_kInt64,
1240 small_data, 1236 small_data,
1241 kSmallLength); 1237 kSmallLength);
1242 EXPECT_VALID(small); 1238 EXPECT_VALID(small);
1243 { 1239 {
1244 DARTSCOPE(isolate); 1240 DARTSCOPE(Thread::Current());
1245 ExternalTypedData& handle = ExternalTypedData::Handle(); 1241 ExternalTypedData& handle = ExternalTypedData::Handle();
1246 handle ^= Api::UnwrapHandle(big); 1242 handle ^= Api::UnwrapHandle(big);
1247 EXPECT(handle.IsOld()); 1243 EXPECT(handle.IsOld());
1248 handle ^= Api::UnwrapHandle(small); 1244 handle ^= Api::UnwrapHandle(small);
1249 EXPECT(handle.IsNew()); 1245 EXPECT(handle.IsNew());
1250 } 1246 }
1251 Dart_ExitScope(); 1247 Dart_ExitScope();
1252 delete[] big_data; 1248 delete[] big_data;
1253 delete[] small_data; 1249 delete[] small_data;
1254 } 1250 }
(...skipping 1106 matching lines...) Expand 10 before | Expand all | Expand 10 after
2361 TestIsolateScope __test_isolate__; 2357 TestIsolateScope __test_isolate__;
2362 2358
2363 Isolate* isolate = Isolate::Current(); 2359 Isolate* isolate = Isolate::Current();
2364 EXPECT(isolate != NULL); 2360 EXPECT(isolate != NULL);
2365 ApiState* state = isolate->api_state(); 2361 ApiState* state = isolate->api_state();
2366 EXPECT(state != NULL); 2362 EXPECT(state != NULL);
2367 ApiLocalScope* scope = state->top_scope(); 2363 ApiLocalScope* scope = state->top_scope();
2368 Dart_EnterScope(); 2364 Dart_EnterScope();
2369 { 2365 {
2370 EXPECT(state->top_scope() != NULL); 2366 EXPECT(state->top_scope() != NULL);
2371 DARTSCOPE(isolate); 2367 DARTSCOPE(Thread::Current());
2372 const String& str1 = String::Handle(String::New("Test String")); 2368 const String& str1 = String::Handle(String::New("Test String"));
2373 Dart_Handle ref = Api::NewHandle(isolate, str1.raw()); 2369 Dart_Handle ref = Api::NewHandle(isolate, str1.raw());
2374 String& str2 = String::Handle(); 2370 String& str2 = String::Handle();
2375 str2 ^= Api::UnwrapHandle(ref); 2371 str2 ^= Api::UnwrapHandle(ref);
2376 EXPECT(str1.Equals(str2)); 2372 EXPECT(str1.Equals(str2));
2377 } 2373 }
2378 Dart_ExitScope(); 2374 Dart_ExitScope();
2379 EXPECT(scope == state->top_scope()); 2375 EXPECT(scope == state->top_scope());
2380 } 2376 }
2381 2377
2382 2378
2383 // Unit test for creating and deleting persistent handles. 2379 // Unit test for creating and deleting persistent handles.
2384 UNIT_TEST_CASE(PersistentHandles) { 2380 UNIT_TEST_CASE(PersistentHandles) {
2385 const char* kTestString1 = "Test String1"; 2381 const char* kTestString1 = "Test String1";
2386 const char* kTestString2 = "Test String2"; 2382 const char* kTestString2 = "Test String2";
2387 TestCase::CreateTestIsolate(); 2383 TestCase::CreateTestIsolate();
2388 Isolate* isolate = Isolate::Current(); 2384 Isolate* isolate = Isolate::Current();
2389 EXPECT(isolate != NULL); 2385 EXPECT(isolate != NULL);
2390 ApiState* state = isolate->api_state(); 2386 ApiState* state = isolate->api_state();
2391 EXPECT(state != NULL); 2387 EXPECT(state != NULL);
2392 ApiLocalScope* scope = state->top_scope(); 2388 ApiLocalScope* scope = state->top_scope();
2393 Dart_PersistentHandle handles[2000]; 2389 Dart_PersistentHandle handles[2000];
2394 Dart_EnterScope(); 2390 Dart_EnterScope();
2395 { 2391 {
2396 DARTSCOPE(isolate); 2392 DARTSCOPE(Thread::Current());
2397 Dart_Handle ref1 = Api::NewHandle(isolate, String::New(kTestString1)); 2393 Dart_Handle ref1 = Api::NewHandle(isolate, String::New(kTestString1));
2398 for (int i = 0; i < 1000; i++) { 2394 for (int i = 0; i < 1000; i++) {
2399 handles[i] = Dart_NewPersistentHandle(ref1); 2395 handles[i] = Dart_NewPersistentHandle(ref1);
2400 } 2396 }
2401 Dart_EnterScope(); 2397 Dart_EnterScope();
2402 Dart_Handle ref2 = Api::NewHandle(isolate, String::New(kTestString2)); 2398 Dart_Handle ref2 = Api::NewHandle(isolate, String::New(kTestString2));
2403 for (int i = 1000; i < 2000; i++) { 2399 for (int i = 1000; i < 2000; i++) {
2404 handles[i] = Dart_NewPersistentHandle(ref2); 2400 handles[i] = Dart_NewPersistentHandle(ref2);
2405 } 2401 }
2406 for (int i = 500; i < 1500; i++) { 2402 for (int i = 500; i < 1500; i++) {
2407 Dart_DeletePersistentHandle(handles[i]); 2403 Dart_DeletePersistentHandle(handles[i]);
2408 } 2404 }
2409 for (int i = 500; i < 1000; i++) { 2405 for (int i = 500; i < 1000; i++) {
2410 handles[i] = Dart_NewPersistentHandle(ref2); 2406 handles[i] = Dart_NewPersistentHandle(ref2);
2411 } 2407 }
2412 for (int i = 1000; i < 1500; i++) { 2408 for (int i = 1000; i < 1500; i++) {
2413 handles[i] = Dart_NewPersistentHandle(ref1); 2409 handles[i] = Dart_NewPersistentHandle(ref1);
2414 } 2410 }
2415 VERIFY_ON_TRANSITION; 2411 VERIFY_ON_TRANSITION;
2416 Dart_ExitScope(); 2412 Dart_ExitScope();
2417 } 2413 }
2418 Dart_ExitScope(); 2414 Dart_ExitScope();
2419 { 2415 {
2420 StackZone zone(isolate); 2416 StackZone zone(isolate);
2421 HANDLESCOPE(isolate); 2417 HANDLESCOPE(Thread::Current());
2422 for (int i = 0; i < 500; i++) { 2418 for (int i = 0; i < 500; i++) {
2423 String& str = String::Handle(); 2419 String& str = String::Handle();
2424 str ^= PersistentHandle::Cast(handles[i])->raw(); 2420 str ^= PersistentHandle::Cast(handles[i])->raw();
2425 EXPECT(str.Equals(kTestString1)); 2421 EXPECT(str.Equals(kTestString1));
2426 } 2422 }
2427 for (int i = 500; i < 1000; i++) { 2423 for (int i = 500; i < 1000; i++) {
2428 String& str = String::Handle(); 2424 String& str = String::Handle();
2429 str ^= PersistentHandle::Cast(handles[i])->raw(); 2425 str ^= PersistentHandle::Cast(handles[i])->raw();
2430 EXPECT(str.Equals(kTestString2)); 2426 EXPECT(str.Equals(kTestString2));
2431 } 2427 }
(...skipping 16 matching lines...) Expand all
2448 2444
2449 // Test that we are able to create a persistent handle from a 2445 // Test that we are able to create a persistent handle from a
2450 // persistent handle. 2446 // persistent handle.
2451 UNIT_TEST_CASE(NewPersistentHandle_FromPersistentHandle) { 2447 UNIT_TEST_CASE(NewPersistentHandle_FromPersistentHandle) {
2452 TestIsolateScope __test_isolate__; 2448 TestIsolateScope __test_isolate__;
2453 2449
2454 Isolate* isolate = Isolate::Current(); 2450 Isolate* isolate = Isolate::Current();
2455 EXPECT(isolate != NULL); 2451 EXPECT(isolate != NULL);
2456 ApiState* state = isolate->api_state(); 2452 ApiState* state = isolate->api_state();
2457 EXPECT(state != NULL); 2453 EXPECT(state != NULL);
2458 DARTSCOPE(isolate); 2454 DARTSCOPE(Thread::Current());
2459 2455
2460 // Start with a known persistent handle. 2456 // Start with a known persistent handle.
2461 Dart_PersistentHandle obj1 = Dart_NewPersistentHandle(Dart_True()); 2457 Dart_PersistentHandle obj1 = Dart_NewPersistentHandle(Dart_True());
2462 EXPECT(state->IsValidPersistentHandle(obj1)); 2458 EXPECT(state->IsValidPersistentHandle(obj1));
2463 2459
2464 // And use it to allocate a second persistent handle. 2460 // And use it to allocate a second persistent handle.
2465 Dart_Handle obj2 = Dart_HandleFromPersistent(obj1); 2461 Dart_Handle obj2 = Dart_HandleFromPersistent(obj1);
2466 Dart_PersistentHandle obj3 = Dart_NewPersistentHandle(obj2); 2462 Dart_PersistentHandle obj3 = Dart_NewPersistentHandle(obj2);
2467 EXPECT(state->IsValidPersistentHandle(obj3)); 2463 EXPECT(state->IsValidPersistentHandle(obj3));
2468 2464
(...skipping 10 matching lines...) Expand all
2479 // Test that we can assign to a persistent handle. 2475 // Test that we can assign to a persistent handle.
2480 UNIT_TEST_CASE(AssignToPersistentHandle) { 2476 UNIT_TEST_CASE(AssignToPersistentHandle) {
2481 const char* kTestString1 = "Test String1"; 2477 const char* kTestString1 = "Test String1";
2482 const char* kTestString2 = "Test String2"; 2478 const char* kTestString2 = "Test String2";
2483 TestIsolateScope __test_isolate__; 2479 TestIsolateScope __test_isolate__;
2484 2480
2485 Isolate* isolate = Isolate::Current(); 2481 Isolate* isolate = Isolate::Current();
2486 EXPECT(isolate != NULL); 2482 EXPECT(isolate != NULL);
2487 ApiState* state = isolate->api_state(); 2483 ApiState* state = isolate->api_state();
2488 EXPECT(state != NULL); 2484 EXPECT(state != NULL);
2489 DARTSCOPE(isolate); 2485 DARTSCOPE(Thread::Current());
2490 String& str = String::Handle(); 2486 String& str = String::Handle();
2491 2487
2492 // Start with a known persistent handle. 2488 // Start with a known persistent handle.
2493 Dart_Handle ref1 = Api::NewHandle(isolate, String::New(kTestString1)); 2489 Dart_Handle ref1 = Api::NewHandle(isolate, String::New(kTestString1));
2494 Dart_PersistentHandle obj = Dart_NewPersistentHandle(ref1); 2490 Dart_PersistentHandle obj = Dart_NewPersistentHandle(ref1);
2495 EXPECT(state->IsValidPersistentHandle(obj)); 2491 EXPECT(state->IsValidPersistentHandle(obj));
2496 str ^= PersistentHandle::Cast(obj)->raw(); 2492 str ^= PersistentHandle::Cast(obj)->raw();
2497 EXPECT(str.Equals(kTestString1)); 2493 EXPECT(str.Equals(kTestString1));
2498 2494
2499 // Now create another local handle and assign it to the persistent handle. 2495 // Now create another local handle and assign it to the persistent handle.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2559 Dart_EnterScope(); 2555 Dart_EnterScope();
2560 2556
2561 // Create an object in new space. 2557 // Create an object in new space.
2562 Dart_Handle new_ref = NewString("new string"); 2558 Dart_Handle new_ref = NewString("new string");
2563 EXPECT_VALID(new_ref); 2559 EXPECT_VALID(new_ref);
2564 2560
2565 // Create an object in old space. 2561 // Create an object in old space.
2566 Dart_Handle old_ref; 2562 Dart_Handle old_ref;
2567 { 2563 {
2568 Isolate* isolate = Isolate::Current(); 2564 Isolate* isolate = Isolate::Current();
2569 DARTSCOPE(isolate); 2565 DARTSCOPE(Thread::Current());
2570 old_ref = Api::NewHandle(isolate, String::New("old string", Heap::kOld)); 2566 old_ref = Api::NewHandle(isolate, String::New("old string", Heap::kOld));
2571 EXPECT_VALID(old_ref); 2567 EXPECT_VALID(old_ref);
2572 } 2568 }
2573 2569
2574 // Create a weak ref to the new space object. 2570 // Create a weak ref to the new space object.
2575 weak_new_ref = Dart_NewWeakPersistentHandle(new_ref, 2571 weak_new_ref = Dart_NewWeakPersistentHandle(new_ref,
2576 NULL, 2572 NULL,
2577 0, 2573 0,
2578 WeakPersistentHandleCallback); 2574 WeakPersistentHandleCallback);
2579 EXPECT_VALID(AsHandle(weak_new_ref)); 2575 EXPECT_VALID(AsHandle(weak_new_ref));
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
2814 // ... but the object is still alive and not yet promoted, so external size 2810 // ... but the object is still alive and not yet promoted, so external size
2815 // in new space is still above the limit. Thus, even the following tiny 2811 // in new space is still above the limit. Thus, even the following tiny
2816 // external allocation will trigger another scavenge. 2812 // external allocation will trigger another scavenge.
2817 Dart_WeakPersistentHandle trigger = 2813 Dart_WeakPersistentHandle trigger =
2818 Dart_NewWeakPersistentHandle(obj, NULL, 1, NopCallback); 2814 Dart_NewWeakPersistentHandle(obj, NULL, 1, NopCallback);
2819 EXPECT_VALID(AsHandle(trigger)); 2815 EXPECT_VALID(AsHandle(trigger));
2820 Dart_DeleteWeakPersistentHandle(isolate, trigger); 2816 Dart_DeleteWeakPersistentHandle(isolate, trigger);
2821 // After the two scavenges above, 'obj' should now be promoted, hence its 2817 // After the two scavenges above, 'obj' should now be promoted, hence its
2822 // external size charged to old space. 2818 // external size charged to old space.
2823 { 2819 {
2824 DARTSCOPE(Isolate::Current()); 2820 DARTSCOPE(thread);
2825 String& handle = String::Handle(); 2821 String& handle = String::Handle(thread->zone());
2826 handle ^= Api::UnwrapHandle(obj); 2822 handle ^= Api::UnwrapHandle(obj);
2827 EXPECT(handle.IsOld()); 2823 EXPECT(handle.IsOld());
2828 } 2824 }
2829 EXPECT(heap->ExternalInWords(Heap::kNew) == 0); 2825 EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
2830 EXPECT(heap->ExternalInWords(Heap::kOld) == kWeak1ExternalSize / kWordSize); 2826 EXPECT(heap->ExternalInWords(Heap::kOld) == kWeak1ExternalSize / kWordSize);
2831 Dart_ExitScope(); 2827 Dart_ExitScope();
2832 } 2828 }
2833 Dart_DeleteWeakPersistentHandle(isolate, weak1); 2829 Dart_DeleteWeakPersistentHandle(isolate, weak1);
2834 Isolate::Current()->heap()->CollectGarbage(Heap::kOld); 2830 Isolate::Current()->heap()->CollectGarbage(Heap::kOld);
2835 EXPECT(heap->ExternalInWords(Heap::kOld) == 0); 2831 EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
2925 } 2921 }
2926 2922
2927 2923
2928 TEST_CASE(ObjectGroups) { 2924 TEST_CASE(ObjectGroups) {
2929 Dart_PersistentHandle strong = NULL; 2925 Dart_PersistentHandle strong = NULL;
2930 Dart_WeakPersistentHandle strong_weak = NULL; 2926 Dart_WeakPersistentHandle strong_weak = NULL;
2931 2927
2932 Dart_EnterScope(); 2928 Dart_EnterScope();
2933 { 2929 {
2934 Isolate* isolate = Isolate::Current(); 2930 Isolate* isolate = Isolate::Current();
2935 DARTSCOPE(isolate); 2931 DARTSCOPE(Thread::Current());
2936 2932
2937 Dart_Handle local = Api::NewHandle( 2933 Dart_Handle local = Api::NewHandle(
2938 isolate, String::New("strongly reachable", Heap::kOld)); 2934 isolate, String::New("strongly reachable", Heap::kOld));
2939 strong = Dart_NewPersistentHandle(local); 2935 strong = Dart_NewPersistentHandle(local);
2940 strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback); 2936 strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback);
2941 EXPECT_VALID(AsHandle(strong)); 2937 EXPECT_VALID(AsHandle(strong));
2942 EXPECT(!Dart_IsNull(AsHandle(strong))); 2938 EXPECT(!Dart_IsNull(AsHandle(strong)));
2943 2939
2944 weak1 = Dart_NewWeakPersistentHandle( 2940 weak1 = Dart_NewWeakPersistentHandle(
2945 Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kOld)), 2941 Api::NewHandle(isolate, String::New("weakly reachable 1", Heap::kOld)),
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
3167 } 3163 }
3168 3164
3169 3165
3170 TEST_CASE(DuplicateWeakReferenceSetEntries) { 3166 TEST_CASE(DuplicateWeakReferenceSetEntries) {
3171 Isolate* isolate = Isolate::Current(); 3167 Isolate* isolate = Isolate::Current();
3172 Dart_PersistentHandle strong = NULL; 3168 Dart_PersistentHandle strong = NULL;
3173 Dart_WeakPersistentHandle weak = NULL; // A weak handle to strong. 3169 Dart_WeakPersistentHandle weak = NULL; // A weak handle to strong.
3174 3170
3175 Dart_EnterScope(); 3171 Dart_EnterScope();
3176 { 3172 {
3177 DARTSCOPE(isolate); 3173 DARTSCOPE(Thread::Current());
3178 3174
3179 // Strong handle to keep the reference set alive. 3175 // Strong handle to keep the reference set alive.
3180 Dart_Handle local = Api::NewHandle(isolate, String::New("string")); 3176 Dart_Handle local = Api::NewHandle(isolate, String::New("string"));
3181 strong = Dart_NewPersistentHandle(local); 3177 strong = Dart_NewPersistentHandle(local);
3182 EXPECT_VALID(AsHandle(strong)); 3178 EXPECT_VALID(AsHandle(strong));
3183 EXPECT(!Dart_IsNull(AsHandle(strong))); 3179 EXPECT(!Dart_IsNull(AsHandle(strong)));
3184 // Corresponding weak handle to use as key and duplicated value. 3180 // Corresponding weak handle to use as key and duplicated value.
3185 weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback); 3181 weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback);
3186 EXPECT_VALID(AsHandle(weak)); 3182 EXPECT_VALID(AsHandle(weak));
3187 EXPECT(!Dart_IsNull(AsHandle(weak))); 3183 EXPECT(!Dart_IsNull(AsHandle(weak)));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3220 } else if (handle == new_pwph) { 3216 } else if (handle == new_pwph) {
3221 new_pwph = NULL; 3217 new_pwph = NULL;
3222 } 3218 }
3223 } 3219 }
3224 3220
3225 3221
3226 TEST_CASE(PrologueWeakPersistentHandles) { 3222 TEST_CASE(PrologueWeakPersistentHandles) {
3227 Dart_EnterScope(); 3223 Dart_EnterScope();
3228 { 3224 {
3229 Isolate* isolate = Isolate::Current(); 3225 Isolate* isolate = Isolate::Current();
3230 DARTSCOPE(isolate); 3226 DARTSCOPE(Thread::Current());
3231 new_pwph = Dart_NewPrologueWeakPersistentHandle( 3227 new_pwph = Dart_NewPrologueWeakPersistentHandle(
3232 Api::NewHandle(isolate, 3228 Api::NewHandle(isolate,
3233 String::New("new space prologue weak", Heap::kNew)), 3229 String::New("new space prologue weak", Heap::kNew)),
3234 NULL, 0, PrologueWeakHandleCallback); 3230 NULL, 0, PrologueWeakHandleCallback);
3235 EXPECT_VALID(AsHandle(new_pwph)); 3231 EXPECT_VALID(AsHandle(new_pwph));
3236 EXPECT(!Dart_IsNull(AsHandle(new_pwph))); 3232 EXPECT(!Dart_IsNull(AsHandle(new_pwph)));
3237 old_pwph = Dart_NewPrologueWeakPersistentHandle( 3233 old_pwph = Dart_NewPrologueWeakPersistentHandle(
3238 Api::NewHandle(isolate, 3234 Api::NewHandle(isolate,
3239 String::New("old space prologue weak", Heap::kOld)), 3235 String::New("old space prologue weak", Heap::kOld)),
3240 NULL, 0, PrologueWeakHandleCallback); 3236 NULL, 0, PrologueWeakHandleCallback);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
3318 } 3314 }
3319 3315
3320 3316
3321 TEST_CASE(ImplicitReferencesOldSpace) { 3317 TEST_CASE(ImplicitReferencesOldSpace) {
3322 Dart_PersistentHandle strong = NULL; 3318 Dart_PersistentHandle strong = NULL;
3323 Dart_WeakPersistentHandle strong_weak = NULL; 3319 Dart_WeakPersistentHandle strong_weak = NULL;
3324 3320
3325 Dart_EnterScope(); 3321 Dart_EnterScope();
3326 { 3322 {
3327 Isolate* isolate = Isolate::Current(); 3323 Isolate* isolate = Isolate::Current();
3328 DARTSCOPE(isolate); 3324 DARTSCOPE(Thread::Current());
3329 3325
3330 Dart_Handle local = Api::NewHandle( 3326 Dart_Handle local = Api::NewHandle(
3331 isolate, String::New("strongly reachable", Heap::kOld)); 3327 isolate, String::New("strongly reachable", Heap::kOld));
3332 strong = Dart_NewPersistentHandle(local); 3328 strong = Dart_NewPersistentHandle(local);
3333 strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback); 3329 strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback);
3334 3330
3335 EXPECT(!Dart_IsNull(AsHandle(strong))); 3331 EXPECT(!Dart_IsNull(AsHandle(strong)));
3336 EXPECT_VALID(AsHandle(strong)); 3332 EXPECT_VALID(AsHandle(strong));
3337 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); 3333 EXPECT(!Dart_IsNull(AsHandle(strong_weak)));
3338 EXPECT_VALID(AsHandle(strong_weak)); 3334 EXPECT_VALID(AsHandle(strong_weak));
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
3429 3425
3430 3426
3431 TEST_CASE(ImplicitReferencesNewSpace) { 3427 TEST_CASE(ImplicitReferencesNewSpace) {
3432 Dart_PersistentHandle strong = NULL; 3428 Dart_PersistentHandle strong = NULL;
3433 Dart_WeakPersistentHandle strong_weak = NULL; 3429 Dart_WeakPersistentHandle strong_weak = NULL;
3434 3430
3435 3431
3436 Dart_EnterScope(); 3432 Dart_EnterScope();
3437 { 3433 {
3438 Isolate* isolate = Isolate::Current(); 3434 Isolate* isolate = Isolate::Current();
3439 DARTSCOPE(isolate); 3435 DARTSCOPE(Thread::Current());
3440 3436
3441 Dart_Handle local = Api::NewHandle( 3437 Dart_Handle local = Api::NewHandle(
3442 isolate, String::New("strongly reachable", Heap::kOld)); 3438 isolate, String::New("strongly reachable", Heap::kOld));
3443 strong = Dart_NewPersistentHandle(local); 3439 strong = Dart_NewPersistentHandle(local);
3444 strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback); 3440 strong_weak = Dart_NewWeakPersistentHandle(local, NULL, 0, NopCallback);
3445 3441
3446 EXPECT(!Dart_IsNull(AsHandle(strong))); 3442 EXPECT(!Dart_IsNull(AsHandle(strong)));
3447 EXPECT_VALID(AsHandle(strong)); 3443 EXPECT_VALID(AsHandle(strong));
3448 EXPECT(!Dart_IsNull(AsHandle(strong_weak))); 3444 EXPECT(!Dart_IsNull(AsHandle(strong_weak)));
3449 EXPECT_VALID(AsHandle(strong_weak)); 3445 EXPECT_VALID(AsHandle(strong_weak));
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
3693 UNIT_TEST_CASE(LocalHandles) { 3689 UNIT_TEST_CASE(LocalHandles) {
3694 TestCase::CreateTestIsolate(); 3690 TestCase::CreateTestIsolate();
3695 Isolate* isolate = Isolate::Current(); 3691 Isolate* isolate = Isolate::Current();
3696 EXPECT(isolate != NULL); 3692 EXPECT(isolate != NULL);
3697 ApiState* state = isolate->api_state(); 3693 ApiState* state = isolate->api_state();
3698 EXPECT(state != NULL); 3694 EXPECT(state != NULL);
3699 ApiLocalScope* scope = state->top_scope(); 3695 ApiLocalScope* scope = state->top_scope();
3700 Dart_Handle handles[300]; 3696 Dart_Handle handles[300];
3701 { 3697 {
3702 StackZone zone(isolate); 3698 StackZone zone(isolate);
3703 HANDLESCOPE(isolate); 3699 HANDLESCOPE(Thread::Current());
3704 Smi& val = Smi::Handle(); 3700 Smi& val = Smi::Handle();
3705 3701
3706 // Start a new scope and allocate some local handles. 3702 // Start a new scope and allocate some local handles.
3707 Dart_EnterScope(); 3703 Dart_EnterScope();
3708 for (int i = 0; i < 100; i++) { 3704 for (int i = 0; i < 100; i++) {
3709 handles[i] = Api::NewHandle(isolate, Smi::New(i)); 3705 handles[i] = Api::NewHandle(isolate, Smi::New(i));
3710 } 3706 }
3711 EXPECT_EQ(100, state->CountLocalHandles()); 3707 EXPECT_EQ(100, state->CountLocalHandles());
3712 for (int i = 0; i < 100; i++) { 3708 for (int i = 0; i < 100; i++) {
3713 val ^= Api::UnwrapHandle(handles[i]); 3709 val ^= Api::UnwrapHandle(handles[i]);
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
4464 kNumNativeFields); 4460 kNumNativeFields);
4465 EXPECT_VALID(result); 4461 EXPECT_VALID(result);
4466 result = Dart_FinalizeLoading(false); 4462 result = Dart_FinalizeLoading(false);
4467 EXPECT_VALID(result); 4463 EXPECT_VALID(result);
4468 4464
4469 // Load up a test script in the test library. 4465 // Load up a test script in the test library.
4470 4466
4471 // Invoke a function which returns an object of type NativeFields. 4467 // Invoke a function which returns an object of type NativeFields.
4472 result = Dart_Invoke(lib, NewString("testMain"), 0, NULL); 4468 result = Dart_Invoke(lib, NewString("testMain"), 0, NULL);
4473 EXPECT_VALID(result); 4469 EXPECT_VALID(result);
4474 DARTSCOPE(Isolate::Current()); 4470 DARTSCOPE(Thread::Current());
4475 Instance& obj = Instance::Handle(); 4471 Instance& obj = Instance::Handle();
4476 obj ^= Api::UnwrapHandle(result); 4472 obj ^= Api::UnwrapHandle(result);
4477 const Class& cls = Class::Handle(obj.clazz()); 4473 const Class& cls = Class::Handle(obj.clazz());
4478 // We expect the newly created "NativeFields" object to have 4474 // We expect the newly created "NativeFields" object to have
4479 // 2 dart instance fields (fld1, fld2) and a reference to the native fields. 4475 // 2 dart instance fields (fld1, fld2) and a reference to the native fields.
4480 // Hence the size of an instance of "NativeFields" should be 4476 // Hence the size of an instance of "NativeFields" should be
4481 // (1 + 2) * kWordSize + size of object header. 4477 // (1 + 2) * kWordSize + size of object header.
4482 // We check to make sure the instance size computed by the VM matches 4478 // We check to make sure the instance size computed by the VM matches
4483 // our expectations. 4479 // our expectations.
4484 intptr_t header_size = sizeof(RawObject); 4480 intptr_t header_size = sizeof(RawObject);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
4534 Dart_Handle result; 4530 Dart_Handle result;
4535 const int kNumNativeFields = 2; 4531 const int kNumNativeFields = 2;
4536 4532
4537 // Load up a test script in the test library. 4533 // Load up a test script in the test library.
4538 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, 4534 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars,
4539 native_field_lookup); 4535 native_field_lookup);
4540 4536
4541 // Invoke a function which returns an object of type NativeFields. 4537 // Invoke a function which returns an object of type NativeFields.
4542 result = Dart_Invoke(lib, NewString("testMain"), 0, NULL); 4538 result = Dart_Invoke(lib, NewString("testMain"), 0, NULL);
4543 EXPECT_VALID(result); 4539 EXPECT_VALID(result);
4544 DARTSCOPE(Isolate::Current()); 4540 DARTSCOPE(Thread::Current());
4545 Instance& obj = Instance::Handle(); 4541 Instance& obj = Instance::Handle();
4546 obj ^= Api::UnwrapHandle(result); 4542 obj ^= Api::UnwrapHandle(result);
4547 const Class& cls = Class::Handle(obj.clazz()); 4543 const Class& cls = Class::Handle(obj.clazz());
4548 // We expect the newly created "NativeFields" object to have 4544 // We expect the newly created "NativeFields" object to have
4549 // 2 dart instance fields (fld1, fld2) and a reference to the native fields. 4545 // 2 dart instance fields (fld1, fld2) and a reference to the native fields.
4550 // Hence the size of an instance of "NativeFields" should be 4546 // Hence the size of an instance of "NativeFields" should be
4551 // (1 + 2) * kWordSize + size of object header. 4547 // (1 + 2) * kWordSize + size of object header.
4552 // We check to make sure the instance size computed by the VM matches 4548 // We check to make sure the instance size computed by the VM matches
4553 // our expectations. 4549 // our expectations.
4554 intptr_t header_size = sizeof(RawObject); 4550 intptr_t header_size = sizeof(RawObject);
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
4878 " static const int fld4 = 10;\n" 4874 " static const int fld4 = 10;\n"
4879 "}\n" 4875 "}\n"
4880 "NativeFields testMain1() {\n" 4876 "NativeFields testMain1() {\n"
4881 " NativeFields obj = new NativeFields(10, 20);\n" 4877 " NativeFields obj = new NativeFields(10, 20);\n"
4882 " return obj;\n" 4878 " return obj;\n"
4883 "}\n" 4879 "}\n"
4884 "Function testMain2() {\n" 4880 "Function testMain2() {\n"
4885 " return () {};\n" 4881 " return () {};\n"
4886 "}\n"; 4882 "}\n";
4887 Dart_Handle result; 4883 Dart_Handle result;
4888 DARTSCOPE(Isolate::Current()); 4884 DARTSCOPE(Thread::Current());
4889 4885
4890 // Create a test library and Load up a test script in it. 4886 // Create a test library and Load up a test script in it.
4891 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 4887 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
4892 4888
4893 // Invoke a function which returns an object of type NativeFields. 4889 // Invoke a function which returns an object of type NativeFields.
4894 Dart_Handle retobj = Dart_Invoke(lib, NewString("testMain1"), 0, NULL); 4890 Dart_Handle retobj = Dart_Invoke(lib, NewString("testMain1"), 0, NULL);
4895 EXPECT_VALID(retobj); 4891 EXPECT_VALID(retobj);
4896 4892
4897 // Now access and set various native instance fields of the returned object. 4893 // Now access and set various native instance fields of the returned object.
4898 // All of these tests are expected to return failure as there are no 4894 // All of these tests are expected to return failure as there are no
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
4956 " var port = new RawReceivePort();\n" 4952 " var port = new RawReceivePort();\n"
4957 " var obj = new Test(1,2);\n" 4953 " var obj = new Test(1,2);\n"
4958 " var msg = [obj, port.sendPort];\n" 4954 " var msg = [obj, port.sendPort];\n"
4959 " var snd = Isolate.spawn(echo, msg);\n" 4955 " var snd = Isolate.spawn(echo, msg);\n"
4960 " port.handler = (msg) {\n" 4956 " port.handler = (msg) {\n"
4961 " port.close();\n" 4957 " port.close();\n"
4962 " print('from worker ${msg}');\n" 4958 " print('from worker ${msg}');\n"
4963 " };\n" 4959 " };\n"
4964 "}\n"; 4960 "}\n";
4965 4961
4966 DARTSCOPE(Isolate::Current()); 4962 DARTSCOPE(Thread::Current());
4967 4963
4968 // Create a test library and Load up a test script in it. 4964 // Create a test library and Load up a test script in it.
4969 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 4965 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
4970 4966
4971 // Invoke 'main' which should spawn an isolate and try to send an 4967 // Invoke 'main' which should spawn an isolate and try to send an
4972 // object with native fields over to the spawned isolate. This 4968 // object with native fields over to the spawned isolate. This
4973 // should result in an unhandled exception which is checked. 4969 // should result in an unhandled exception which is checked.
4974 Dart_Handle retobj = Dart_Invoke(lib, NewString("main"), 0, NULL); 4970 Dart_Handle retobj = Dart_Invoke(lib, NewString("main"), 0, NULL);
4975 EXPECT(Dart_IsError(retobj)); 4971 EXPECT(Dart_IsError(retobj));
4976 } 4972 }
(...skipping 680 matching lines...) Expand 10 before | Expand all | Expand 10 after
5657 " static const int fld4 = 10;\n" 5653 " static const int fld4 = 10;\n"
5658 "}\n" 5654 "}\n"
5659 "Function testMain1() {\n" 5655 "Function testMain1() {\n"
5660 " InvokeClosure obj = new InvokeClosure(10, 20);\n" 5656 " InvokeClosure obj = new InvokeClosure(10, 20);\n"
5661 " return obj.method1(10);\n" 5657 " return obj.method1(10);\n"
5662 "}\n" 5658 "}\n"
5663 "Function testMain2() {\n" 5659 "Function testMain2() {\n"
5664 " return InvokeClosure.method2(10);\n" 5660 " return InvokeClosure.method2(10);\n"
5665 "}\n"; 5661 "}\n";
5666 Dart_Handle result; 5662 Dart_Handle result;
5667 DARTSCOPE(Isolate::Current()); 5663 DARTSCOPE(Thread::Current());
5668 5664
5669 // Create a test library and Load up a test script in it. 5665 // Create a test library and Load up a test script in it.
5670 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 5666 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
5671 5667
5672 // Invoke a function which returns a closure. 5668 // Invoke a function which returns a closure.
5673 Dart_Handle retobj = Dart_Invoke(lib, NewString("testMain1"), 0, NULL); 5669 Dart_Handle retobj = Dart_Invoke(lib, NewString("testMain1"), 0, NULL);
5674 EXPECT_VALID(retobj); 5670 EXPECT_VALID(retobj);
5675 5671
5676 EXPECT(Dart_IsClosure(retobj)); 5672 EXPECT(Dart_IsClosure(retobj));
5677 EXPECT(!Dart_IsClosure(Dart_NewInteger(101))); 5673 EXPECT(!Dart_IsClosure(Dart_NewInteger(101)));
(...skipping 2572 matching lines...) Expand 10 before | Expand all | Expand 10 after
8250 } 8246 }
8251 8247
8252 8248
8253 // Allocates an object in new space and assigns it a peer. Allows the 8249 // Allocates an object in new space and assigns it a peer. Allows the
8254 // peer referent to be garbage collected and checks that the count of 8250 // peer referent to be garbage collected and checks that the count of
8255 // peer objects is decremented by one. 8251 // peer objects is decremented by one.
8256 TEST_CASE(CollectOneNewSpacePeer) { 8252 TEST_CASE(CollectOneNewSpacePeer) {
8257 Isolate* isolate = Isolate::Current(); 8253 Isolate* isolate = Isolate::Current();
8258 Dart_EnterScope(); 8254 Dart_EnterScope();
8259 { 8255 {
8260 DARTSCOPE(isolate); 8256 DARTSCOPE(Thread::Current());
8261 Dart_Handle str = NewString("a string"); 8257 Dart_Handle str = NewString("a string");
8262 EXPECT_VALID(str); 8258 EXPECT_VALID(str);
8263 EXPECT(Dart_IsString(str)); 8259 EXPECT(Dart_IsString(str));
8264 EXPECT_EQ(0, isolate->heap()->PeerCount()); 8260 EXPECT_EQ(0, isolate->heap()->PeerCount());
8265 void* out = &out; 8261 void* out = &out;
8266 EXPECT_VALID(Dart_GetPeer(str, &out)); 8262 EXPECT_VALID(Dart_GetPeer(str, &out));
8267 EXPECT(out == NULL); 8263 EXPECT(out == NULL);
8268 int peer = 1234; 8264 int peer = 1234;
8269 EXPECT_VALID(Dart_SetPeer(str, &peer)); 8265 EXPECT_VALID(Dart_SetPeer(str, &peer));
8270 EXPECT_EQ(1, isolate->heap()->PeerCount()); 8266 EXPECT_EQ(1, isolate->heap()->PeerCount());
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
8323 } 8319 }
8324 8320
8325 8321
8326 // Allocates two objects in new space and assigns them a peer. Allow 8322 // Allocates two objects in new space and assigns them a peer. Allow
8327 // the peer referents to be garbage collected and check that the count 8323 // the peer referents to be garbage collected and check that the count
8328 // of peer objects is decremented by two. 8324 // of peer objects is decremented by two.
8329 TEST_CASE(CollectTwoNewSpacePeers) { 8325 TEST_CASE(CollectTwoNewSpacePeers) {
8330 Isolate* isolate = Isolate::Current(); 8326 Isolate* isolate = Isolate::Current();
8331 Dart_EnterScope(); 8327 Dart_EnterScope();
8332 { 8328 {
8333 DARTSCOPE(isolate); 8329 DARTSCOPE(Thread::Current());
8334 Dart_Handle s1 = NewString("s1"); 8330 Dart_Handle s1 = NewString("s1");
8335 EXPECT_VALID(s1); 8331 EXPECT_VALID(s1);
8336 EXPECT(Dart_IsString(s1)); 8332 EXPECT(Dart_IsString(s1));
8337 EXPECT_EQ(0, isolate->heap()->PeerCount()); 8333 EXPECT_EQ(0, isolate->heap()->PeerCount());
8338 void* o1 = &o1; 8334 void* o1 = &o1;
8339 EXPECT(Dart_GetPeer(s1, &o1)); 8335 EXPECT(Dart_GetPeer(s1, &o1));
8340 EXPECT(o1 == NULL); 8336 EXPECT(o1 == NULL);
8341 int p1 = 1234; 8337 int p1 = 1234;
8342 EXPECT_VALID(Dart_SetPeer(s1, &p1)); 8338 EXPECT_VALID(Dart_SetPeer(s1, &p1));
8343 EXPECT_EQ(1, isolate->heap()->PeerCount()); 8339 EXPECT_EQ(1, isolate->heap()->PeerCount());
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
8407 EXPECT(out == NULL); 8403 EXPECT(out == NULL);
8408 int peer = 1234; 8404 int peer = 1234;
8409 EXPECT_VALID(Dart_SetPeer(str, &peer)); 8405 EXPECT_VALID(Dart_SetPeer(str, &peer));
8410 out = &out; 8406 out = &out;
8411 EXPECT(Dart_GetPeer(str, &out)); 8407 EXPECT(Dart_GetPeer(str, &out));
8412 EXPECT(out == reinterpret_cast<void*>(&peer)); 8408 EXPECT(out == reinterpret_cast<void*>(&peer));
8413 EXPECT_EQ(1, isolate->heap()->PeerCount()); 8409 EXPECT_EQ(1, isolate->heap()->PeerCount());
8414 isolate->heap()->CollectGarbage(Heap::kNew); 8410 isolate->heap()->CollectGarbage(Heap::kNew);
8415 isolate->heap()->CollectGarbage(Heap::kNew); 8411 isolate->heap()->CollectGarbage(Heap::kNew);
8416 { 8412 {
8417 DARTSCOPE(isolate); 8413 DARTSCOPE(Thread::Current());
8418 String& handle = String::Handle(); 8414 String& handle = String::Handle();
8419 handle ^= Api::UnwrapHandle(str); 8415 handle ^= Api::UnwrapHandle(str);
8420 EXPECT(handle.IsOld()); 8416 EXPECT(handle.IsOld());
8421 } 8417 }
8422 EXPECT_VALID(Dart_GetPeer(str, &out)); 8418 EXPECT_VALID(Dart_GetPeer(str, &out));
8423 EXPECT(out == reinterpret_cast<void*>(&peer)); 8419 EXPECT(out == reinterpret_cast<void*>(&peer));
8424 EXPECT_EQ(1, isolate->heap()->PeerCount()); 8420 EXPECT_EQ(1, isolate->heap()->PeerCount());
8425 EXPECT_VALID(Dart_SetPeer(str, NULL)); 8421 EXPECT_VALID(Dart_SetPeer(str, NULL));
8426 out = &out; 8422 out = &out;
8427 EXPECT_VALID(Dart_GetPeer(str, &out)); 8423 EXPECT_VALID(Dart_GetPeer(str, &out));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
8460 } 8456 }
8461 8457
8462 8458
8463 // Allocates an object in old space and assigns it a peer. Allow the 8459 // Allocates an object in old space and assigns it a peer. Allow the
8464 // peer referent to be garbage collected and check that the count of 8460 // peer referent to be garbage collected and check that the count of
8465 // peer objects is decremented by one. 8461 // peer objects is decremented by one.
8466 TEST_CASE(CollectOneOldSpacePeer) { 8462 TEST_CASE(CollectOneOldSpacePeer) {
8467 Isolate* isolate = Isolate::Current(); 8463 Isolate* isolate = Isolate::Current();
8468 Dart_EnterScope(); 8464 Dart_EnterScope();
8469 { 8465 {
8470 DARTSCOPE(isolate); 8466 DARTSCOPE(Thread::Current());
8471 Dart_Handle str = Api::NewHandle(isolate, String::New("str", Heap::kOld)); 8467 Dart_Handle str = Api::NewHandle(isolate, String::New("str", Heap::kOld));
8472 EXPECT_VALID(str); 8468 EXPECT_VALID(str);
8473 EXPECT(Dart_IsString(str)); 8469 EXPECT(Dart_IsString(str));
8474 EXPECT_EQ(0, isolate->heap()->PeerCount()); 8470 EXPECT_EQ(0, isolate->heap()->PeerCount());
8475 void* out = &out; 8471 void* out = &out;
8476 EXPECT(Dart_GetPeer(str, &out)); 8472 EXPECT(Dart_GetPeer(str, &out));
8477 EXPECT(out == NULL); 8473 EXPECT(out == NULL);
8478 int peer = 1234; 8474 int peer = 1234;
8479 EXPECT_VALID(Dart_SetPeer(str, &peer)); 8475 EXPECT_VALID(Dart_SetPeer(str, &peer));
8480 EXPECT_EQ(1, isolate->heap()->PeerCount()); 8476 EXPECT_EQ(1, isolate->heap()->PeerCount());
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
8536 } 8532 }
8537 8533
8538 8534
8539 // Allocates two objects in old space and assigns them a peer. Allows 8535 // Allocates two objects in old space and assigns them a peer. Allows
8540 // the peer referents to be garbage collected and checks that the 8536 // the peer referents to be garbage collected and checks that the
8541 // count of peer objects is decremented by two. 8537 // count of peer objects is decremented by two.
8542 TEST_CASE(CollectTwoOldSpacePeers) { 8538 TEST_CASE(CollectTwoOldSpacePeers) {
8543 Isolate* isolate = Isolate::Current(); 8539 Isolate* isolate = Isolate::Current();
8544 Dart_EnterScope(); 8540 Dart_EnterScope();
8545 { 8541 {
8546 DARTSCOPE(isolate); 8542 DARTSCOPE(Thread::Current());
8547 Dart_Handle s1 = Api::NewHandle(isolate, String::New("s1", Heap::kOld)); 8543 Dart_Handle s1 = Api::NewHandle(isolate, String::New("s1", Heap::kOld));
8548 EXPECT_VALID(s1); 8544 EXPECT_VALID(s1);
8549 EXPECT(Dart_IsString(s1)); 8545 EXPECT(Dart_IsString(s1));
8550 EXPECT_EQ(0, isolate->heap()->PeerCount()); 8546 EXPECT_EQ(0, isolate->heap()->PeerCount());
8551 void* o1 = &o1; 8547 void* o1 = &o1;
8552 EXPECT(Dart_GetPeer(s1, &o1)); 8548 EXPECT(Dart_GetPeer(s1, &o1));
8553 EXPECT(o1 == NULL); 8549 EXPECT(o1 == NULL);
8554 int p1 = 1234; 8550 int p1 = 1234;
8555 EXPECT_VALID(Dart_SetPeer(s1, &p1)); 8551 EXPECT_VALID(Dart_SetPeer(s1, &p1));
8556 EXPECT_EQ(1, isolate->heap()->PeerCount()); 8552 EXPECT_EQ(1, isolate->heap()->PeerCount());
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after
9415 // Heartbeat test. 9411 // Heartbeat test.
9416 EXPECT_SUBSTRING("\"cat\":\"Compiler\"", buffer); 9412 EXPECT_SUBSTRING("\"cat\":\"Compiler\"", buffer);
9417 EXPECT_SUBSTRING("\"name\":\"CompileFunction\"", buffer); 9413 EXPECT_SUBSTRING("\"name\":\"CompileFunction\"", buffer);
9418 EXPECT_SUBSTRING("\"function\":\"::_main\"", buffer); 9414 EXPECT_SUBSTRING("\"function\":\"::_main\"", buffer);
9419 9415
9420 // Free buffer allocated by AppendStreamConsumer 9416 // Free buffer allocated by AppendStreamConsumer
9421 free(data.buffer); 9417 free(data.buffer);
9422 } 9418 }
9423 9419
9424 } // namespace dart 9420 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698