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

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

Issue 858663002: Fix template angle bracket syntax in platform (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase Created 5 years, 11 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
« no previous file with comments | « Source/platform/heap/HeapTerminatedArray.h ('k') | Source/platform/heap/Visitor.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 } 98 }
99 99
100 static bool equal(const ThreadMarker& a, const ThreadMarker& b) 100 static bool equal(const ThreadMarker& a, const ThreadMarker& b)
101 { 101 {
102 return a == b; 102 return a == b;
103 } 103 }
104 104
105 static const bool safeToCompareToEmptyOrDeleted = false; 105 static const bool safeToCompareToEmptyOrDeleted = false;
106 }; 106 };
107 107
108 typedef std::pair<Member<IntWrapper>, WeakMember<IntWrapper> > StrongWeakPair; 108 typedef std::pair<Member<IntWrapper>, WeakMember<IntWrapper>> StrongWeakPair;
109 109
110 struct PairWithWeakHandling : public StrongWeakPair { 110 struct PairWithWeakHandling : public StrongWeakPair {
111 ALLOW_ONLY_INLINE_ALLOCATION(); 111 ALLOW_ONLY_INLINE_ALLOCATION();
112 112
113 public: 113 public:
114 // Regular constructor. 114 // Regular constructor.
115 PairWithWeakHandling(IntWrapper* one, IntWrapper* two) 115 PairWithWeakHandling(IntWrapper* one, IntWrapper* two)
116 : StrongWeakPair(one, two) 116 : StrongWeakPair(one, two)
117 { 117 {
118 ASSERT(one); // We use null first field to indicate empty slots in the h ash table. 118 ASSERT(one); // We use null first field to indicate empty slots in the h ash table.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 static const bool emptyValueIsZero = true; 163 static const bool emptyValueIsZero = true;
164 static void constructDeletedValue(blink::ThreadMarker& slot, bool) { new (No tNull, &slot) blink::ThreadMarker(HashTableDeletedValue); } 164 static void constructDeletedValue(blink::ThreadMarker& slot, bool) { new (No tNull, &slot) blink::ThreadMarker(HashTableDeletedValue); }
165 static bool isDeletedValue(const blink::ThreadMarker& slot) { return slot.is HashTableDeletedValue(); } 165 static bool isDeletedValue(const blink::ThreadMarker& slot) { return slot.is HashTableDeletedValue(); }
166 }; 166 };
167 167
168 // The hash algorithm for our custom pair class is just the standard double 168 // The hash algorithm for our custom pair class is just the standard double
169 // hash for pairs. Note that this means you can't mutate either of the parts of 169 // hash for pairs. Note that this means you can't mutate either of the parts of
170 // the pair while they are in the hash table, as that would change their hash 170 // the pair while they are in the hash table, as that would change their hash
171 // code and thus their preferred placement in the table. 171 // code and thus their preferred placement in the table.
172 template<> struct DefaultHash<blink::PairWithWeakHandling> { 172 template<> struct DefaultHash<blink::PairWithWeakHandling> {
173 typedef PairHash<blink::Member<blink::IntWrapper>, blink::WeakMember<blink:: IntWrapper> > Hash; 173 typedef PairHash<blink::Member<blink::IntWrapper>, blink::WeakMember<blink:: IntWrapper>> Hash;
174 }; 174 };
175 175
176 // Custom traits for the pair. These are weakness handling traits, which means 176 // Custom traits for the pair. These are weakness handling traits, which means
177 // PairWithWeakHandling must implement the traceInCollection method. 177 // PairWithWeakHandling must implement the traceInCollection method.
178 // In addition, these traits are concerned with the two magic values for the 178 // In addition, these traits are concerned with the two magic values for the
179 // object, that represent empty and deleted slots in the hash table. The 179 // object, that represent empty and deleted slots in the hash table. The
180 // SimpleClassHashTraits allow empty slots in the table to be initialzed with 180 // SimpleClassHashTraits allow empty slots in the table to be initialzed with
181 // memset to zero, and we use -1 in the first part of the pair to represent 181 // memset to zero, and we use -1 in the first part of the pair to represent
182 // deleted slots. 182 // deleted slots.
183 template<> struct HashTraits<blink::PairWithWeakHandling> : blink::WeakHandlingH ashTraits<blink::PairWithWeakHandling> { 183 template<> struct HashTraits<blink::PairWithWeakHandling> : blink::WeakHandlingH ashTraits<blink::PairWithWeakHandling> {
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 510
511 private: 511 private:
512 virtual void runThread() override 512 virtual void runThread() override
513 { 513 {
514 ThreadState::attach(); 514 ThreadState::attach();
515 515
516 int gcCount = 0; 516 int gcCount = 0;
517 while (!done()) { 517 while (!done()) {
518 ThreadState::current()->safePoint(ThreadState::NoHeapPointersOnStack ); 518 ThreadState::current()->safePoint(ThreadState::NoHeapPointersOnStack );
519 { 519 {
520 Persistent<HeapHashMap<ThreadMarker, WeakMember<IntWrapper> > > weakMap = new HeapHashMap<ThreadMarker, WeakMember<IntWrapper> >; 520 Persistent<HeapHashMap<ThreadMarker, WeakMember<IntWrapper>> > w eakMap = new HeapHashMap<ThreadMarker, WeakMember<IntWrapper>>;
521 PersistentHeapHashMap<ThreadMarker, WeakMember<IntWrapper> > wea kMap2; 521 PersistentHeapHashMap<ThreadMarker, WeakMember<IntWrapper>> weak Map2;
522 522
523 for (int i = 0; i < numberOfAllocations; i++) { 523 for (int i = 0; i < numberOfAllocations; i++) {
524 weakMap->add(static_cast<unsigned>(i), IntWrapper::create(0) ); 524 weakMap->add(static_cast<unsigned>(i), IntWrapper::create(0) );
525 weakMap2.add(static_cast<unsigned>(i), IntWrapper::create(0) ); 525 weakMap2.add(static_cast<unsigned>(i), IntWrapper::create(0) );
526 ThreadState::SafePointScope scope(ThreadState::NoHeapPointer sOnStack); 526 ThreadState::SafePointScope scope(ThreadState::NoHeapPointer sOnStack);
527 Platform::current()->yieldCurrentThread(); 527 Platform::current()->yieldCurrentThread();
528 } 528 }
529 529
530 if (gcCount < gcPerThread) { 530 if (gcCount < gcPerThread) {
531 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 531 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 : m_wasDestructed(false) 1147 : m_wasDestructed(false)
1148 { 1148 {
1149 ThreadState::current()->registerPreFinalizer(*this); 1149 ThreadState::current()->registerPreFinalizer(*this);
1150 } 1150 }
1151 1151
1152 bool m_wasDestructed; 1152 bool m_wasDestructed;
1153 }; 1153 };
1154 1154
1155 bool ObservableWithPreFinalizer::s_disposeWasCalled = false; 1155 bool ObservableWithPreFinalizer::s_disposeWasCalled = false;
1156 1156
1157 template <typename T> class FinalizationObserver : public GarbageCollected<Final izationObserver<T> > { 1157 template <typename T> class FinalizationObserver : public GarbageCollected<Final izationObserver<T>> {
1158 public: 1158 public:
1159 static FinalizationObserver* create(T* data) { return new FinalizationObserv er(data); } 1159 static FinalizationObserver* create(T* data) { return new FinalizationObserv er(data); }
1160 bool didCallWillFinalize() const { return m_didCallWillFinalize; } 1160 bool didCallWillFinalize() const { return m_didCallWillFinalize; }
1161 1161
1162 void trace(Visitor* visitor) 1162 void trace(Visitor* visitor)
1163 { 1163 {
1164 visitor->registerWeakMembers(this, zapWeakMembers); 1164 visitor->registerWeakMembers(this, zapWeakMembers);
1165 } 1165 }
1166 1166
1167 private: 1167 private:
(...skipping 12 matching lines...) Expand all
1180 o->m_didCallWillFinalize = true; 1180 o->m_didCallWillFinalize = true;
1181 } 1181 }
1182 } 1182 }
1183 1183
1184 WeakMember<T> m_data; 1184 WeakMember<T> m_data;
1185 bool m_didCallWillFinalize; 1185 bool m_didCallWillFinalize;
1186 }; 1186 };
1187 1187
1188 class FinalizationObserverWithHashMap { 1188 class FinalizationObserverWithHashMap {
1189 public: 1189 public:
1190 typedef HeapHashMap<WeakMember<Observable>, OwnPtr<FinalizationObserverWithH ashMap> > ObserverMap; 1190 typedef HeapHashMap<WeakMember<Observable>, OwnPtr<FinalizationObserverWithH ashMap>> ObserverMap;
1191 1191
1192 explicit FinalizationObserverWithHashMap(Observable& target) : m_target(targ et) { } 1192 explicit FinalizationObserverWithHashMap(Observable& target) : m_target(targ et) { }
1193 ~FinalizationObserverWithHashMap() 1193 ~FinalizationObserverWithHashMap()
1194 { 1194 {
1195 m_target.willFinalize(); 1195 m_target.willFinalize();
1196 s_didCallWillFinalize = true; 1196 s_didCallWillFinalize = true;
1197 } 1197 }
1198 1198
1199 static ObserverMap& observe(Observable& target) 1199 static ObserverMap& observe(Observable& target)
1200 { 1200 {
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
1960 TEST(HeapTest, HashMapOfMembers) 1960 TEST(HeapTest, HashMapOfMembers)
1961 { 1961 {
1962 IntWrapper::s_destructorCalls = 0; 1962 IntWrapper::s_destructorCalls = 0;
1963 1963
1964 clearOutOldGarbage(); 1964 clearOutOldGarbage();
1965 size_t initialObjectPayloadSize = Heap::objectPayloadSizeForTesting(); 1965 size_t initialObjectPayloadSize = Heap::objectPayloadSizeForTesting();
1966 { 1966 {
1967 typedef HeapHashMap< 1967 typedef HeapHashMap<
1968 Member<IntWrapper>, 1968 Member<IntWrapper>,
1969 Member<IntWrapper>, 1969 Member<IntWrapper>,
1970 DefaultHash<Member<IntWrapper> >::Hash, 1970 DefaultHash<Member<IntWrapper>>::Hash,
1971 HashTraits<Member<IntWrapper> >, 1971 HashTraits<Member<IntWrapper>>,
1972 HashTraits<Member<IntWrapper> > > HeapObjectIdentityMap; 1972 HashTraits<Member<IntWrapper>> > HeapObjectIdentityMap;
1973 1973
1974 Persistent<HeapObjectIdentityMap> map = new HeapObjectIdentityMap(); 1974 Persistent<HeapObjectIdentityMap> map = new HeapObjectIdentityMap();
1975 1975
1976 map->clear(); 1976 map->clear();
1977 size_t afterSetWasCreated = Heap::objectPayloadSizeForTesting(); 1977 size_t afterSetWasCreated = Heap::objectPayloadSizeForTesting();
1978 EXPECT_TRUE(afterSetWasCreated > initialObjectPayloadSize); 1978 EXPECT_TRUE(afterSetWasCreated > initialObjectPayloadSize);
1979 1979
1980 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 1980 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
1981 size_t afterGC = Heap::objectPayloadSizeForTesting(); 1981 size_t afterGC = Heap::objectPayloadSizeForTesting();
1982 EXPECT_EQ(afterGC, afterSetWasCreated); 1982 EXPECT_EQ(afterGC, afterSetWasCreated);
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2111 } 2111 }
2112 clearOutOldGarbage(); 2112 clearOutOldGarbage();
2113 EXPECT_TRUE(initialObjectPayloadSize == Heap::objectPayloadSizeForTesting()) ; 2113 EXPECT_TRUE(initialObjectPayloadSize == Heap::objectPayloadSizeForTesting()) ;
2114 EXPECT_TRUE(initialAllocatedSpace == Heap::allocatedSpace()); 2114 EXPECT_TRUE(initialAllocatedSpace == Heap::allocatedSpace());
2115 EXPECT_EQ(11, IntWrapper::s_destructorCalls); 2115 EXPECT_EQ(11, IntWrapper::s_destructorCalls);
2116 EXPECT_EQ(11, LargeHeapObject::s_destructorCalls); 2116 EXPECT_EQ(11, LargeHeapObject::s_destructorCalls);
2117 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 2117 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
2118 } 2118 }
2119 2119
2120 typedef std::pair<Member<IntWrapper>, int> PairWrappedUnwrapped; 2120 typedef std::pair<Member<IntWrapper>, int> PairWrappedUnwrapped;
2121 typedef std::pair<int, Member<IntWrapper> > PairUnwrappedWrapped; 2121 typedef std::pair<int, Member<IntWrapper>> PairUnwrappedWrapped;
2122 typedef std::pair<WeakMember<IntWrapper>, Member<IntWrapper> > PairWeakStrong; 2122 typedef std::pair<WeakMember<IntWrapper>, Member<IntWrapper>> PairWeakStrong;
2123 typedef std::pair<Member<IntWrapper>, WeakMember<IntWrapper> > PairStrongWeak; 2123 typedef std::pair<Member<IntWrapper>, WeakMember<IntWrapper>> PairStrongWeak;
2124 typedef std::pair<WeakMember<IntWrapper>, int> PairWeakUnwrapped; 2124 typedef std::pair<WeakMember<IntWrapper>, int> PairWeakUnwrapped;
2125 typedef std::pair<int, WeakMember<IntWrapper> > PairUnwrappedWeak; 2125 typedef std::pair<int, WeakMember<IntWrapper>> PairUnwrappedWeak;
2126 2126
2127 class Container : public GarbageCollected<Container> { 2127 class Container : public GarbageCollected<Container> {
2128 public: 2128 public:
2129 static Container* create() { return new Container(); } 2129 static Container* create() { return new Container(); }
2130 HeapHashMap<Member<IntWrapper>, Member<IntWrapper> > map; 2130 HeapHashMap<Member<IntWrapper>, Member<IntWrapper>> map;
2131 HeapHashSet<Member<IntWrapper> > set; 2131 HeapHashSet<Member<IntWrapper>> set;
2132 HeapHashSet<Member<IntWrapper> > set2; 2132 HeapHashSet<Member<IntWrapper>> set2;
2133 HeapHashCountedSet<Member<IntWrapper> > set3; 2133 HeapHashCountedSet<Member<IntWrapper>> set3;
2134 HeapVector<Member<IntWrapper>, 2> vector; 2134 HeapVector<Member<IntWrapper>, 2> vector;
2135 HeapVector<PairWrappedUnwrapped, 2> vectorWU; 2135 HeapVector<PairWrappedUnwrapped, 2> vectorWU;
2136 HeapVector<PairUnwrappedWrapped, 2> vectorUW; 2136 HeapVector<PairUnwrappedWrapped, 2> vectorUW;
2137 HeapDeque<Member<IntWrapper>, 0> deque; 2137 HeapDeque<Member<IntWrapper>, 0> deque;
2138 HeapDeque<PairWrappedUnwrapped, 0> dequeWU; 2138 HeapDeque<PairWrappedUnwrapped, 0> dequeWU;
2139 HeapDeque<PairUnwrappedWrapped, 0> dequeUW; 2139 HeapDeque<PairUnwrappedWrapped, 0> dequeUW;
2140 void trace(Visitor* visitor) 2140 void trace(Visitor* visitor)
2141 { 2141 {
2142 visitor->trace(map); 2142 visitor->trace(map);
2143 visitor->trace(set); 2143 visitor->trace(set);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
2207 2207
2208 class B : public NoBaseWillBeGarbageCollected<B>, public A { 2208 class B : public NoBaseWillBeGarbageCollected<B>, public A {
2209 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(B); 2209 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(B);
2210 public: 2210 public:
2211 void trace(Visitor*) { } 2211 void trace(Visitor*) { }
2212 }; 2212 };
2213 2213
2214 TEST(HeapTest, HeapVectorFilledWithValue) 2214 TEST(HeapTest, HeapVectorFilledWithValue)
2215 { 2215 {
2216 IntWrapper* val = IntWrapper::create(1); 2216 IntWrapper* val = IntWrapper::create(1);
2217 HeapVector<Member<IntWrapper> > vector(10, val); 2217 HeapVector<Member<IntWrapper>> vector(10, val);
2218 EXPECT_EQ(10u, vector.size()); 2218 EXPECT_EQ(10u, vector.size());
2219 for (size_t i = 0; i < vector.size(); i++) 2219 for (size_t i = 0; i < vector.size(); i++)
2220 EXPECT_EQ(val, vector[i]); 2220 EXPECT_EQ(val, vector[i]);
2221 } 2221 }
2222 2222
2223 TEST(HeapTest, HeapVectorWithInlineCapacity) 2223 TEST(HeapTest, HeapVectorWithInlineCapacity)
2224 { 2224 {
2225 IntWrapper* one = IntWrapper::create(1); 2225 IntWrapper* one = IntWrapper::create(1);
2226 IntWrapper* two = IntWrapper::create(2); 2226 IntWrapper* two = IntWrapper::create(2);
2227 IntWrapper* three = IntWrapper::create(3); 2227 IntWrapper* three = IntWrapper::create(3);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2341 if (*it == u) 2341 if (*it == u)
2342 return true; 2342 return true;
2343 } 2343 }
2344 return false; 2344 return false;
2345 } 2345 }
2346 2346
2347 TEST(HeapTest, HeapCollectionTypes) 2347 TEST(HeapTest, HeapCollectionTypes)
2348 { 2348 {
2349 IntWrapper::s_destructorCalls = 0; 2349 IntWrapper::s_destructorCalls = 0;
2350 2350
2351 typedef HeapHashMap<Member<IntWrapper>, Member<IntWrapper> > MemberMember; 2351 typedef HeapHashMap<Member<IntWrapper>, Member<IntWrapper>> MemberMember;
2352 typedef HeapHashMap<Member<IntWrapper>, int> MemberPrimitive; 2352 typedef HeapHashMap<Member<IntWrapper>, int> MemberPrimitive;
2353 typedef HeapHashMap<int, Member<IntWrapper> > PrimitiveMember; 2353 typedef HeapHashMap<int, Member<IntWrapper>> PrimitiveMember;
2354 2354
2355 typedef HeapHashSet<Member<IntWrapper> > MemberSet; 2355 typedef HeapHashSet<Member<IntWrapper>> MemberSet;
2356 typedef HeapHashCountedSet<Member<IntWrapper> > MemberCountedSet; 2356 typedef HeapHashCountedSet<Member<IntWrapper>> MemberCountedSet;
2357 2357
2358 typedef HeapVector<Member<IntWrapper>, 2> MemberVector; 2358 typedef HeapVector<Member<IntWrapper>, 2> MemberVector;
2359 typedef HeapDeque<Member<IntWrapper>, 0> MemberDeque; 2359 typedef HeapDeque<Member<IntWrapper>, 0> MemberDeque;
2360 2360
2361 typedef HeapVector<PairWrappedUnwrapped, 2> VectorWU; 2361 typedef HeapVector<PairWrappedUnwrapped, 2> VectorWU;
2362 typedef HeapVector<PairUnwrappedWrapped, 2> VectorUW; 2362 typedef HeapVector<PairUnwrappedWrapped, 2> VectorUW;
2363 typedef HeapDeque<PairWrappedUnwrapped, 0> DequeWU; 2363 typedef HeapDeque<PairWrappedUnwrapped, 0> DequeWU;
2364 typedef HeapDeque<PairUnwrappedWrapped, 0> DequeUW; 2364 typedef HeapDeque<PairUnwrappedWrapped, 0> DequeUW;
2365 2365
2366 Persistent<MemberMember> memberMember = new MemberMember(); 2366 Persistent<MemberMember> memberMember = new MemberMember();
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
2664 ++it; 2664 ++it;
2665 } 2665 }
2666 EXPECT_EQ(expected, found); 2666 EXPECT_EQ(expected, found);
2667 } 2667 }
2668 2668
2669 TEST(HeapTest, HeapWeakCollectionSimple) 2669 TEST(HeapTest, HeapWeakCollectionSimple)
2670 { 2670 {
2671 clearOutOldGarbage(); 2671 clearOutOldGarbage();
2672 IntWrapper::s_destructorCalls = 0; 2672 IntWrapper::s_destructorCalls = 0;
2673 2673
2674 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive; 2674 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive;
2675 2675
2676 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper> > WeakStrong; 2676 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper>> WeakStrong;
2677 typedef HeapHashMap<Member<IntWrapper>, WeakMember<IntWrapper> > StrongWeak; 2677 typedef HeapHashMap<Member<IntWrapper>, WeakMember<IntWrapper>> StrongWeak;
2678 typedef HeapHashMap<WeakMember<IntWrapper>, WeakMember<IntWrapper> > WeakWea k; 2678 typedef HeapHashMap<WeakMember<IntWrapper>, WeakMember<IntWrapper>> WeakWeak ;
2679 typedef HeapHashSet<WeakMember<IntWrapper> > WeakSet; 2679 typedef HeapHashSet<WeakMember<IntWrapper>> WeakSet;
2680 typedef HeapHashCountedSet<WeakMember<IntWrapper> > WeakCountedSet; 2680 typedef HeapHashCountedSet<WeakMember<IntWrapper>> WeakCountedSet;
2681 2681
2682 Persistent<WeakStrong> weakStrong = new WeakStrong(); 2682 Persistent<WeakStrong> weakStrong = new WeakStrong();
2683 Persistent<StrongWeak> strongWeak = new StrongWeak(); 2683 Persistent<StrongWeak> strongWeak = new StrongWeak();
2684 Persistent<WeakWeak> weakWeak = new WeakWeak(); 2684 Persistent<WeakWeak> weakWeak = new WeakWeak();
2685 Persistent<WeakSet> weakSet = new WeakSet(); 2685 Persistent<WeakSet> weakSet = new WeakSet();
2686 Persistent<WeakCountedSet> weakCountedSet = new WeakCountedSet(); 2686 Persistent<WeakCountedSet> weakCountedSet = new WeakCountedSet();
2687 2687
2688 Persistent<IntWrapper> two = IntWrapper::create(2); 2688 Persistent<IntWrapper> two = IntWrapper::create(2);
2689 2689
2690 keepNumbersAlive.append(IntWrapper::create(103)); 2690 keepNumbersAlive.append(IntWrapper::create(103));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2725 EXPECT_EQ(2u, weakSet->size()); 2725 EXPECT_EQ(2u, weakSet->size());
2726 EXPECT_EQ(2u, weakCountedSet->size()); 2726 EXPECT_EQ(2u, weakCountedSet->size());
2727 } 2727 }
2728 2728
2729 template<typename Set> 2729 template<typename Set>
2730 void orderedSetHelper(bool strong) 2730 void orderedSetHelper(bool strong)
2731 { 2731 {
2732 clearOutOldGarbage(); 2732 clearOutOldGarbage();
2733 IntWrapper::s_destructorCalls = 0; 2733 IntWrapper::s_destructorCalls = 0;
2734 2734
2735 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive; 2735 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive;
2736 2736
2737 Persistent<Set> set1 = new Set(); 2737 Persistent<Set> set1 = new Set();
2738 Persistent<Set> set2 = new Set(); 2738 Persistent<Set> set2 = new Set();
2739 2739
2740 const Set& constSet = *set1.get(); 2740 const Set& constSet = *set1.get();
2741 2741
2742 keepNumbersAlive.append(IntWrapper::create(2)); 2742 keepNumbersAlive.append(IntWrapper::create(2));
2743 keepNumbersAlive.append(IntWrapper::create(103)); 2743 keepNumbersAlive.append(IntWrapper::create(103));
2744 keepNumbersAlive.append(IntWrapper::create(10)); 2744 keepNumbersAlive.append(IntWrapper::create(10));
2745 2745
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
2832 EXPECT_EQ(103, (*i2)->value()); 2832 EXPECT_EQ(103, (*i2)->value());
2833 ++i2; 2833 ++i2;
2834 EXPECT_NE(set1->end(), i2); 2834 EXPECT_NE(set1->end(), i2);
2835 EXPECT_EQ(10, (*i2)->value()); 2835 EXPECT_EQ(10, (*i2)->value());
2836 ++i2; 2836 ++i2;
2837 EXPECT_EQ(set1->end(), i2); 2837 EXPECT_EQ(set1->end(), i2);
2838 } 2838 }
2839 2839
2840 TEST(HeapTest, HeapWeakLinkedHashSet) 2840 TEST(HeapTest, HeapWeakLinkedHashSet)
2841 { 2841 {
2842 orderedSetHelper<HeapLinkedHashSet<Member<IntWrapper> > >(true); 2842 orderedSetHelper<HeapLinkedHashSet<Member<IntWrapper>> >(true);
2843 orderedSetHelper<HeapLinkedHashSet<WeakMember<IntWrapper> > >(false); 2843 orderedSetHelper<HeapLinkedHashSet<WeakMember<IntWrapper>> >(false);
2844 orderedSetHelper<HeapListHashSet<Member<IntWrapper> > >(true); 2844 orderedSetHelper<HeapListHashSet<Member<IntWrapper>> >(true);
2845 } 2845 }
2846 2846
2847 class ThingWithDestructor { 2847 class ThingWithDestructor {
2848 public: 2848 public:
2849 ThingWithDestructor() 2849 ThingWithDestructor()
2850 : m_x(emptyValue) 2850 : m_x(emptyValue)
2851 { 2851 {
2852 s_liveThingsWithDestructor++; 2852 s_liveThingsWithDestructor++;
2853 } 2853 }
2854 2854
(...skipping 29 matching lines...) Expand all
2884 2884
2885 struct ThingWithDestructorTraits : public HashTraits<ThingWithDestructor> { 2885 struct ThingWithDestructorTraits : public HashTraits<ThingWithDestructor> {
2886 static const bool needsDestruction = true; 2886 static const bool needsDestruction = true;
2887 }; 2887 };
2888 2888
2889 static void heapMapDestructorHelper(bool clearMaps) 2889 static void heapMapDestructorHelper(bool clearMaps)
2890 { 2890 {
2891 clearOutOldGarbage(); 2891 clearOutOldGarbage();
2892 ThingWithDestructor::s_liveThingsWithDestructor = 0; 2892 ThingWithDestructor::s_liveThingsWithDestructor = 0;
2893 2893
2894 typedef HeapHashMap<WeakMember<IntWrapper>, Member<RefCountedAndGarbageColle cted> > RefMap; 2894 typedef HeapHashMap<WeakMember<IntWrapper>, Member<RefCountedAndGarbageColle cted>> RefMap;
2895 2895
2896 typedef HeapHashMap< 2896 typedef HeapHashMap<
2897 WeakMember<IntWrapper>, 2897 WeakMember<IntWrapper>,
2898 ThingWithDestructor, 2898 ThingWithDestructor,
2899 DefaultHash<WeakMember<IntWrapper> >::Hash, 2899 DefaultHash<WeakMember<IntWrapper>>::Hash,
2900 HashTraits<WeakMember<IntWrapper> >, 2900 HashTraits<WeakMember<IntWrapper>>,
2901 ThingWithDestructorTraits> Map; 2901 ThingWithDestructorTraits> Map;
2902 2902
2903 Persistent<Map> map(new Map()); 2903 Persistent<Map> map(new Map());
2904 Persistent<RefMap> refMap(new RefMap()); 2904 Persistent<RefMap> refMap(new RefMap());
2905 2905
2906 Persistent<IntWrapper> luck(IntWrapper::create(103)); 2906 Persistent<IntWrapper> luck(IntWrapper::create(103));
2907 2907
2908 int baseLine, refBaseLine; 2908 int baseLine, refBaseLine;
2909 2909
2910 { 2910 {
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
3052 EXPECT_TRUE(strongWeak->contains(PairStrongWeak(&*two, &*two))); 3052 EXPECT_TRUE(strongWeak->contains(PairStrongWeak(&*two, &*two)));
3053 EXPECT_TRUE(weakUnwrapped->contains(PairWeakUnwrapped(&*two, 2))); 3053 EXPECT_TRUE(weakUnwrapped->contains(PairWeakUnwrapped(&*two, 2)));
3054 EXPECT_TRUE(unwrappedWeak->contains(PairUnwrappedWeak(2, &*two))); 3054 EXPECT_TRUE(unwrappedWeak->contains(PairUnwrappedWeak(2, &*two)));
3055 } 3055 }
3056 3056
3057 template<typename WSSet, typename SWSet, typename WUSet, typename UWSet> 3057 template<typename WSSet, typename SWSet, typename WUSet, typename UWSet>
3058 void weakPairsHelper() 3058 void weakPairsHelper()
3059 { 3059 {
3060 IntWrapper::s_destructorCalls = 0; 3060 IntWrapper::s_destructorCalls = 0;
3061 3061
3062 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive; 3062 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive;
3063 3063
3064 Persistent<WSSet> weakStrong = new WSSet(); 3064 Persistent<WSSet> weakStrong = new WSSet();
3065 Persistent<SWSet> strongWeak = new SWSet(); 3065 Persistent<SWSet> strongWeak = new SWSet();
3066 Persistent<WUSet> weakUnwrapped = new WUSet(); 3066 Persistent<WUSet> weakUnwrapped = new WUSet();
3067 Persistent<UWSet> unwrappedWeak = new UWSet(); 3067 Persistent<UWSet> unwrappedWeak = new UWSet();
3068 3068
3069 Persistent<IntWrapper> two = IntWrapper::create(2); 3069 Persistent<IntWrapper> two = IntWrapper::create(2);
3070 3070
3071 weakStrong->add(PairWeakStrong(IntWrapper::create(1), &*two)); 3071 weakStrong->add(PairWeakStrong(IntWrapper::create(1), &*two));
3072 weakStrong->add(PairWeakStrong(&*two, &*two)); 3072 weakStrong->add(PairWeakStrong(&*two, &*two));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
3107 typedef HeapLinkedHashSet<PairStrongWeak> StrongWeakSet; 3107 typedef HeapLinkedHashSet<PairStrongWeak> StrongWeakSet;
3108 typedef HeapLinkedHashSet<PairUnwrappedWeak> UnwrappedWeakSet; 3108 typedef HeapLinkedHashSet<PairUnwrappedWeak> UnwrappedWeakSet;
3109 weakPairsHelper<WeakStrongSet, StrongWeakSet, WeakUnwrappedSet, Unwrappe dWeakSet>(); 3109 weakPairsHelper<WeakStrongSet, StrongWeakSet, WeakUnwrappedSet, Unwrappe dWeakSet>();
3110 } 3110 }
3111 } 3111 }
3112 3112
3113 TEST(HeapTest, HeapWeakCollectionTypes) 3113 TEST(HeapTest, HeapWeakCollectionTypes)
3114 { 3114 {
3115 IntWrapper::s_destructorCalls = 0; 3115 IntWrapper::s_destructorCalls = 0;
3116 3116
3117 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper> > WeakStrong; 3117 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper>> WeakStrong;
3118 typedef HeapHashMap<Member<IntWrapper>, WeakMember<IntWrapper> > StrongWeak; 3118 typedef HeapHashMap<Member<IntWrapper>, WeakMember<IntWrapper>> StrongWeak;
3119 typedef HeapHashMap<WeakMember<IntWrapper>, WeakMember<IntWrapper> > WeakWea k; 3119 typedef HeapHashMap<WeakMember<IntWrapper>, WeakMember<IntWrapper>> WeakWeak ;
3120 typedef HeapHashSet<WeakMember<IntWrapper> > WeakSet; 3120 typedef HeapHashSet<WeakMember<IntWrapper>> WeakSet;
3121 typedef HeapLinkedHashSet<WeakMember<IntWrapper> > WeakOrderedSet; 3121 typedef HeapLinkedHashSet<WeakMember<IntWrapper>> WeakOrderedSet;
3122 3122
3123 clearOutOldGarbage(); 3123 clearOutOldGarbage();
3124 3124
3125 const int weakStrongIndex = 0; 3125 const int weakStrongIndex = 0;
3126 const int strongWeakIndex = 1; 3126 const int strongWeakIndex = 1;
3127 const int weakWeakIndex = 2; 3127 const int weakWeakIndex = 2;
3128 const int numberOfMapIndices = 3; 3128 const int numberOfMapIndices = 3;
3129 const int weakSetIndex = 3; 3129 const int weakSetIndex = 3;
3130 const int weakOrderedSetIndex = 4; 3130 const int weakOrderedSetIndex = 4;
3131 const int numberOfCollections = 5; 3131 const int numberOfCollections = 5;
(...skipping 11 matching lines...) Expand all
3143 3143
3144 unsigned added = addAfterwards ? 100 : 0; 3144 unsigned added = addAfterwards ? 100 : 0;
3145 3145
3146 Persistent<WeakStrong> weakStrong = new WeakStrong(); 3146 Persistent<WeakStrong> weakStrong = new WeakStrong();
3147 Persistent<StrongWeak> strongWeak = new StrongWeak(); 3147 Persistent<StrongWeak> strongWeak = new StrongWeak();
3148 Persistent<WeakWeak> weakWeak = new WeakWeak(); 3148 Persistent<WeakWeak> weakWeak = new WeakWeak();
3149 3149
3150 Persistent<WeakSet> weakSet = new WeakSet(); 3150 Persistent<WeakSet> weakSet = new WeakSet();
3151 Persistent<WeakOrderedSet> weakOrderedSet = new WeakOrderedSet(); 3151 Persistent<WeakOrderedSet> weakOrderedSet = new WeakOrderedSet();
3152 3152
3153 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive; 3153 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive;
3154 for (int i = 0; i < 128; i += 2) { 3154 for (int i = 0; i < 128; i += 2) {
3155 IntWrapper* wrapped = IntWrapper::create(i); 3155 IntWrapper* wrapped = IntWrapper::create(i);
3156 IntWrapper* wrapped2 = IntWrapper::create(i + 1); 3156 IntWrapper* wrapped2 = IntWrapper::create(i + 1);
3157 keepNumbersAlive.append(wrapped); 3157 keepNumbersAlive.append(wrapped);
3158 keepNumbersAlive.append(wrapped2); 3158 keepNumbersAlive.append(wrapped2);
3159 weakStrong->add(wrapped, wrapped2); 3159 weakStrong->add(wrapped, wrapped2);
3160 strongWeak->add(wrapped2, wrapped); 3160 strongWeak->add(wrapped2, wrapped);
3161 weakWeak->add(wrapped, wrapped2); 3161 weakWeak->add(wrapped, wrapped2);
3162 weakSet->add(wrapped); 3162 weakSet->add(wrapped);
3163 weakOrderedSet->add(wrapped); 3163 weakOrderedSet->add(wrapped);
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
3429 EXPECT_TRUE(h4->strongIsThere()); // h2 is still pointed to from h4. 3429 EXPECT_TRUE(h4->strongIsThere()); // h2 is still pointed to from h4.
3430 EXPECT_TRUE(h5->strongIsThere()); // h2 is still pointed to from h5. 3430 EXPECT_TRUE(h5->strongIsThere()); // h2 is still pointed to from h5.
3431 } 3431 }
3432 // h4 and h5 have gone out of scope now and they were keeping h2 alive. 3432 // h4 and h5 have gone out of scope now and they were keeping h2 alive.
3433 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3433 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3434 EXPECT_EQ(0u, Bar::s_live); // All gone. 3434 EXPECT_EQ(0u, Bar::s_live); // All gone.
3435 } 3435 }
3436 3436
3437 TEST(HeapTest, FinalizationObserver) 3437 TEST(HeapTest, FinalizationObserver)
3438 { 3438 {
3439 Persistent<FinalizationObserver<Observable> > o; 3439 Persistent<FinalizationObserver<Observable>> o;
3440 { 3440 {
3441 Observable* foo = Observable::create(Bar::create()); 3441 Observable* foo = Observable::create(Bar::create());
3442 // |o| observes |foo|. 3442 // |o| observes |foo|.
3443 o = FinalizationObserver<Observable>::create(foo); 3443 o = FinalizationObserver<Observable>::create(foo);
3444 } 3444 }
3445 // FinalizationObserver doesn't have a strong reference to |foo|. So |foo| 3445 // FinalizationObserver doesn't have a strong reference to |foo|. So |foo|
3446 // and its member will be collected. 3446 // and its member will be collected.
3447 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3447 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3448 EXPECT_EQ(0u, Bar::s_live); 3448 EXPECT_EQ(0u, Bar::s_live);
3449 EXPECT_TRUE(o->didCallWillFinalize()); 3449 EXPECT_TRUE(o->didCallWillFinalize());
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
3583 EXPECT_EQ(0, IntWrapper::s_destructorCalls); 3583 EXPECT_EQ(0, IntWrapper::s_destructorCalls);
3584 container = nullptr; 3584 container = nullptr;
3585 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3585 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3586 EXPECT_EQ(OffHeapContainer::deadWrappers, IntWrapper::s_destructorCalls); 3586 EXPECT_EQ(OffHeapContainer::deadWrappers, IntWrapper::s_destructorCalls);
3587 } 3587 }
3588 3588
3589 TEST(HeapTest, PersistentHeapCollectionTypes) 3589 TEST(HeapTest, PersistentHeapCollectionTypes)
3590 { 3590 {
3591 IntWrapper::s_destructorCalls = 0; 3591 IntWrapper::s_destructorCalls = 0;
3592 3592
3593 typedef HeapVector<Member<IntWrapper> > Vec; 3593 typedef HeapVector<Member<IntWrapper>> Vec;
3594 typedef PersistentHeapVector<Member<IntWrapper> > PVec; 3594 typedef PersistentHeapVector<Member<IntWrapper>> PVec;
3595 typedef PersistentHeapHashSet<Member<IntWrapper> > PSet; 3595 typedef PersistentHeapHashSet<Member<IntWrapper>> PSet;
3596 typedef PersistentHeapListHashSet<Member<IntWrapper> > PListSet; 3596 typedef PersistentHeapListHashSet<Member<IntWrapper>> PListSet;
3597 typedef PersistentHeapLinkedHashSet<Member<IntWrapper> > PLinkedSet; 3597 typedef PersistentHeapLinkedHashSet<Member<IntWrapper>> PLinkedSet;
3598 typedef PersistentHeapHashMap<Member<IntWrapper>, Member<IntWrapper> > PMap; 3598 typedef PersistentHeapHashMap<Member<IntWrapper>, Member<IntWrapper>> PMap;
3599 typedef PersistentHeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper> > W eakPMap; 3599 typedef PersistentHeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper>> We akPMap;
3600 typedef PersistentHeapDeque<Member<IntWrapper> > PDeque; 3600 typedef PersistentHeapDeque<Member<IntWrapper>> PDeque;
3601 3601
3602 clearOutOldGarbage(); 3602 clearOutOldGarbage();
3603 { 3603 {
3604 PVec pVec; 3604 PVec pVec;
3605 PDeque pDeque; 3605 PDeque pDeque;
3606 PSet pSet; 3606 PSet pSet;
3607 PListSet pListSet; 3607 PListSet pListSet;
3608 PLinkedSet pLinkedSet; 3608 PLinkedSet pLinkedSet;
3609 PMap pMap; 3609 PMap pMap;
3610 WeakPMap wpMap; 3610 WeakPMap wpMap;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
3677 // Collect previous roots. 3677 // Collect previous roots.
3678 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3678 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3679 EXPECT_EQ(11, IntWrapper::s_destructorCalls); 3679 EXPECT_EQ(11, IntWrapper::s_destructorCalls);
3680 } 3680 }
3681 3681
3682 TEST(HeapTest, CollectionNesting) 3682 TEST(HeapTest, CollectionNesting)
3683 { 3683 {
3684 clearOutOldGarbage(); 3684 clearOutOldGarbage();
3685 int* key = &IntWrapper::s_destructorCalls; 3685 int* key = &IntWrapper::s_destructorCalls;
3686 IntWrapper::s_destructorCalls = 0; 3686 IntWrapper::s_destructorCalls = 0;
3687 typedef HeapVector<Member<IntWrapper> > IntVector; 3687 typedef HeapVector<Member<IntWrapper>> IntVector;
3688 typedef HeapDeque<Member<IntWrapper> > IntDeque; 3688 typedef HeapDeque<Member<IntWrapper>> IntDeque;
3689 HeapHashMap<void*, IntVector>* map = new HeapHashMap<void*, IntVector>(); 3689 HeapHashMap<void*, IntVector>* map = new HeapHashMap<void*, IntVector>();
3690 HeapHashMap<void*, IntDeque>* map2 = new HeapHashMap<void*, IntDeque>(); 3690 HeapHashMap<void*, IntDeque>* map2 = new HeapHashMap<void*, IntDeque>();
3691 static_assert(WTF::NeedsTracing<IntVector>::value, "Failed to recognize Heap Vector as NeedsTracing"); 3691 static_assert(WTF::NeedsTracing<IntVector>::value, "Failed to recognize Heap Vector as NeedsTracing");
3692 static_assert(WTF::NeedsTracing<IntDeque>::value, "Failed to recognize HeapD eque as NeedsTracing"); 3692 static_assert(WTF::NeedsTracing<IntDeque>::value, "Failed to recognize HeapD eque as NeedsTracing");
3693 3693
3694 map->add(key, IntVector()); 3694 map->add(key, IntVector());
3695 map2->add(key, IntDeque()); 3695 map2->add(key, IntDeque());
3696 3696
3697 HeapHashMap<void*, IntVector>::iterator it = map->find(key); 3697 HeapHashMap<void*, IntVector>::iterator it = map->find(key);
3698 EXPECT_EQ(0u, map->get(key).size()); 3698 EXPECT_EQ(0u, map->get(key).size());
3699 3699
3700 HeapHashMap<void*, IntDeque>::iterator it2 = map2->find(key); 3700 HeapHashMap<void*, IntDeque>::iterator it2 = map2->find(key);
3701 EXPECT_EQ(0u, map2->get(key).size()); 3701 EXPECT_EQ(0u, map2->get(key).size());
3702 3702
3703 it->value.append(IntWrapper::create(42)); 3703 it->value.append(IntWrapper::create(42));
3704 EXPECT_EQ(1u, map->get(key).size()); 3704 EXPECT_EQ(1u, map->get(key).size());
3705 3705
3706 it2->value.append(IntWrapper::create(42)); 3706 it2->value.append(IntWrapper::create(42));
3707 EXPECT_EQ(1u, map2->get(key).size()); 3707 EXPECT_EQ(1u, map2->get(key).size());
3708 3708
3709 Persistent<HeapHashMap<void*, IntVector> > keepAlive(map); 3709 Persistent<HeapHashMap<void*, IntVector>> keepAlive(map);
3710 Persistent<HeapHashMap<void*, IntDeque> > keepAlive2(map2); 3710 Persistent<HeapHashMap<void*, IntDeque>> keepAlive2(map2);
3711 3711
3712 for (int i = 0; i < 100; i++) { 3712 for (int i = 0; i < 100; i++) {
3713 map->add(key + 1 + i, IntVector()); 3713 map->add(key + 1 + i, IntVector());
3714 map2->add(key + 1 + i, IntDeque()); 3714 map2->add(key + 1 + i, IntDeque());
3715 } 3715 }
3716 3716
3717 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3717 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3718 3718
3719 EXPECT_EQ(1u, map->get(key).size()); 3719 EXPECT_EQ(1u, map->get(key).size());
3720 EXPECT_EQ(1u, map2->get(key).size()); 3720 EXPECT_EQ(1u, map2->get(key).size());
(...skipping 11 matching lines...) Expand all
3732 Persistent<UseMixin> usemixin = UseMixin::create(); 3732 Persistent<UseMixin> usemixin = UseMixin::create();
3733 EXPECT_EQ(0, UseMixin::s_traceCount); 3733 EXPECT_EQ(0, UseMixin::s_traceCount);
3734 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3734 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3735 EXPECT_EQ(1, UseMixin::s_traceCount); 3735 EXPECT_EQ(1, UseMixin::s_traceCount);
3736 3736
3737 Persistent<Mixin> mixin = usemixin; 3737 Persistent<Mixin> mixin = usemixin;
3738 usemixin = nullptr; 3738 usemixin = nullptr;
3739 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3739 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3740 EXPECT_EQ(2, UseMixin::s_traceCount); 3740 EXPECT_EQ(2, UseMixin::s_traceCount);
3741 3741
3742 PersistentHeapHashSet<WeakMember<Mixin> > weakMap; 3742 PersistentHeapHashSet<WeakMember<Mixin>> weakMap;
3743 weakMap.add(UseMixin::create()); 3743 weakMap.add(UseMixin::create());
3744 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3744 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3745 EXPECT_EQ(0u, weakMap.size()); 3745 EXPECT_EQ(0u, weakMap.size());
3746 } 3746 }
3747 3747
3748 TEST(HeapTest, CollectionNesting2) 3748 TEST(HeapTest, CollectionNesting2)
3749 { 3749 {
3750 clearOutOldGarbage(); 3750 clearOutOldGarbage();
3751 void* key = &IntWrapper::s_destructorCalls; 3751 void* key = &IntWrapper::s_destructorCalls;
3752 IntWrapper::s_destructorCalls = 0; 3752 IntWrapper::s_destructorCalls = 0;
3753 typedef HeapHashSet<Member<IntWrapper> > IntSet; 3753 typedef HeapHashSet<Member<IntWrapper>> IntSet;
3754 HeapHashMap<void*, IntSet>* map = new HeapHashMap<void*, IntSet>(); 3754 HeapHashMap<void*, IntSet>* map = new HeapHashMap<void*, IntSet>();
3755 3755
3756 map->add(key, IntSet()); 3756 map->add(key, IntSet());
3757 3757
3758 HeapHashMap<void*, IntSet>::iterator it = map->find(key); 3758 HeapHashMap<void*, IntSet>::iterator it = map->find(key);
3759 EXPECT_EQ(0u, map->get(key).size()); 3759 EXPECT_EQ(0u, map->get(key).size());
3760 3760
3761 it->value.add(IntWrapper::create(42)); 3761 it->value.add(IntWrapper::create(42));
3762 EXPECT_EQ(1u, map->get(key).size()); 3762 EXPECT_EQ(1u, map->get(key).size());
3763 3763
3764 Persistent<HeapHashMap<void*, IntSet> > keepAlive(map); 3764 Persistent<HeapHashMap<void*, IntSet>> keepAlive(map);
3765 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3765 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3766 EXPECT_EQ(1u, map->get(key).size()); 3766 EXPECT_EQ(1u, map->get(key).size());
3767 EXPECT_EQ(0, IntWrapper::s_destructorCalls); 3767 EXPECT_EQ(0, IntWrapper::s_destructorCalls);
3768 } 3768 }
3769 3769
3770 TEST(HeapTest, CollectionNesting3) 3770 TEST(HeapTest, CollectionNesting3)
3771 { 3771 {
3772 clearOutOldGarbage(); 3772 clearOutOldGarbage();
3773 IntWrapper::s_destructorCalls = 0; 3773 IntWrapper::s_destructorCalls = 0;
3774 typedef HeapVector<Member<IntWrapper> > IntVector; 3774 typedef HeapVector<Member<IntWrapper>> IntVector;
3775 typedef HeapDeque<Member<IntWrapper> > IntDeque; 3775 typedef HeapDeque<Member<IntWrapper>> IntDeque;
3776 HeapVector<IntVector>* vector = new HeapVector<IntVector>(); 3776 HeapVector<IntVector>* vector = new HeapVector<IntVector>();
3777 HeapDeque<IntDeque>* deque = new HeapDeque<IntDeque>(); 3777 HeapDeque<IntDeque>* deque = new HeapDeque<IntDeque>();
3778 3778
3779 vector->append(IntVector()); 3779 vector->append(IntVector());
3780 deque->append(IntDeque()); 3780 deque->append(IntDeque());
3781 3781
3782 HeapVector<IntVector>::iterator it = vector->begin(); 3782 HeapVector<IntVector>::iterator it = vector->begin();
3783 HeapDeque<IntDeque>::iterator it2 = deque->begin(); 3783 HeapDeque<IntDeque>::iterator it2 = deque->begin();
3784 EXPECT_EQ(0u, it->size()); 3784 EXPECT_EQ(0u, it->size());
3785 EXPECT_EQ(0u, it2->size()); 3785 EXPECT_EQ(0u, it2->size());
3786 3786
3787 it->append(IntWrapper::create(42)); 3787 it->append(IntWrapper::create(42));
3788 it2->append(IntWrapper::create(42)); 3788 it2->append(IntWrapper::create(42));
3789 EXPECT_EQ(1u, it->size()); 3789 EXPECT_EQ(1u, it->size());
3790 EXPECT_EQ(1u, it2->size()); 3790 EXPECT_EQ(1u, it2->size());
3791 3791
3792 Persistent<HeapVector<IntVector> > keepAlive(vector); 3792 Persistent<HeapVector<IntVector>> keepAlive(vector);
3793 Persistent<HeapDeque<IntDeque> > keepAlive2(deque); 3793 Persistent<HeapDeque<IntDeque>> keepAlive2(deque);
3794 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3794 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3795 EXPECT_EQ(1u, it->size()); 3795 EXPECT_EQ(1u, it->size());
3796 EXPECT_EQ(1u, it2->size()); 3796 EXPECT_EQ(1u, it2->size());
3797 EXPECT_EQ(0, IntWrapper::s_destructorCalls); 3797 EXPECT_EQ(0, IntWrapper::s_destructorCalls);
3798 } 3798 }
3799 3799
3800 TEST(HeapTest, EmbeddedInVector) 3800 TEST(HeapTest, EmbeddedInVector)
3801 { 3801 {
3802 clearOutOldGarbage(); 3802 clearOutOldGarbage();
3803 SimpleFinalizedObject::s_destructorCalls = 0; 3803 SimpleFinalizedObject::s_destructorCalls = 0;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
3883 set.add(new int(42)); 3883 set.add(new int(42));
3884 EXPECT_EQ(2u, set.size()); 3884 EXPECT_EQ(2u, set.size());
3885 for (typename Set::iterator it = set.begin(); it != set.end(); ++it) { 3885 for (typename Set::iterator it = set.begin(); it != set.end(); ++it) {
3886 EXPECT_EQ(42, **it); 3886 EXPECT_EQ(42, **it);
3887 delete *it; 3887 delete *it;
3888 } 3888 }
3889 } 3889 }
3890 3890
3891 TEST(HeapTest, RawPtrInHash) 3891 TEST(HeapTest, RawPtrInHash)
3892 { 3892 {
3893 rawPtrInHashHelper<HashSet<RawPtr<int> > >(); 3893 rawPtrInHashHelper<HashSet<RawPtr<int>> >();
3894 rawPtrInHashHelper<ListHashSet<RawPtr<int> > >(); 3894 rawPtrInHashHelper<ListHashSet<RawPtr<int>> >();
3895 rawPtrInHashHelper<LinkedHashSet<RawPtr<int> > >(); 3895 rawPtrInHashHelper<LinkedHashSet<RawPtr<int>> >();
3896 } 3896 }
3897 3897
3898 TEST(HeapTest, HeapTerminatedArray) 3898 TEST(HeapTest, HeapTerminatedArray)
3899 { 3899 {
3900 clearOutOldGarbage(); 3900 clearOutOldGarbage();
3901 IntWrapper::s_destructorCalls = 0; 3901 IntWrapper::s_destructorCalls = 0;
3902 3902
3903 HeapTerminatedArray<TerminatedArrayItem>* arr = 0; 3903 HeapTerminatedArray<TerminatedArrayItem>* arr = 0;
3904 3904
3905 const size_t prefixSize = 4; 3905 const size_t prefixSize = 4;
(...skipping 21 matching lines...) Expand all
3927 arr = builder.release(); 3927 arr = builder.release();
3928 } 3928 }
3929 3929
3930 Heap::collectGarbage(ThreadState::HeapPointersOnStack); 3930 Heap::collectGarbage(ThreadState::HeapPointersOnStack);
3931 EXPECT_EQ(0, IntWrapper::s_destructorCalls); 3931 EXPECT_EQ(0, IntWrapper::s_destructorCalls);
3932 EXPECT_EQ(prefixSize + suffixSize, arr->size()); 3932 EXPECT_EQ(prefixSize + suffixSize, arr->size());
3933 for (size_t i = 0; i < prefixSize + suffixSize; i++) 3933 for (size_t i = 0; i < prefixSize + suffixSize; i++)
3934 EXPECT_EQ(i, static_cast<size_t>(arr->at(i).payload()->value())); 3934 EXPECT_EQ(i, static_cast<size_t>(arr->at(i).payload()->value()));
3935 3935
3936 { 3936 {
3937 Persistent<HeapTerminatedArray<TerminatedArrayItem> > persistentArr = ar r; 3937 Persistent<HeapTerminatedArray<TerminatedArrayItem>> persistentArr = arr ;
3938 arr = 0; 3938 arr = 0;
3939 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3939 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3940 arr = persistentArr.get(); 3940 arr = persistentArr.get();
3941 EXPECT_EQ(0, IntWrapper::s_destructorCalls); 3941 EXPECT_EQ(0, IntWrapper::s_destructorCalls);
3942 EXPECT_EQ(prefixSize + suffixSize, arr->size()); 3942 EXPECT_EQ(prefixSize + suffixSize, arr->size());
3943 for (size_t i = 0; i < prefixSize + suffixSize; i++) 3943 for (size_t i = 0; i < prefixSize + suffixSize; i++)
3944 EXPECT_EQ(i, static_cast<size_t>(arr->at(i).payload()->value())); 3944 EXPECT_EQ(i, static_cast<size_t>(arr->at(i).payload()->value()));
3945 } 3945 }
3946 3946
3947 arr = 0; 3947 arr = 0;
(...skipping 14 matching lines...) Expand all
3962 stack->push(TerminatedArrayItem(IntWrapper::create(i))); 3962 stack->push(TerminatedArrayItem(IntWrapper::create(i)));
3963 3963
3964 Heap::collectGarbage(ThreadState::HeapPointersOnStack); 3964 Heap::collectGarbage(ThreadState::HeapPointersOnStack);
3965 EXPECT_EQ(0, IntWrapper::s_destructorCalls); 3965 EXPECT_EQ(0, IntWrapper::s_destructorCalls);
3966 EXPECT_EQ(stackSize, stack->size()); 3966 EXPECT_EQ(stackSize, stack->size());
3967 while (!stack->isEmpty()) { 3967 while (!stack->isEmpty()) {
3968 EXPECT_EQ(stack->size() - 1, static_cast<size_t>(stack->peek().payload() ->value())); 3968 EXPECT_EQ(stack->size() - 1, static_cast<size_t>(stack->peek().payload() ->value()));
3969 stack->pop(); 3969 stack->pop();
3970 } 3970 }
3971 3971
3972 Persistent<HeapLinkedStack<TerminatedArrayItem> > pStack = stack; 3972 Persistent<HeapLinkedStack<TerminatedArrayItem>> pStack = stack;
3973 3973
3974 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3974 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3975 EXPECT_EQ(stackSize, static_cast<size_t>(IntWrapper::s_destructorCalls)); 3975 EXPECT_EQ(stackSize, static_cast<size_t>(IntWrapper::s_destructorCalls));
3976 EXPECT_EQ(0u, pStack->size()); 3976 EXPECT_EQ(0u, pStack->size());
3977 } 3977 }
3978 3978
3979 TEST(HeapTest, AllocationDuringFinalization) 3979 TEST(HeapTest, AllocationDuringFinalization)
3980 { 3980 {
3981 clearOutOldGarbage(); 3981 clearOutOldGarbage();
3982 IntWrapper::s_destructorCalls = 0; 3982 IntWrapper::s_destructorCalls = 0;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
4068 } 4068 }
4069 } 4069 }
4070 4070
4071 EXPECT_FALSE(RefCountedWithDestructor::s_wasDestructed); 4071 EXPECT_FALSE(RefCountedWithDestructor::s_wasDestructed);
4072 set.clear(); 4072 set.clear();
4073 EXPECT_TRUE(RefCountedWithDestructor::s_wasDestructed); 4073 EXPECT_TRUE(RefCountedWithDestructor::s_wasDestructed);
4074 } 4074 }
4075 4075
4076 TEST(HeapTest, DestructorsCalled) 4076 TEST(HeapTest, DestructorsCalled)
4077 { 4077 {
4078 HeapHashMap<SimpleClassWithDestructor*, OwnPtr<SimpleClassWithDestructor> > map; 4078 HeapHashMap<SimpleClassWithDestructor*, OwnPtr<SimpleClassWithDestructor>> m ap;
4079 SimpleClassWithDestructor* hasDestructor = new SimpleClassWithDestructor(); 4079 SimpleClassWithDestructor* hasDestructor = new SimpleClassWithDestructor();
4080 map.add(hasDestructor, adoptPtr(hasDestructor)); 4080 map.add(hasDestructor, adoptPtr(hasDestructor));
4081 SimpleClassWithDestructor::s_wasDestructed = false; 4081 SimpleClassWithDestructor::s_wasDestructed = false;
4082 map.clear(); 4082 map.clear();
4083 EXPECT_TRUE(SimpleClassWithDestructor::s_wasDestructed); 4083 EXPECT_TRUE(SimpleClassWithDestructor::s_wasDestructed);
4084 4084
4085 destructorsCalledOnClear<HeapHashSet<RefPtr<RefCountedWithDestructor> > >(fa lse); 4085 destructorsCalledOnClear<HeapHashSet<RefPtr<RefCountedWithDestructor>> >(fal se);
4086 destructorsCalledOnClear<HeapListHashSet<RefPtr<RefCountedWithDestructor> > >(false); 4086 destructorsCalledOnClear<HeapListHashSet<RefPtr<RefCountedWithDestructor>> > (false);
4087 destructorsCalledOnClear<HeapLinkedHashSet<RefPtr<RefCountedWithDestructor> > >(false); 4087 destructorsCalledOnClear<HeapLinkedHashSet<RefPtr<RefCountedWithDestructor>> >(false);
4088 destructorsCalledOnClear<HeapHashSet<RefPtr<RefCountedWithDestructor> > >(tr ue); 4088 destructorsCalledOnClear<HeapHashSet<RefPtr<RefCountedWithDestructor>> >(tru e);
4089 destructorsCalledOnClear<HeapListHashSet<RefPtr<RefCountedWithDestructor> > >(true); 4089 destructorsCalledOnClear<HeapListHashSet<RefPtr<RefCountedWithDestructor>> > (true);
4090 destructorsCalledOnClear<HeapLinkedHashSet<RefPtr<RefCountedWithDestructor> > >(true); 4090 destructorsCalledOnClear<HeapLinkedHashSet<RefPtr<RefCountedWithDestructor>> >(true);
4091 4091
4092 destructorsCalledOnGC<HeapHashSet<RefPtr<RefCountedWithDestructor> > >(false ); 4092 destructorsCalledOnGC<HeapHashSet<RefPtr<RefCountedWithDestructor>> >(false) ;
4093 destructorsCalledOnGC<HeapListHashSet<RefPtr<RefCountedWithDestructor> > >(f alse); 4093 destructorsCalledOnGC<HeapListHashSet<RefPtr<RefCountedWithDestructor>> >(fa lse);
4094 destructorsCalledOnGC<HeapLinkedHashSet<RefPtr<RefCountedWithDestructor> > > (false); 4094 destructorsCalledOnGC<HeapLinkedHashSet<RefPtr<RefCountedWithDestructor>> >( false);
4095 destructorsCalledOnGC<HeapHashSet<RefPtr<RefCountedWithDestructor> > >(true) ; 4095 destructorsCalledOnGC<HeapHashSet<RefPtr<RefCountedWithDestructor>> >(true);
4096 destructorsCalledOnGC<HeapListHashSet<RefPtr<RefCountedWithDestructor> > >(t rue); 4096 destructorsCalledOnGC<HeapListHashSet<RefPtr<RefCountedWithDestructor>> >(tr ue);
4097 destructorsCalledOnGC<HeapLinkedHashSet<RefPtr<RefCountedWithDestructor> > > (true); 4097 destructorsCalledOnGC<HeapLinkedHashSet<RefPtr<RefCountedWithDestructor>> >( true);
4098 } 4098 }
4099 4099
4100 class MixinA : public GarbageCollectedMixin { 4100 class MixinA : public GarbageCollectedMixin {
4101 public: 4101 public:
4102 MixinA() : m_obj(IntWrapper::create(100)) { } 4102 MixinA() : m_obj(IntWrapper::create(100)) { }
4103 virtual void trace(Visitor* visitor) 4103 virtual void trace(Visitor* visitor)
4104 { 4104 {
4105 visitor->trace(m_obj); 4105 visitor->trace(m_obj);
4106 } 4106 }
4107 Member<IntWrapper> m_obj; 4107 Member<IntWrapper> m_obj;
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
4278 Iterator i1 = set1->begin(); 4278 Iterator i1 = set1->begin();
4279 EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt); 4279 EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt);
4280 EXPECT_EQ(livingInt, i1->second); 4280 EXPECT_EQ(livingInt, i1->second);
4281 ++i1; 4281 ++i1;
4282 EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt); 4282 EXPECT_TRUE(i1->first->value() == 103 || i1->first == livingInt);
4283 EXPECT_EQ(livingInt, i1->second); 4283 EXPECT_EQ(livingInt, i1->second);
4284 } 4284 }
4285 4285
4286 TEST(HeapTest, SetWithCustomWeaknessHandling) 4286 TEST(HeapTest, SetWithCustomWeaknessHandling)
4287 { 4287 {
4288 setWithCustomWeaknessHandling<HeapHashSet<PairWithWeakHandling> >(); 4288 setWithCustomWeaknessHandling<HeapHashSet<PairWithWeakHandling>>();
4289 setWithCustomWeaknessHandling<HeapLinkedHashSet<PairWithWeakHandling> >(); 4289 setWithCustomWeaknessHandling<HeapLinkedHashSet<PairWithWeakHandling>>();
4290 } 4290 }
4291 4291
4292 TEST(HeapTest, MapWithCustomWeaknessHandling) 4292 TEST(HeapTest, MapWithCustomWeaknessHandling)
4293 { 4293 {
4294 typedef HeapHashMap<PairWithWeakHandling, RefPtr<OffHeapInt> > Map; 4294 typedef HeapHashMap<PairWithWeakHandling, RefPtr<OffHeapInt>> Map;
4295 typedef Map::iterator Iterator; 4295 typedef Map::iterator Iterator;
4296 clearOutOldGarbage(); 4296 clearOutOldGarbage();
4297 OffHeapInt::s_destructorCalls = 0; 4297 OffHeapInt::s_destructorCalls = 0;
4298 4298
4299 Persistent<Map> map1(new Map()); 4299 Persistent<Map> map1(new Map());
4300 Persistent<IntWrapper> livingInt(IntWrapper::create(42)); 4300 Persistent<IntWrapper> livingInt(IntWrapper::create(42));
4301 { 4301 {
4302 Map map2; 4302 Map map2;
4303 Map* map3 = new Map(); 4303 Map* map3 = new Map();
4304 map2.add(PairWithWeakHandling(IntWrapper::create(0), IntWrapper::create( 1)), OffHeapInt::create(1001)); 4304 map2.add(PairWithWeakHandling(IntWrapper::create(0), IntWrapper::create( 1)), OffHeapInt::create(1001));
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
4421 EXPECT_EQ(2, OffHeapInt::s_destructorCalls); 4421 EXPECT_EQ(2, OffHeapInt::s_destructorCalls);
4422 EXPECT_EQ(2u, map1->size()); 4422 EXPECT_EQ(2u, map1->size());
4423 Iterator i1 = map1->begin(); 4423 Iterator i1 = map1->begin();
4424 EXPECT_TRUE(i1->value.first->value() == 103 || i1->value.first == livingInt) ; 4424 EXPECT_TRUE(i1->value.first->value() == 103 || i1->value.first == livingInt) ;
4425 EXPECT_EQ(livingInt, i1->value.second); 4425 EXPECT_EQ(livingInt, i1->value.second);
4426 ++i1; 4426 ++i1;
4427 EXPECT_TRUE(i1->value.first->value() == 103 || i1->value.first == livingInt) ; 4427 EXPECT_TRUE(i1->value.first->value() == 103 || i1->value.first == livingInt) ;
4428 EXPECT_EQ(livingInt, i1->value.second); 4428 EXPECT_EQ(livingInt, i1->value.second);
4429 } 4429 }
4430 4430
4431 static void addElementsToWeakMap(HeapHashMap<int, WeakMember<IntWrapper> >* map) 4431 static void addElementsToWeakMap(HeapHashMap<int, WeakMember<IntWrapper>>* map)
4432 { 4432 {
4433 // Key cannot be zero in hashmap. 4433 // Key cannot be zero in hashmap.
4434 for (int i = 1; i < 11; i++) 4434 for (int i = 1; i < 11; i++)
4435 map->add(i, IntWrapper::create(i)); 4435 map->add(i, IntWrapper::create(i));
4436 } 4436 }
4437 4437
4438 // crbug.com/402426 4438 // crbug.com/402426
4439 // If it doesn't assert a concurrent modification to the map, then it's passing. 4439 // If it doesn't assert a concurrent modification to the map, then it's passing.
4440 TEST(HeapTest, RegressNullIsStrongified) 4440 TEST(HeapTest, RegressNullIsStrongified)
4441 { 4441 {
4442 Persistent<HeapHashMap<int, WeakMember<IntWrapper> > > map = new HeapHashMap <int, WeakMember<IntWrapper> >(); 4442 Persistent<HeapHashMap<int, WeakMember<IntWrapper>> > map = new HeapHashMap< int, WeakMember<IntWrapper>>();
4443 addElementsToWeakMap(map); 4443 addElementsToWeakMap(map);
4444 HeapHashMap<int, WeakMember<IntWrapper> >::AddResult result = map->add(800, nullptr); 4444 HeapHashMap<int, WeakMember<IntWrapper>>::AddResult result = map->add(800, n ullptr);
4445 Heap::collectGarbage(ThreadState::HeapPointersOnStack); 4445 Heap::collectGarbage(ThreadState::HeapPointersOnStack);
4446 result.storedValue->value = IntWrapper::create(42); 4446 result.storedValue->value = IntWrapper::create(42);
4447 } 4447 }
4448 4448
4449 TEST(HeapTest, Bind) 4449 TEST(HeapTest, Bind)
4450 { 4450 {
4451 OwnPtr<Closure> closure = bind(&Bar::trace, Bar::create(), static_cast<Visit or*>(0)); 4451 OwnPtr<Closure> closure = bind(&Bar::trace, Bar::create(), static_cast<Visit or*>(0));
4452 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 4452 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
4453 // The closure should have a persistent handle to the Bar. 4453 // The closure should have a persistent handle to the Bar.
4454 EXPECT_EQ(1u, Bar::s_live); 4454 EXPECT_EQ(1u, Bar::s_live);
4455 4455
4456 OwnPtr<Closure> closure2 = bind(&Bar::trace, RawPtr<Bar>(Bar::create()), sta tic_cast<Visitor*>(0)); 4456 OwnPtr<Closure> closure2 = bind(&Bar::trace, RawPtr<Bar>(Bar::create()), sta tic_cast<Visitor*>(0));
4457 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 4457 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
4458 // The closure should have a persistent handle to the Bar. 4458 // The closure should have a persistent handle to the Bar.
4459 EXPECT_EQ(2u, Bar::s_live); 4459 EXPECT_EQ(2u, Bar::s_live);
4460 // RawPtr<OffHeapInt> should not make Persistent. 4460 // RawPtr<OffHeapInt> should not make Persistent.
4461 OwnPtr<Closure> closure3 = bind(&OffHeapInt::voidFunction, RawPtr<OffHeapInt >(OffHeapInt::create(1).get())); 4461 OwnPtr<Closure> closure3 = bind(&OffHeapInt::voidFunction, RawPtr<OffHeapInt >(OffHeapInt::create(1).get()));
4462 4462
4463 UseMixin::s_traceCount = 0; 4463 UseMixin::s_traceCount = 0;
4464 Mixin* mixin = UseMixin::create(); 4464 Mixin* mixin = UseMixin::create();
4465 OwnPtr<Closure> mixinClosure = bind(&Mixin::trace, mixin, static_cast<Visito r*>(0)); 4465 OwnPtr<Closure> mixinClosure = bind(&Mixin::trace, mixin, static_cast<Visito r*>(0));
4466 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 4466 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
4467 // The closure should have a persistent handle to the mixin. 4467 // The closure should have a persistent handle to the mixin.
4468 EXPECT_EQ(1, UseMixin::s_traceCount); 4468 EXPECT_EQ(1, UseMixin::s_traceCount);
4469 } 4469 }
4470 4470
4471 typedef HeapHashSet<WeakMember<IntWrapper> > WeakSet; 4471 typedef HeapHashSet<WeakMember<IntWrapper>> WeakSet;
4472 4472
4473 // These special traits will remove a set from a map when the set is empty. 4473 // These special traits will remove a set from a map when the set is empty.
4474 struct EmptyClearingHashSetTraits : HashTraits<WeakSet> { 4474 struct EmptyClearingHashSetTraits : HashTraits<WeakSet> {
4475 static const WTF::WeakHandlingFlag weakHandlingFlag = WTF::WeakHandlingInCol lections; 4475 static const WTF::WeakHandlingFlag weakHandlingFlag = WTF::WeakHandlingInCol lections;
4476 static bool traceInCollection(Visitor* visitor, WeakSet& set, WTF::ShouldWea kPointersBeMarkedStrongly strongify) 4476 static bool traceInCollection(Visitor* visitor, WeakSet& set, WTF::ShouldWea kPointersBeMarkedStrongly strongify)
4477 { 4477 {
4478 bool liveEntriesFound = false; 4478 bool liveEntriesFound = false;
4479 WeakSet::iterator end = set.end(); 4479 WeakSet::iterator end = set.end();
4480 for (WeakSet::iterator it = set.begin(); it != end; ++it) { 4480 for (WeakSet::iterator it = set.begin(); it != end; ++it) {
4481 if (visitor->isAlive(*it)) { 4481 if (visitor->isAlive(*it)) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
4535 EXPECT_EQ(1u, set.size()); 4535 EXPECT_EQ(1u, set.size());
4536 } 4536 }
4537 4537
4538 livingInt.clear(); // The weak set can no longer keep the '42' alive now. 4538 livingInt.clear(); // The weak set can no longer keep the '42' alive now.
4539 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 4539 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
4540 EXPECT_EQ(0u, map->size()); 4540 EXPECT_EQ(0u, map->size());
4541 } 4541 }
4542 4542
4543 TEST(HeapTest, EphemeronsInEphemerons) 4543 TEST(HeapTest, EphemeronsInEphemerons)
4544 { 4544 {
4545 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper> > InnerMap; 4545 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper>> InnerMap;
4546 typedef HeapHashMap<WeakMember<IntWrapper>, InnerMap> OuterMap; 4546 typedef HeapHashMap<WeakMember<IntWrapper>, InnerMap> OuterMap;
4547 4547
4548 for (int keepOuterAlive = 0; keepOuterAlive <= 1; keepOuterAlive++) { 4548 for (int keepOuterAlive = 0; keepOuterAlive <= 1; keepOuterAlive++) {
4549 for (int keepInnerAlive = 0; keepInnerAlive <=1; keepInnerAlive++) { 4549 for (int keepInnerAlive = 0; keepInnerAlive <=1; keepInnerAlive++) {
4550 Persistent<OuterMap> outer = new OuterMap(); 4550 Persistent<OuterMap> outer = new OuterMap();
4551 Persistent<IntWrapper> one = IntWrapper::create(1); 4551 Persistent<IntWrapper> one = IntWrapper::create(1);
4552 Persistent<IntWrapper> two = IntWrapper::create(2); 4552 Persistent<IntWrapper> two = IntWrapper::create(2);
4553 outer->add(one, InnerMap()); 4553 outer->add(one, InnerMap());
4554 outer->begin()->value.add(two, IntWrapper::create(3)); 4554 outer->begin()->value.add(two, IntWrapper::create(3));
4555 EXPECT_EQ(1u, outer->get(one).size()); 4555 EXPECT_EQ(1u, outer->get(one).size());
(...skipping 11 matching lines...) Expand all
4567 } else { 4567 } else {
4568 EXPECT_EQ(0u, inner.size()); 4568 EXPECT_EQ(0u, inner.size());
4569 } 4569 }
4570 } else { 4570 } else {
4571 EXPECT_EQ(0u, outer->size()); 4571 EXPECT_EQ(0u, outer->size());
4572 } 4572 }
4573 outer->clear(); 4573 outer->clear();
4574 Persistent<IntWrapper> deep = IntWrapper::create(42); 4574 Persistent<IntWrapper> deep = IntWrapper::create(42);
4575 Persistent<IntWrapper> home = IntWrapper::create(103); 4575 Persistent<IntWrapper> home = IntWrapper::create(103);
4576 Persistent<IntWrapper> composite = IntWrapper::create(91); 4576 Persistent<IntWrapper> composite = IntWrapper::create(91);
4577 Persistent<HeapVector<Member<IntWrapper> > > keepAlive = new HeapVec tor<Member<IntWrapper> >(); 4577 Persistent<HeapVector<Member<IntWrapper>> > keepAlive = new HeapVect or<Member<IntWrapper>>();
4578 for (int i = 0; i < 10000; i++) { 4578 for (int i = 0; i < 10000; i++) {
4579 IntWrapper* value = IntWrapper::create(i); 4579 IntWrapper* value = IntWrapper::create(i);
4580 keepAlive->append(value); 4580 keepAlive->append(value);
4581 OuterMap::AddResult newEntry = outer->add(value, InnerMap()); 4581 OuterMap::AddResult newEntry = outer->add(value, InnerMap());
4582 newEntry.storedValue->value.add(deep, home); 4582 newEntry.storedValue->value.add(deep, home);
4583 newEntry.storedValue->value.add(composite, home); 4583 newEntry.storedValue->value.add(composite, home);
4584 } 4584 }
4585 composite.clear(); 4585 composite.clear();
4586 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 4586 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
4587 EXPECT_EQ(10000u, outer->size()); 4587 EXPECT_EQ(10000u, outer->size());
4588 for (int i = 0; i < 10000; i++) { 4588 for (int i = 0; i < 10000; i++) {
4589 IntWrapper* value = keepAlive->at(i); 4589 IntWrapper* value = keepAlive->at(i);
4590 EXPECT_EQ(1u, outer->get(value).size()); // Other one was delete d by weak handling. 4590 EXPECT_EQ(1u, outer->get(value).size()); // Other one was delete d by weak handling.
4591 if (i & 1) 4591 if (i & 1)
4592 keepAlive->at(i) = nullptr; 4592 keepAlive->at(i) = nullptr;
4593 } 4593 }
4594 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 4594 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
4595 EXPECT_EQ(5000u, outer->size()); 4595 EXPECT_EQ(5000u, outer->size());
4596 } 4596 }
4597 } 4597 }
4598 } 4598 }
4599 4599
4600 class EphemeronWrapper : public GarbageCollected<EphemeronWrapper> { 4600 class EphemeronWrapper : public GarbageCollected<EphemeronWrapper> {
4601 public: 4601 public:
4602 void trace(Visitor* visitor) 4602 void trace(Visitor* visitor)
4603 { 4603 {
4604 visitor->trace(m_map); 4604 visitor->trace(m_map);
4605 } 4605 }
4606 4606
4607 typedef HeapHashMap<WeakMember<IntWrapper>, Member<EphemeronWrapper> > Map; 4607 typedef HeapHashMap<WeakMember<IntWrapper>, Member<EphemeronWrapper>> Map;
4608 Map& map() { return m_map; } 4608 Map& map() { return m_map; }
4609 4609
4610 private: 4610 private:
4611 Map m_map; 4611 Map m_map;
4612 }; 4612 };
4613 4613
4614 TEST(HeapTest, EphemeronsPointToEphemerons) 4614 TEST(HeapTest, EphemeronsPointToEphemerons)
4615 { 4615 {
4616 Persistent<IntWrapper> key = IntWrapper::create(42); 4616 Persistent<IntWrapper> key = IntWrapper::create(42);
4617 Persistent<IntWrapper> key2 = IntWrapper::create(103); 4617 Persistent<IntWrapper> key2 = IntWrapper::create(103);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
4650 EXPECT_EQ(nullptr, wrapper); 4650 EXPECT_EQ(nullptr, wrapper);
4651 4651
4652 key.clear(); 4652 key.clear();
4653 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 4653 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
4654 EXPECT_EQ(0u, chain->map().size()); 4654 EXPECT_EQ(0u, chain->map().size());
4655 } 4655 }
4656 4656
4657 TEST(HeapTest, Ephemeron) 4657 TEST(HeapTest, Ephemeron)
4658 { 4658 {
4659 typedef HeapHashMap<WeakMember<IntWrapper>, PairWithWeakHandling> WeakPairM ap; 4659 typedef HeapHashMap<WeakMember<IntWrapper>, PairWithWeakHandling> WeakPairM ap;
4660 typedef HeapHashMap<PairWithWeakHandling, WeakMember<IntWrapper> > PairWeak Map; 4660 typedef HeapHashMap<PairWithWeakHandling, WeakMember<IntWrapper>> PairWeakM ap;
4661 typedef HeapHashSet<WeakMember<IntWrapper> > Set; 4661 typedef HeapHashSet<WeakMember<IntWrapper>> Set;
4662 4662
4663 Persistent<WeakPairMap> weakPairMap = new WeakPairMap(); 4663 Persistent<WeakPairMap> weakPairMap = new WeakPairMap();
4664 Persistent<WeakPairMap> weakPairMap2 = new WeakPairMap(); 4664 Persistent<WeakPairMap> weakPairMap2 = new WeakPairMap();
4665 Persistent<WeakPairMap> weakPairMap3 = new WeakPairMap(); 4665 Persistent<WeakPairMap> weakPairMap3 = new WeakPairMap();
4666 Persistent<WeakPairMap> weakPairMap4 = new WeakPairMap(); 4666 Persistent<WeakPairMap> weakPairMap4 = new WeakPairMap();
4667 4667
4668 Persistent<PairWeakMap> pairWeakMap = new PairWeakMap(); 4668 Persistent<PairWeakMap> pairWeakMap = new PairWeakMap();
4669 Persistent<PairWeakMap> pairWeakMap2 = new PairWeakMap(); 4669 Persistent<PairWeakMap> pairWeakMap2 = new PairWeakMap();
4670 4670
4671 Persistent<Set> set = new Set(); 4671 Persistent<Set> set = new Set();
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
4748 } 4748 }
4749 4749
4750 IntWrapper* link() { return m_link; } 4750 IntWrapper* link() { return m_link; }
4751 4751
4752 private: 4752 private:
4753 Member<IntWrapper> m_link; 4753 Member<IntWrapper> m_link;
4754 }; 4754 };
4755 4755
4756 TEST(HeapTest, IndirectStrongToWeak) 4756 TEST(HeapTest, IndirectStrongToWeak)
4757 { 4757 {
4758 typedef HeapHashMap<WeakMember<IntWrapper>, Member<Link1> > Map; 4758 typedef HeapHashMap<WeakMember<IntWrapper>, Member<Link1>> Map;
4759 Persistent<Map> map = new Map(); 4759 Persistent<Map> map = new Map();
4760 Persistent<IntWrapper> deadObject = IntWrapper::create(100); // Named for "D rowning by Numbers" (1988). 4760 Persistent<IntWrapper> deadObject = IntWrapper::create(100); // Named for "D rowning by Numbers" (1988).
4761 Persistent<IntWrapper> lifeObject = IntWrapper::create(42); 4761 Persistent<IntWrapper> lifeObject = IntWrapper::create(42);
4762 map->add(deadObject, new Link1(deadObject)); 4762 map->add(deadObject, new Link1(deadObject));
4763 map->add(lifeObject, new Link1(lifeObject)); 4763 map->add(lifeObject, new Link1(lifeObject));
4764 EXPECT_EQ(2u, map->size()); 4764 EXPECT_EQ(2u, map->size());
4765 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 4765 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
4766 EXPECT_EQ(2u, map->size()); 4766 EXPECT_EQ(2u, map->size());
4767 EXPECT_EQ(deadObject, map->get(deadObject)->link()); 4767 EXPECT_EQ(deadObject, map->get(deadObject)->link());
4768 EXPECT_EQ(lifeObject, map->get(lifeObject)->link()); 4768 EXPECT_EQ(lifeObject, map->get(lifeObject)->link());
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
4954 4954
4955 // Wait for the worker thread to sweep its heaps before checking. 4955 // Wait for the worker thread to sweep its heaps before checking.
4956 { 4956 {
4957 ThreadState::SafePointScope scope(ThreadState::NoHeapPointersOnStack ); 4957 ThreadState::SafePointScope scope(ThreadState::NoHeapPointersOnStack );
4958 parkMainThread(); 4958 parkMainThread();
4959 } 4959 }
4960 } 4960 }
4961 4961
4962 private: 4962 private:
4963 4963
4964 static HeapHashSet<WeakMember<IntWrapper> >* allocateCollection() 4964 static HeapHashSet<WeakMember<IntWrapper>>* allocateCollection()
4965 { 4965 {
4966 // Create a weak collection that is kept alive by a persistent 4966 // Create a weak collection that is kept alive by a persistent
4967 // and keep the contents alive with a persistents as 4967 // and keep the contents alive with a persistents as
4968 // well. 4968 // well.
4969 Persistent<IntWrapper> wrapper1 = IntWrapper::create(32); 4969 Persistent<IntWrapper> wrapper1 = IntWrapper::create(32);
4970 Persistent<IntWrapper> wrapper2 = IntWrapper::create(32); 4970 Persistent<IntWrapper> wrapper2 = IntWrapper::create(32);
4971 Persistent<IntWrapper> wrapper3 = IntWrapper::create(32); 4971 Persistent<IntWrapper> wrapper3 = IntWrapper::create(32);
4972 Persistent<IntWrapper> wrapper4 = IntWrapper::create(32); 4972 Persistent<IntWrapper> wrapper4 = IntWrapper::create(32);
4973 Persistent<IntWrapper> wrapper5 = IntWrapper::create(32); 4973 Persistent<IntWrapper> wrapper5 = IntWrapper::create(32);
4974 Persistent<IntWrapper> wrapper6 = IntWrapper::create(32); 4974 Persistent<IntWrapper> wrapper6 = IntWrapper::create(32);
4975 Persistent<HeapHashSet<WeakMember<IntWrapper> > > weakCollection = new H eapHashSet<WeakMember<IntWrapper> >; 4975 Persistent<HeapHashSet<WeakMember<IntWrapper>> > weakCollection = new He apHashSet<WeakMember<IntWrapper>>;
4976 weakCollection->add(wrapper1); 4976 weakCollection->add(wrapper1);
4977 weakCollection->add(wrapper2); 4977 weakCollection->add(wrapper2);
4978 weakCollection->add(wrapper3); 4978 weakCollection->add(wrapper3);
4979 weakCollection->add(wrapper4); 4979 weakCollection->add(wrapper4);
4980 weakCollection->add(wrapper5); 4980 weakCollection->add(wrapper5);
4981 weakCollection->add(wrapper6); 4981 weakCollection->add(wrapper6);
4982 4982
4983 // Signal the main thread that the worker is done with its allocation. 4983 // Signal the main thread that the worker is done with its allocation.
4984 wakeMainThread(); 4984 wakeMainThread();
4985 4985
(...skipping 11 matching lines...) Expand all
4997 return weakCollection; 4997 return weakCollection;
4998 } 4998 }
4999 4999
5000 static void workerThreadMain() 5000 static void workerThreadMain()
5001 { 5001 {
5002 MutexLocker locker(workerThreadMutex()); 5002 MutexLocker locker(workerThreadMutex());
5003 5003
5004 ThreadState::attach(); 5004 ThreadState::attach();
5005 5005
5006 { 5006 {
5007 Persistent<HeapHashSet<WeakMember<IntWrapper> > > collection = alloc ateCollection(); 5007 Persistent<HeapHashSet<WeakMember<IntWrapper>> > collection = alloca teCollection();
5008 { 5008 {
5009 // Prevent weak processing with an iterator and GC. 5009 // Prevent weak processing with an iterator and GC.
5010 HeapHashSet<WeakMember<IntWrapper> >::iterator it = collection-> begin(); 5010 HeapHashSet<WeakMember<IntWrapper>>::iterator it = collection->b egin();
5011 Heap::collectGarbage(ThreadState::HeapPointersOnStack); 5011 Heap::collectGarbage(ThreadState::HeapPointersOnStack);
5012 5012
5013 // The backing should be strongified because of the iterator. 5013 // The backing should be strongified because of the iterator.
5014 EXPECT_EQ(6u, collection->size()); 5014 EXPECT_EQ(6u, collection->size());
5015 EXPECT_EQ(32, (*it)->value()); 5015 EXPECT_EQ(32, (*it)->value());
5016 } 5016 }
5017 5017
5018 // Disregarding the iterator but keeping the collection alive 5018 // Disregarding the iterator but keeping the collection alive
5019 // with a persistent should lead to weak processing. 5019 // with a persistent should lead to weak processing.
5020 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 5020 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
5178 5178
5179 static volatile IntWrapper* s_workerObjectPointer; 5179 static volatile IntWrapper* s_workerObjectPointer;
5180 }; 5180 };
5181 5181
5182 TEST(HeapTest, RecursiveMutex) 5182 TEST(HeapTest, RecursiveMutex)
5183 { 5183 {
5184 RecursiveLockingTester::test(); 5184 RecursiveLockingTester::test();
5185 } 5185 }
5186 5186
5187 template<typename T> 5187 template<typename T>
5188 class TraceIfNeededTester : public GarbageCollectedFinalized<TraceIfNeededTester <T> > { 5188 class TraceIfNeededTester : public GarbageCollectedFinalized<TraceIfNeededTester <T>> {
5189 public: 5189 public:
5190 static TraceIfNeededTester<T>* create() { return new TraceIfNeededTester<T>( ); } 5190 static TraceIfNeededTester<T>* create() { return new TraceIfNeededTester<T>( ); }
5191 static TraceIfNeededTester<T>* create(const T& obj) { return new TraceIfNeed edTester<T>(obj); } 5191 static TraceIfNeededTester<T>* create(const T& obj) { return new TraceIfNeed edTester<T>(obj); }
5192 void trace(Visitor* visitor) { TraceIfNeeded<T>::trace(visitor, &m_obj); } 5192 void trace(Visitor* visitor) { TraceIfNeeded<T>::trace(visitor, &m_obj); }
5193 T& obj() { return m_obj; } 5193 T& obj() { return m_obj; }
5194 ~TraceIfNeededTester() { } 5194 ~TraceIfNeededTester() { }
5195 private: 5195 private:
5196 TraceIfNeededTester() { } 5196 TraceIfNeededTester() { }
5197 explicit TraceIfNeededTester(const T& obj) : m_obj(obj) { } 5197 explicit TraceIfNeededTester(const T& obj) : m_obj(obj) { }
5198 T m_obj; 5198 T m_obj;
5199 }; 5199 };
5200 5200
5201 class PartObject { 5201 class PartObject {
5202 DISALLOW_ALLOCATION(); 5202 DISALLOW_ALLOCATION();
5203 public: 5203 public:
5204 PartObject() : m_obj(SimpleObject::create()) { } 5204 PartObject() : m_obj(SimpleObject::create()) { }
5205 void trace(Visitor* visitor) { visitor->trace(m_obj); } 5205 void trace(Visitor* visitor) { visitor->trace(m_obj); }
5206 private: 5206 private:
5207 Member<SimpleObject> m_obj; 5207 Member<SimpleObject> m_obj;
5208 }; 5208 };
5209 5209
5210 TEST(HeapTest, TraceIfNeeded) 5210 TEST(HeapTest, TraceIfNeeded)
5211 { 5211 {
5212 CountingVisitor visitor; 5212 CountingVisitor visitor;
5213 5213
5214 { 5214 {
5215 TraceIfNeededTester<RefPtr<OffHeapInt> >* m_offHeap = TraceIfNeededTeste r<RefPtr<OffHeapInt> >::create(OffHeapInt::create(42)); 5215 TraceIfNeededTester<RefPtr<OffHeapInt>>* m_offHeap = TraceIfNeededTester <RefPtr<OffHeapInt>>::create(OffHeapInt::create(42));
5216 visitor.reset(); 5216 visitor.reset();
5217 m_offHeap->trace(&visitor); 5217 m_offHeap->trace(&visitor);
5218 EXPECT_EQ(0u, visitor.count()); 5218 EXPECT_EQ(0u, visitor.count());
5219 } 5219 }
5220 5220
5221 { 5221 {
5222 TraceIfNeededTester<PartObject>* m_part = TraceIfNeededTester<PartObject >::create(); 5222 TraceIfNeededTester<PartObject>* m_part = TraceIfNeededTester<PartObject >::create();
5223 visitor.reset(); 5223 visitor.reset();
5224 m_part->trace(&visitor); 5224 m_part->trace(&visitor);
5225 EXPECT_EQ(1u, visitor.count()); 5225 EXPECT_EQ(1u, visitor.count());
5226 } 5226 }
5227 5227
5228 { 5228 {
5229 TraceIfNeededTester<Member<SimpleObject> >* m_obj = TraceIfNeededTester< Member<SimpleObject> >::create(Member<SimpleObject>(SimpleObject::create())); 5229 TraceIfNeededTester<Member<SimpleObject>>* m_obj = TraceIfNeededTester<M ember<SimpleObject>>::create(Member<SimpleObject>(SimpleObject::create()));
5230 visitor.reset(); 5230 visitor.reset();
5231 m_obj->trace(&visitor); 5231 m_obj->trace(&visitor);
5232 EXPECT_EQ(1u, visitor.count()); 5232 EXPECT_EQ(1u, visitor.count());
5233 } 5233 }
5234 5234
5235 { 5235 {
5236 TraceIfNeededTester<HeapVector<Member<SimpleObject> > >* m_vec = TraceIf NeededTester<HeapVector<Member<SimpleObject> > >::create(); 5236 TraceIfNeededTester<HeapVector<Member<SimpleObject>> >* m_vec = TraceIfN eededTester<HeapVector<Member<SimpleObject>> >::create();
5237 m_vec->obj().append(SimpleObject::create()); 5237 m_vec->obj().append(SimpleObject::create());
5238 visitor.reset(); 5238 visitor.reset();
5239 m_vec->trace(&visitor); 5239 m_vec->trace(&visitor);
5240 EXPECT_EQ(2u, visitor.count()); 5240 EXPECT_EQ(2u, visitor.count());
5241 } 5241 }
5242 } 5242 }
5243 5243
5244 class AllocatesOnAssignment { 5244 class AllocatesOnAssignment {
5245 public: 5245 public:
5246 AllocatesOnAssignment(std::nullptr_t) 5246 AllocatesOnAssignment(std::nullptr_t)
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
5531 // re-adjusting both start&end indices in terms of that expanded buffer. 5531 // re-adjusting both start&end indices in terms of that expanded buffer.
5532 EXPECT_EQ(80u, deque->size()); 5532 EXPECT_EQ(80u, deque->size());
5533 i = 0; 5533 i = 0;
5534 for (const auto& intWrapper : *deque) { 5534 for (const auto& intWrapper : *deque) {
5535 EXPECT_EQ(i + 50, intWrapper->value()); 5535 EXPECT_EQ(i + 50, intWrapper->value());
5536 i++; 5536 i++;
5537 } 5537 }
5538 } 5538 }
5539 5539
5540 } // namespace blink 5540 } // namespace blink
OLDNEW
« no previous file with comments | « Source/platform/heap/HeapTerminatedArray.h ('k') | Source/platform/heap/Visitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698