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

Side by Side Diff: third_party/WebKit/Source/platform/heap/HeapTest.cpp

Issue 2688893002: Migrate WTF::HashSet::add() to ::insert() [continued] (Closed)
Patch Set: rebase, fix one platform-specific reference Created 3 years, 10 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 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 2404 matching lines...) Expand 10 before | Expand all | Expand 10 after
2415 memberMember2->insert(three, four); 2415 memberMember2->insert(three, four);
2416 memberMember2->insert(four, one); 2416 memberMember2->insert(four, one);
2417 primitiveMember->insert(1, two); 2417 primitiveMember->insert(1, two);
2418 primitiveMember->insert(2, three); 2418 primitiveMember->insert(2, three);
2419 primitiveMember->insert(3, four); 2419 primitiveMember->insert(3, four);
2420 primitiveMember->insert(4, one); 2420 primitiveMember->insert(4, one);
2421 memberPrimitive->insert(one, 2); 2421 memberPrimitive->insert(one, 2);
2422 memberPrimitive->insert(two, 3); 2422 memberPrimitive->insert(two, 3);
2423 memberPrimitive->insert(three, 4); 2423 memberPrimitive->insert(three, 4);
2424 memberPrimitive->insert(four, 1); 2424 memberPrimitive->insert(four, 1);
2425 set2->add(one); 2425 set2->insert(one);
2426 set2->add(two); 2426 set2->insert(two);
2427 set2->add(three); 2427 set2->insert(three);
2428 set2->add(four); 2428 set2->insert(four);
2429 set->add(oneB); 2429 set->insert(oneB);
2430 set3->add(oneB); 2430 set3->add(oneB);
2431 set3->add(oneB); 2431 set3->add(oneB);
2432 vector->push_back(oneB); 2432 vector->push_back(oneB);
2433 deque->append(oneB); 2433 deque->append(oneB);
2434 vector2->push_back(threeB); 2434 vector2->push_back(threeB);
2435 vector2->push_back(fourB); 2435 vector2->push_back(fourB);
2436 deque2->append(threeE); 2436 deque2->append(threeE);
2437 deque2->append(fourE); 2437 deque2->append(fourE);
2438 vectorWU->push_back(PairWrappedUnwrapped(&*oneC, 42)); 2438 vectorWU->push_back(PairWrappedUnwrapped(&*oneC, 42));
2439 dequeWU->append(PairWrappedUnwrapped(&*oneE, 42)); 2439 dequeWU->append(PairWrappedUnwrapped(&*oneE, 42));
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
2776 IntWrapper* oneRaw = IntWrapper::create(1); 2776 IntWrapper* oneRaw = IntWrapper::create(1);
2777 Persistent<IntWrapper> one(oneRaw); 2777 Persistent<IntWrapper> one(oneRaw);
2778 Persistent<IntWrapper> one2(oneRaw); 2778 Persistent<IntWrapper> one2(oneRaw);
2779 Persistent<IntWrapper> two(IntWrapper::create(2)); 2779 Persistent<IntWrapper> two(IntWrapper::create(2));
2780 Persistent<IntWrapper> three(IntWrapper::create(3)); 2780 Persistent<IntWrapper> three(IntWrapper::create(3));
2781 Persistent<IntWrapper> four(IntWrapper::create(4)); 2781 Persistent<IntWrapper> four(IntWrapper::create(4));
2782 Persistent<IntWrapper> five(IntWrapper::create(5)); 2782 Persistent<IntWrapper> five(IntWrapper::create(5));
2783 Persistent<IntWrapper> six(IntWrapper::create(6)); 2783 Persistent<IntWrapper> six(IntWrapper::create(6));
2784 { 2784 {
2785 PersistentSet set; 2785 PersistentSet set;
2786 set.add(one); 2786 set.insert(one);
2787 set.add(two); 2787 set.insert(two);
2788 conservativelyCollectGarbage(); 2788 conservativelyCollectGarbage();
2789 EXPECT_TRUE(set.contains(one)); 2789 EXPECT_TRUE(set.contains(one));
2790 EXPECT_TRUE(set.contains(one2)); 2790 EXPECT_TRUE(set.contains(one2));
2791 EXPECT_TRUE(set.contains(two)); 2791 EXPECT_TRUE(set.contains(two));
2792 2792
2793 set.add(three); 2793 set.insert(three);
2794 set.add(four); 2794 set.insert(four);
2795 conservativelyCollectGarbage(); 2795 conservativelyCollectGarbage();
2796 EXPECT_TRUE(set.contains(one)); 2796 EXPECT_TRUE(set.contains(one));
2797 EXPECT_TRUE(set.contains(two)); 2797 EXPECT_TRUE(set.contains(two));
2798 EXPECT_TRUE(set.contains(three)); 2798 EXPECT_TRUE(set.contains(three));
2799 EXPECT_TRUE(set.contains(four)); 2799 EXPECT_TRUE(set.contains(four));
2800 2800
2801 set.clear(); 2801 set.clear();
2802 conservativelyCollectGarbage(); 2802 conservativelyCollectGarbage();
2803 EXPECT_FALSE(set.contains(one)); 2803 EXPECT_FALSE(set.contains(one));
2804 EXPECT_FALSE(set.contains(two)); 2804 EXPECT_FALSE(set.contains(two));
2805 EXPECT_FALSE(set.contains(three)); 2805 EXPECT_FALSE(set.contains(three));
2806 EXPECT_FALSE(set.contains(four)); 2806 EXPECT_FALSE(set.contains(four));
2807 } 2807 }
2808 { 2808 {
2809 PersistentSet set1; 2809 PersistentSet set1;
2810 PersistentSet set2; 2810 PersistentSet set2;
2811 2811
2812 set1.add(one); 2812 set1.insert(one);
2813 set2.add(two); 2813 set2.insert(two);
2814 set1.swap(set2); 2814 set1.swap(set2);
2815 conservativelyCollectGarbage(); 2815 conservativelyCollectGarbage();
2816 EXPECT_TRUE(set1.contains(two)); 2816 EXPECT_TRUE(set1.contains(two));
2817 EXPECT_TRUE(set2.contains(one)); 2817 EXPECT_TRUE(set2.contains(one));
2818 EXPECT_TRUE(set2.contains(one2)); 2818 EXPECT_TRUE(set2.contains(one2));
2819 } 2819 }
2820 } 2820 }
2821 2821
2822 TEST(HeapTest, CrossThreadPersistentSet) { 2822 TEST(HeapTest, CrossThreadPersistentSet) {
2823 IntWrapper::s_destructorCalls = 0; 2823 IntWrapper::s_destructorCalls = 0;
2824 2824
2825 typedef HashSet<CrossThreadPersistent<IntWrapper>> CrossThreadPersistentSet; 2825 typedef HashSet<CrossThreadPersistent<IntWrapper>> CrossThreadPersistentSet;
2826 2826
2827 IntWrapper* oneRaw = IntWrapper::create(1); 2827 IntWrapper* oneRaw = IntWrapper::create(1);
2828 CrossThreadPersistent<IntWrapper> one(oneRaw); 2828 CrossThreadPersistent<IntWrapper> one(oneRaw);
2829 CrossThreadPersistent<IntWrapper> one2(oneRaw); 2829 CrossThreadPersistent<IntWrapper> one2(oneRaw);
2830 CrossThreadPersistent<IntWrapper> two(IntWrapper::create(2)); 2830 CrossThreadPersistent<IntWrapper> two(IntWrapper::create(2));
2831 CrossThreadPersistent<IntWrapper> three(IntWrapper::create(3)); 2831 CrossThreadPersistent<IntWrapper> three(IntWrapper::create(3));
2832 CrossThreadPersistent<IntWrapper> four(IntWrapper::create(4)); 2832 CrossThreadPersistent<IntWrapper> four(IntWrapper::create(4));
2833 CrossThreadPersistent<IntWrapper> five(IntWrapper::create(5)); 2833 CrossThreadPersistent<IntWrapper> five(IntWrapper::create(5));
2834 CrossThreadPersistent<IntWrapper> six(IntWrapper::create(6)); 2834 CrossThreadPersistent<IntWrapper> six(IntWrapper::create(6));
2835 { 2835 {
2836 CrossThreadPersistentSet set; 2836 CrossThreadPersistentSet set;
2837 set.add(one); 2837 set.insert(one);
2838 set.add(two); 2838 set.insert(two);
2839 conservativelyCollectGarbage(); 2839 conservativelyCollectGarbage();
2840 EXPECT_TRUE(set.contains(one)); 2840 EXPECT_TRUE(set.contains(one));
2841 EXPECT_TRUE(set.contains(one2)); 2841 EXPECT_TRUE(set.contains(one2));
2842 EXPECT_TRUE(set.contains(two)); 2842 EXPECT_TRUE(set.contains(two));
2843 2843
2844 set.add(three); 2844 set.insert(three);
2845 set.add(four); 2845 set.insert(four);
2846 conservativelyCollectGarbage(); 2846 conservativelyCollectGarbage();
2847 EXPECT_TRUE(set.contains(one)); 2847 EXPECT_TRUE(set.contains(one));
2848 EXPECT_TRUE(set.contains(two)); 2848 EXPECT_TRUE(set.contains(two));
2849 EXPECT_TRUE(set.contains(three)); 2849 EXPECT_TRUE(set.contains(three));
2850 EXPECT_TRUE(set.contains(four)); 2850 EXPECT_TRUE(set.contains(four));
2851 2851
2852 set.clear(); 2852 set.clear();
2853 conservativelyCollectGarbage(); 2853 conservativelyCollectGarbage();
2854 EXPECT_FALSE(set.contains(one)); 2854 EXPECT_FALSE(set.contains(one));
2855 EXPECT_FALSE(set.contains(two)); 2855 EXPECT_FALSE(set.contains(two));
2856 EXPECT_FALSE(set.contains(three)); 2856 EXPECT_FALSE(set.contains(three));
2857 EXPECT_FALSE(set.contains(four)); 2857 EXPECT_FALSE(set.contains(four));
2858 } 2858 }
2859 { 2859 {
2860 CrossThreadPersistentSet set1; 2860 CrossThreadPersistentSet set1;
2861 CrossThreadPersistentSet set2; 2861 CrossThreadPersistentSet set2;
2862 2862
2863 set1.add(one); 2863 set1.insert(one);
2864 set2.add(two); 2864 set2.insert(two);
2865 set1.swap(set2); 2865 set1.swap(set2);
2866 conservativelyCollectGarbage(); 2866 conservativelyCollectGarbage();
2867 EXPECT_TRUE(set1.contains(two)); 2867 EXPECT_TRUE(set1.contains(two));
2868 EXPECT_TRUE(set2.contains(one)); 2868 EXPECT_TRUE(set2.contains(one));
2869 EXPECT_TRUE(set2.contains(one2)); 2869 EXPECT_TRUE(set2.contains(one2));
2870 } 2870 }
2871 } 2871 }
2872 2872
2873 class NonTrivialObject final { 2873 class NonTrivialObject final {
2874 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); 2874 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
2944 Persistent<IntWrapper> two = IntWrapper::create(2); 2944 Persistent<IntWrapper> two = IntWrapper::create(2);
2945 2945
2946 keepNumbersAlive.push_back(IntWrapper::create(103)); 2946 keepNumbersAlive.push_back(IntWrapper::create(103));
2947 keepNumbersAlive.push_back(IntWrapper::create(10)); 2947 keepNumbersAlive.push_back(IntWrapper::create(10));
2948 2948
2949 { 2949 {
2950 weakStrong->insert(IntWrapper::create(1), two); 2950 weakStrong->insert(IntWrapper::create(1), two);
2951 strongWeak->insert(two, IntWrapper::create(1)); 2951 strongWeak->insert(two, IntWrapper::create(1));
2952 weakWeak->insert(two, IntWrapper::create(42)); 2952 weakWeak->insert(two, IntWrapper::create(42));
2953 weakWeak->insert(IntWrapper::create(42), two); 2953 weakWeak->insert(IntWrapper::create(42), two);
2954 weakSet->add(IntWrapper::create(0)); 2954 weakSet->insert(IntWrapper::create(0));
2955 weakSet->add(two); 2955 weakSet->insert(two);
2956 weakSet->add(keepNumbersAlive[0]); 2956 weakSet->insert(keepNumbersAlive[0]);
2957 weakSet->add(keepNumbersAlive[1]); 2957 weakSet->insert(keepNumbersAlive[1]);
2958 weakCountedSet->add(IntWrapper::create(0)); 2958 weakCountedSet->add(IntWrapper::create(0));
2959 weakCountedSet->add(two); 2959 weakCountedSet->add(two);
2960 weakCountedSet->add(two); 2960 weakCountedSet->add(two);
2961 weakCountedSet->add(two); 2961 weakCountedSet->add(two);
2962 weakCountedSet->add(keepNumbersAlive[0]); 2962 weakCountedSet->add(keepNumbersAlive[0]);
2963 weakCountedSet->add(keepNumbersAlive[1]); 2963 weakCountedSet->add(keepNumbersAlive[1]);
2964 EXPECT_EQ(1u, weakStrong->size()); 2964 EXPECT_EQ(1u, weakStrong->size());
2965 EXPECT_EQ(1u, strongWeak->size()); 2965 EXPECT_EQ(1u, strongWeak->size());
2966 EXPECT_EQ(2u, weakWeak->size()); 2966 EXPECT_EQ(2u, weakWeak->size());
2967 EXPECT_EQ(4u, weakSet->size()); 2967 EXPECT_EQ(4u, weakSet->size());
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
3294 3294
3295 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive; 3295 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive;
3296 3296
3297 Persistent<WSSet> weakStrong = new WSSet(); 3297 Persistent<WSSet> weakStrong = new WSSet();
3298 Persistent<SWSet> strongWeak = new SWSet(); 3298 Persistent<SWSet> strongWeak = new SWSet();
3299 Persistent<WUSet> weakUnwrapped = new WUSet(); 3299 Persistent<WUSet> weakUnwrapped = new WUSet();
3300 Persistent<UWSet> unwrappedWeak = new UWSet(); 3300 Persistent<UWSet> unwrappedWeak = new UWSet();
3301 3301
3302 Persistent<IntWrapper> two = IntWrapper::create(2); 3302 Persistent<IntWrapper> two = IntWrapper::create(2);
3303 3303
3304 weakStrong->add(PairWeakStrong(IntWrapper::create(1), &*two)); 3304 weakStrong->insert(PairWeakStrong(IntWrapper::create(1), &*two));
3305 weakStrong->add(PairWeakStrong(&*two, &*two)); 3305 weakStrong->insert(PairWeakStrong(&*two, &*two));
3306 strongWeak->add(PairStrongWeak(&*two, IntWrapper::create(1))); 3306 strongWeak->insert(PairStrongWeak(&*two, IntWrapper::create(1)));
3307 strongWeak->add(PairStrongWeak(&*two, &*two)); 3307 strongWeak->insert(PairStrongWeak(&*two, &*two));
3308 weakUnwrapped->add(PairWeakUnwrapped(IntWrapper::create(1), 2)); 3308 weakUnwrapped->insert(PairWeakUnwrapped(IntWrapper::create(1), 2));
3309 weakUnwrapped->add(PairWeakUnwrapped(&*two, 2)); 3309 weakUnwrapped->insert(PairWeakUnwrapped(&*two, 2));
3310 unwrappedWeak->add(PairUnwrappedWeak(2, IntWrapper::create(1))); 3310 unwrappedWeak->insert(PairUnwrappedWeak(2, IntWrapper::create(1)));
3311 unwrappedWeak->add(PairUnwrappedWeak(2, &*two)); 3311 unwrappedWeak->insert(PairUnwrappedWeak(2, &*two));
3312 3312
3313 checkPairSets<WSSet, SWSet, WUSet, UWSet>( 3313 checkPairSets<WSSet, SWSet, WUSet, UWSet>(
3314 weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, true, two); 3314 weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, true, two);
3315 3315
3316 preciselyCollectGarbage(); 3316 preciselyCollectGarbage();
3317 checkPairSets<WSSet, SWSet, WUSet, UWSet>( 3317 checkPairSets<WSSet, SWSet, WUSet, UWSet>(
3318 weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, false, two); 3318 weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, false, two);
3319 } 3319 }
3320 3320
3321 TEST(HeapTest, HeapWeakPairs) { 3321 TEST(HeapTest, HeapWeakPairs) {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
3389 3389
3390 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive; 3390 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive;
3391 for (int i = 0; i < 128; i += 2) { 3391 for (int i = 0; i < 128; i += 2) {
3392 IntWrapper* wrapped = IntWrapper::create(i); 3392 IntWrapper* wrapped = IntWrapper::create(i);
3393 IntWrapper* wrapped2 = IntWrapper::create(i + 1); 3393 IntWrapper* wrapped2 = IntWrapper::create(i + 1);
3394 keepNumbersAlive.push_back(wrapped); 3394 keepNumbersAlive.push_back(wrapped);
3395 keepNumbersAlive.push_back(wrapped2); 3395 keepNumbersAlive.push_back(wrapped2);
3396 weakStrong->insert(wrapped, wrapped2); 3396 weakStrong->insert(wrapped, wrapped2);
3397 strongWeak->insert(wrapped2, wrapped); 3397 strongWeak->insert(wrapped2, wrapped);
3398 weakWeak->insert(wrapped, wrapped2); 3398 weakWeak->insert(wrapped, wrapped2);
3399 weakSet->add(wrapped); 3399 weakSet->insert(wrapped);
3400 weakOrderedSet->add(wrapped); 3400 weakOrderedSet->add(wrapped);
3401 } 3401 }
3402 3402
3403 EXPECT_EQ(64u, weakStrong->size()); 3403 EXPECT_EQ(64u, weakStrong->size());
3404 EXPECT_EQ(64u, strongWeak->size()); 3404 EXPECT_EQ(64u, strongWeak->size());
3405 EXPECT_EQ(64u, weakWeak->size()); 3405 EXPECT_EQ(64u, weakWeak->size());
3406 EXPECT_EQ(64u, weakSet->size()); 3406 EXPECT_EQ(64u, weakSet->size());
3407 EXPECT_EQ(64u, weakOrderedSet->size()); 3407 EXPECT_EQ(64u, weakOrderedSet->size());
3408 3408
3409 // Collect garbage. This should change nothing since we are keeping 3409 // Collect garbage. This should change nothing since we are keeping
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
3506 count++; 3506 count++;
3507 } 3507 }
3508 } 3508 }
3509 if (addAfterwards) { 3509 if (addAfterwards) {
3510 for (int i = 1000; i < 1100; i++) { 3510 for (int i = 1000; i < 1100; i++) {
3511 IntWrapper* wrapped = IntWrapper::create(i); 3511 IntWrapper* wrapped = IntWrapper::create(i);
3512 keepNumbersAlive.push_back(wrapped); 3512 keepNumbersAlive.push_back(wrapped);
3513 weakStrong->insert(wrapped, wrapped); 3513 weakStrong->insert(wrapped, wrapped);
3514 strongWeak->insert(wrapped, wrapped); 3514 strongWeak->insert(wrapped, wrapped);
3515 weakWeak->insert(wrapped, wrapped); 3515 weakWeak->insert(wrapped, wrapped);
3516 weakSet->add(wrapped); 3516 weakSet->insert(wrapped);
3517 weakOrderedSet->add(wrapped); 3517 weakOrderedSet->add(wrapped);
3518 } 3518 }
3519 } 3519 }
3520 if (collectionNumber == weakStrongIndex) 3520 if (collectionNumber == weakStrongIndex)
3521 EXPECT_EQ(count + added, weakStrong->size()); 3521 EXPECT_EQ(count + added, weakStrong->size());
3522 else if (collectionNumber == strongWeakIndex) 3522 else if (collectionNumber == strongWeakIndex)
3523 EXPECT_EQ(count + added, strongWeak->size()); 3523 EXPECT_EQ(count + added, strongWeak->size());
3524 else if (collectionNumber == weakWeakIndex) 3524 else if (collectionNumber == weakWeakIndex)
3525 EXPECT_EQ(count + added, weakWeak->size()); 3525 EXPECT_EQ(count + added, weakWeak->size());
3526 else if (collectionNumber == weakSetIndex) 3526 else if (collectionNumber == weakSetIndex)
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
3860 3860
3861 pDeque.append(seven); 3861 pDeque.append(seven);
3862 pDeque.append(two); 3862 pDeque.append(two);
3863 3863
3864 Vec* vec = new Vec(); 3864 Vec* vec = new Vec();
3865 vec->swap(pVec); 3865 vec->swap(pVec);
3866 3866
3867 pVec.push_back(two); 3867 pVec.push_back(two);
3868 pVec.push_back(three); 3868 pVec.push_back(three);
3869 3869
3870 pSet.add(four); 3870 pSet.insert(four);
3871 pListSet.add(eight); 3871 pListSet.add(eight);
3872 pLinkedSet.add(nine); 3872 pLinkedSet.add(nine);
3873 pMap.insert(five, six); 3873 pMap.insert(five, six);
3874 wpMap.insert(ten, eleven); 3874 wpMap.insert(ten, eleven);
3875 3875
3876 // Collect |vec| and |one|. 3876 // Collect |vec| and |one|.
3877 vec = 0; 3877 vec = 0;
3878 preciselyCollectGarbage(); 3878 preciselyCollectGarbage();
3879 EXPECT_EQ(1, IntWrapper::s_destructorCalls); 3879 EXPECT_EQ(1, IntWrapper::s_destructorCalls);
3880 3880
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
3967 EXPECT_EQ(0, UseMixin::s_traceCount); 3967 EXPECT_EQ(0, UseMixin::s_traceCount);
3968 preciselyCollectGarbage(); 3968 preciselyCollectGarbage();
3969 EXPECT_EQ(1, UseMixin::s_traceCount); 3969 EXPECT_EQ(1, UseMixin::s_traceCount);
3970 3970
3971 Persistent<Mixin> mixin = usemixin; 3971 Persistent<Mixin> mixin = usemixin;
3972 usemixin = nullptr; 3972 usemixin = nullptr;
3973 preciselyCollectGarbage(); 3973 preciselyCollectGarbage();
3974 EXPECT_EQ(2, UseMixin::s_traceCount); 3974 EXPECT_EQ(2, UseMixin::s_traceCount);
3975 3975
3976 PersistentHeapHashSet<WeakMember<Mixin>> weakMap; 3976 PersistentHeapHashSet<WeakMember<Mixin>> weakMap;
3977 weakMap.add(UseMixin::create()); 3977 weakMap.insert(UseMixin::create());
3978 preciselyCollectGarbage(); 3978 preciselyCollectGarbage();
3979 EXPECT_EQ(0u, weakMap.size()); 3979 EXPECT_EQ(0u, weakMap.size());
3980 } 3980 }
3981 3981
3982 TEST(HeapTest, CollectionNesting2) { 3982 TEST(HeapTest, CollectionNesting2) {
3983 clearOutOldGarbage(); 3983 clearOutOldGarbage();
3984 void* key = &IntWrapper::s_destructorCalls; 3984 void* key = &IntWrapper::s_destructorCalls;
3985 IntWrapper::s_destructorCalls = 0; 3985 IntWrapper::s_destructorCalls = 0;
3986 typedef HeapHashSet<Member<IntWrapper>> IntSet; 3986 typedef HeapHashSet<Member<IntWrapper>> IntSet;
3987 HeapHashMap<void*, IntSet>* map = new HeapHashMap<void*, IntSet>(); 3987 HeapHashMap<void*, IntSet>* map = new HeapHashMap<void*, IntSet>();
3988 3988
3989 map->insert(key, IntSet()); 3989 map->insert(key, IntSet());
3990 3990
3991 HeapHashMap<void*, IntSet>::iterator it = map->find(key); 3991 HeapHashMap<void*, IntSet>::iterator it = map->find(key);
3992 EXPECT_EQ(0u, map->get(key).size()); 3992 EXPECT_EQ(0u, map->get(key).size());
3993 3993
3994 it->value.add(IntWrapper::create(42)); 3994 it->value.insert(IntWrapper::create(42));
3995 EXPECT_EQ(1u, map->get(key).size()); 3995 EXPECT_EQ(1u, map->get(key).size());
3996 3996
3997 Persistent<HeapHashMap<void*, IntSet>> keepAlive(map); 3997 Persistent<HeapHashMap<void*, IntSet>> keepAlive(map);
3998 preciselyCollectGarbage(); 3998 preciselyCollectGarbage();
3999 EXPECT_EQ(1u, map->get(key).size()); 3999 EXPECT_EQ(1u, map->get(key).size());
4000 EXPECT_EQ(0, IntWrapper::s_destructorCalls); 4000 EXPECT_EQ(0, IntWrapper::s_destructorCalls);
4001 } 4001 }
4002 4002
4003 TEST(HeapTest, CollectionNesting3) { 4003 TEST(HeapTest, CollectionNesting3) {
4004 clearOutOldGarbage(); 4004 clearOutOldGarbage();
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
4630 } 4630 }
4631 4631
4632 template <typename Set> 4632 template <typename Set>
4633 void setWithCustomWeaknessHandling() { 4633 void setWithCustomWeaknessHandling() {
4634 typedef typename Set::iterator Iterator; 4634 typedef typename Set::iterator Iterator;
4635 Persistent<IntWrapper> livingInt(IntWrapper::create(42)); 4635 Persistent<IntWrapper> livingInt(IntWrapper::create(42));
4636 Persistent<Set> set1(new Set()); 4636 Persistent<Set> set1(new Set());
4637 { 4637 {
4638 Set set2; 4638 Set set2;
4639 Set* set3 = new Set(); 4639 Set* set3 = new Set();
4640 set2.add( 4640 set2.insert(
4641 PairWithWeakHandling(IntWrapper::create(0), IntWrapper::create(1))); 4641 PairWithWeakHandling(IntWrapper::create(0), IntWrapper::create(1)));
4642 set3->add( 4642 set3->insert(
4643 PairWithWeakHandling(IntWrapper::create(2), IntWrapper::create(3))); 4643 PairWithWeakHandling(IntWrapper::create(2), IntWrapper::create(3)));
4644 set1->add( 4644 set1->insert(
4645 PairWithWeakHandling(IntWrapper::create(4), IntWrapper::create(5))); 4645 PairWithWeakHandling(IntWrapper::create(4), IntWrapper::create(5)));
4646 conservativelyCollectGarbage(); 4646 conservativelyCollectGarbage();
4647 // The first set is pointed to from a persistent, so it's referenced, but 4647 // The first set is pointed to from a persistent, so it's referenced, but
4648 // the weak processing may have taken place. 4648 // the weak processing may have taken place.
4649 if (set1->size()) { 4649 if (set1->size()) {
4650 Iterator i1 = set1->begin(); 4650 Iterator i1 = set1->begin();
4651 EXPECT_EQ(4, i1->first->value()); 4651 EXPECT_EQ(4, i1->first->value());
4652 EXPECT_EQ(5, i1->second->value()); 4652 EXPECT_EQ(5, i1->second->value());
4653 } 4653 }
4654 // The second set is on-stack, so its backing store must be referenced from 4654 // The second set is on-stack, so its backing store must be referenced from
4655 // the stack. That makes the weak references strong. 4655 // the stack. That makes the weak references strong.
4656 Iterator i2 = set2.begin(); 4656 Iterator i2 = set2.begin();
4657 EXPECT_EQ(0, i2->first->value()); 4657 EXPECT_EQ(0, i2->first->value());
4658 EXPECT_EQ(1, i2->second->value()); 4658 EXPECT_EQ(1, i2->second->value());
4659 // The third set is pointed to from the stack, so it's referenced, but the 4659 // The third set is pointed to from the stack, so it's referenced, but the
4660 // weak processing may have taken place. 4660 // weak processing may have taken place.
4661 if (set3->size()) { 4661 if (set3->size()) {
4662 Iterator i3 = set3->begin(); 4662 Iterator i3 = set3->begin();
4663 EXPECT_EQ(2, i3->first->value()); 4663 EXPECT_EQ(2, i3->first->value());
4664 EXPECT_EQ(3, i3->second->value()); 4664 EXPECT_EQ(3, i3->second->value());
4665 } 4665 }
4666 } 4666 }
4667 preciselyCollectGarbage(); 4667 preciselyCollectGarbage();
4668 EXPECT_EQ(0u, set1->size()); 4668 EXPECT_EQ(0u, set1->size());
4669 set1->add(PairWithWeakHandling(IntWrapper::create(103), livingInt)); 4669 set1->insert(PairWithWeakHandling(IntWrapper::create(103), livingInt));
4670 // This one gets zapped at GC time because nothing holds the 103 alive. 4670 // This one gets zapped at GC time because nothing holds the 103 alive.
4671 set1->add(PairWithWeakHandling(livingInt, IntWrapper::create(103))); 4671 set1->insert(PairWithWeakHandling(livingInt, IntWrapper::create(103)));
4672 set1->add(PairWithWeakHandling( 4672 set1->insert(PairWithWeakHandling(
4673 IntWrapper::create(103), 4673 IntWrapper::create(103),
4674 IntWrapper::create(103))); // This one gets zapped too. 4674 IntWrapper::create(103))); // This one gets zapped too.
4675 set1->add(PairWithWeakHandling(livingInt, livingInt)); 4675 set1->insert(PairWithWeakHandling(livingInt, livingInt));
4676 // This one is identical to the previous and doesn't add anything. 4676 // This one is identical to the previous and doesn't add anything.
4677 set1->add(PairWithWeakHandling(livingInt, livingInt)); 4677 set1->insert(PairWithWeakHandling(livingInt, livingInt));
4678 EXPECT_EQ(4u, set1->size()); 4678 EXPECT_EQ(4u, set1->size());
4679 preciselyCollectGarbage(); 4679 preciselyCollectGarbage();
4680 EXPECT_EQ(2u, set1->size()); 4680 EXPECT_EQ(2u, set1->size());
4681 Iterator i1 = set1->begin(); 4681 Iterator i1 = set1->begin();
4682 EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt); 4682 EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt);
4683 EXPECT_EQ(livingInt, i1->second); 4683 EXPECT_EQ(livingInt, i1->second);
4684 ++i1; 4684 ++i1;
4685 EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt); 4685 EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt);
4686 EXPECT_EQ(livingInt, i1->second); 4686 EXPECT_EQ(livingInt, i1->second);
4687 } 4687 }
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
4942 Persistent<IntWrapper> livingInt(IntWrapper::create(42)); 4942 Persistent<IntWrapper> livingInt(IntWrapper::create(42));
4943 4943
4944 typedef RefPtr<OffHeapInt> Key; 4944 typedef RefPtr<OffHeapInt> Key;
4945 typedef HeapHashMap<Key, WeakSet, WTF::DefaultHash<Key>::Hash, 4945 typedef HeapHashMap<Key, WeakSet, WTF::DefaultHash<Key>::Hash,
4946 HashTraits<Key>, EmptyClearingHashSetTraits> 4946 HashTraits<Key>, EmptyClearingHashSetTraits>
4947 Map; 4947 Map;
4948 Persistent<Map> map(new Map()); 4948 Persistent<Map> map(new Map());
4949 map->insert(OffHeapInt::create(1), WeakSet()); 4949 map->insert(OffHeapInt::create(1), WeakSet());
4950 { 4950 {
4951 WeakSet& set = map->begin()->value; 4951 WeakSet& set = map->begin()->value;
4952 set.add(IntWrapper::create(103)); // Weak set can't hold this long. 4952 set.insert(IntWrapper::create(103)); // Weak set can't hold this long.
4953 set.add(livingInt); // This prevents the set from being emptied. 4953 set.insert(livingInt); // This prevents the set from being emptied.
4954 EXPECT_EQ(2u, set.size()); 4954 EXPECT_EQ(2u, set.size());
4955 } 4955 }
4956 4956
4957 // The set we add here is empty, so the entry will be removed from the map 4957 // The set we add here is empty, so the entry will be removed from the map
4958 // at the next GC. 4958 // at the next GC.
4959 map->insert(OffHeapInt::create(2), WeakSet()); 4959 map->insert(OffHeapInt::create(2), WeakSet());
4960 EXPECT_EQ(2u, map->size()); 4960 EXPECT_EQ(2u, map->size());
4961 4961
4962 preciselyCollectGarbage(); 4962 preciselyCollectGarbage();
4963 EXPECT_EQ(1u, map->size()); // The one with key 2 was removed. 4963 EXPECT_EQ(1u, map->size()); // The one with key 2 was removed.
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
5114 5114
5115 pairWeakMap->insert(PairWithWeakHandling(pw1, pw1), pw1); 5115 pairWeakMap->insert(PairWithWeakHandling(pw1, pw1), pw1);
5116 pairWeakMap->insert(PairWithWeakHandling(pw1, pw2), pw1); 5116 pairWeakMap->insert(PairWithWeakHandling(pw1, pw2), pw1);
5117 // The map from (pw2, pw1) to pw1 would make pw2 live, so we skip that. 5117 // The map from (pw2, pw1) to pw1 would make pw2 live, so we skip that.
5118 pairWeakMap->insert(PairWithWeakHandling(pw2, pw2), pw1); 5118 pairWeakMap->insert(PairWithWeakHandling(pw2, pw2), pw1);
5119 pairWeakMap2->insert(PairWithWeakHandling(pw1, pw1), pw2); 5119 pairWeakMap2->insert(PairWithWeakHandling(pw1, pw1), pw2);
5120 pairWeakMap2->insert(PairWithWeakHandling(pw1, pw2), pw2); 5120 pairWeakMap2->insert(PairWithWeakHandling(pw1, pw2), pw2);
5121 pairWeakMap2->insert(PairWithWeakHandling(pw2, pw1), pw2); 5121 pairWeakMap2->insert(PairWithWeakHandling(pw2, pw1), pw2);
5122 pairWeakMap2->insert(PairWithWeakHandling(pw2, pw2), pw2); 5122 pairWeakMap2->insert(PairWithWeakHandling(pw2, pw2), pw2);
5123 5123
5124 set->add(wp1); 5124 set->insert(wp1);
5125 set->add(wp2); 5125 set->insert(wp2);
5126 set->add(pw1); 5126 set->insert(pw1);
5127 set->add(pw2); 5127 set->insert(pw2);
5128 5128
5129 preciselyCollectGarbage(); 5129 preciselyCollectGarbage();
5130 5130
5131 EXPECT_EQ(2u, weakPairMap->size()); 5131 EXPECT_EQ(2u, weakPairMap->size());
5132 EXPECT_EQ(2u, weakPairMap2->size()); 5132 EXPECT_EQ(2u, weakPairMap2->size());
5133 EXPECT_EQ(1u, weakPairMap3->size()); 5133 EXPECT_EQ(1u, weakPairMap3->size());
5134 EXPECT_EQ(2u, weakPairMap4->size()); 5134 EXPECT_EQ(2u, weakPairMap4->size());
5135 5135
5136 EXPECT_EQ(3u, pairWeakMap->size()); 5136 EXPECT_EQ(3u, pairWeakMap->size());
5137 EXPECT_EQ(4u, pairWeakMap2->size()); 5137 EXPECT_EQ(4u, pairWeakMap2->size());
(...skipping 1090 matching lines...) Expand 10 before | Expand all | Expand 10 after
6228 return; 6228 return;
6229 6229
6230 // Verify that the weak reference is gone. 6230 // Verify that the weak reference is gone.
6231 EXPECT_FALSE(weakHeapObjectSet().contains(this)); 6231 EXPECT_FALSE(weakHeapObjectSet().contains(this));
6232 6232
6233 // Add a new member to the static singleton; this will 6233 // Add a new member to the static singleton; this will
6234 // re-initializes the persistent node of the collection 6234 // re-initializes the persistent node of the collection
6235 // object. Done while terminating the test thread, so 6235 // object. Done while terminating the test thread, so
6236 // verify that this brings about the release of the 6236 // verify that this brings about the release of the
6237 // persistent also. 6237 // persistent also.
6238 heapObjectSet().add(create(false)); 6238 heapObjectSet().insert(create(false));
6239 } 6239 }
6240 6240
6241 DEFINE_INLINE_TRACE() {} 6241 DEFINE_INLINE_TRACE() {}
6242 6242
6243 private: 6243 private:
6244 explicit HeapObject(bool testDestructor) : m_testDestructor(testDestructor) {} 6244 explicit HeapObject(bool testDestructor) : m_testDestructor(testDestructor) {}
6245 6245
6246 bool m_testDestructor; 6246 bool m_testDestructor;
6247 }; 6247 };
6248 6248
(...skipping 13 matching lines...) Expand all
6262 new ThreadSpecific<HeapObjectSet>); 6262 new ThreadSpecific<HeapObjectSet>);
6263 if (!singleton.isSet()) 6263 if (!singleton.isSet())
6264 singleton->registerAsStaticReference(); 6264 singleton->registerAsStaticReference();
6265 6265
6266 return *singleton; 6266 return *singleton;
6267 } 6267 }
6268 6268
6269 void ThreadedClearOnShutdownTester::runWhileAttached() { 6269 void ThreadedClearOnShutdownTester::runWhileAttached() {
6270 EXPECT_EQ(42, threadSpecificIntWrapper().value()); 6270 EXPECT_EQ(42, threadSpecificIntWrapper().value());
6271 // Creates a thread-specific singleton to a weakly held object. 6271 // Creates a thread-specific singleton to a weakly held object.
6272 weakHeapObjectSet().add(HeapObject::create(true)); 6272 weakHeapObjectSet().insert(HeapObject::create(true));
6273 } 6273 }
6274 6274
6275 } // namespace 6275 } // namespace
6276 6276
6277 TEST(HeapTest, TestClearOnShutdown) { 6277 TEST(HeapTest, TestClearOnShutdown) {
6278 ThreadedClearOnShutdownTester::test(); 6278 ThreadedClearOnShutdownTester::test();
6279 } 6279 }
6280 6280
6281 // Verify that WeakMember<const T> compiles and behaves as expected. 6281 // Verify that WeakMember<const T> compiles and behaves as expected.
6282 class WithWeakConstObject final : public GarbageCollected<WithWeakConstObject> { 6282 class WithWeakConstObject final : public GarbageCollected<WithWeakConstObject> {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
6359 "HeapVector"); 6359 "HeapVector");
6360 static_assert( 6360 static_assert(
6361 WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::value, 6361 WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::value,
6362 "HeapDeque"); 6362 "HeapDeque");
6363 static_assert(WTF::IsGarbageCollectedType< 6363 static_assert(WTF::IsGarbageCollectedType<
6364 HeapTerminatedArray<Member<IntWrapper>>>::value, 6364 HeapTerminatedArray<Member<IntWrapper>>>::value,
6365 "HeapTerminatedArray"); 6365 "HeapTerminatedArray");
6366 } 6366 }
6367 6367
6368 } // namespace blink 6368 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698