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

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

Issue 260713004: Add HeapHashCountedSet (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 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 1876 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 typedef std::pair<Member<IntWrapper>, WeakMember<IntWrapper> > PairStrongWeak; 1887 typedef std::pair<Member<IntWrapper>, WeakMember<IntWrapper> > PairStrongWeak;
1888 typedef std::pair<WeakMember<IntWrapper>, int> PairWeakUnwrapped; 1888 typedef std::pair<WeakMember<IntWrapper>, int> PairWeakUnwrapped;
1889 typedef std::pair<int, WeakMember<IntWrapper> > PairUnwrappedWeak; 1889 typedef std::pair<int, WeakMember<IntWrapper> > PairUnwrappedWeak;
1890 1890
1891 class Container : public GarbageCollected<Container> { 1891 class Container : public GarbageCollected<Container> {
1892 public: 1892 public:
1893 static Container* create() { return new Container(); } 1893 static Container* create() { return new Container(); }
1894 HeapHashMap<Member<IntWrapper>, Member<IntWrapper> > map; 1894 HeapHashMap<Member<IntWrapper>, Member<IntWrapper> > map;
1895 HeapHashSet<Member<IntWrapper> > set; 1895 HeapHashSet<Member<IntWrapper> > set;
1896 HeapHashSet<Member<IntWrapper> > set2; 1896 HeapHashSet<Member<IntWrapper> > set2;
1897 HeapHashCountedSet<Member<IntWrapper> > set3;
1897 HeapVector<Member<IntWrapper>, 2> vector; 1898 HeapVector<Member<IntWrapper>, 2> vector;
1898 HeapVector<PairWrappedUnwrapped, 2> vectorWU; 1899 HeapVector<PairWrappedUnwrapped, 2> vectorWU;
1899 HeapVector<PairUnwrappedWrapped, 2> vectorUW; 1900 HeapVector<PairUnwrappedWrapped, 2> vectorUW;
1900 HeapDeque<Member<IntWrapper>, 0> deque; 1901 HeapDeque<Member<IntWrapper>, 0> deque;
1901 HeapDeque<PairWrappedUnwrapped, 0> dequeWU; 1902 HeapDeque<PairWrappedUnwrapped, 0> dequeWU;
1902 HeapDeque<PairUnwrappedWrapped, 0> dequeUW; 1903 HeapDeque<PairUnwrappedWrapped, 0> dequeUW;
1903 void trace(Visitor* visitor) 1904 void trace(Visitor* visitor)
1904 { 1905 {
1905 visitor->trace(map); 1906 visitor->trace(map);
1906 visitor->trace(set); 1907 visitor->trace(set);
1907 visitor->trace(set2); 1908 visitor->trace(set2);
1909 visitor->trace(set3);
1908 visitor->trace(vector); 1910 visitor->trace(vector);
1909 visitor->trace(vectorWU); 1911 visitor->trace(vectorWU);
1910 visitor->trace(vectorUW); 1912 visitor->trace(vectorUW);
1911 visitor->trace(deque); 1913 visitor->trace(deque);
1912 visitor->trace(dequeWU); 1914 visitor->trace(dequeWU);
1913 visitor->trace(dequeUW); 1915 visitor->trace(dequeUW);
1914 } 1916 }
1915 }; 1917 };
1916 1918
1917 struct ShouldBeTraced { 1919 struct ShouldBeTraced {
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
2115 TEST(HeapTest, HeapCollectionTypes) 2117 TEST(HeapTest, HeapCollectionTypes)
2116 { 2118 {
2117 HeapStats initialHeapSize; 2119 HeapStats initialHeapSize;
2118 IntWrapper::s_destructorCalls = 0; 2120 IntWrapper::s_destructorCalls = 0;
2119 2121
2120 typedef HeapHashMap<Member<IntWrapper>, Member<IntWrapper> > MemberMember; 2122 typedef HeapHashMap<Member<IntWrapper>, Member<IntWrapper> > MemberMember;
2121 typedef HeapHashMap<Member<IntWrapper>, int> MemberPrimitive; 2123 typedef HeapHashMap<Member<IntWrapper>, int> MemberPrimitive;
2122 typedef HeapHashMap<int, Member<IntWrapper> > PrimitiveMember; 2124 typedef HeapHashMap<int, Member<IntWrapper> > PrimitiveMember;
2123 2125
2124 typedef HeapHashSet<Member<IntWrapper> > MemberSet; 2126 typedef HeapHashSet<Member<IntWrapper> > MemberSet;
2127 typedef HeapHashCountedSet<Member<IntWrapper> > MemberCountedSet;
2125 2128
2126 typedef HeapVector<Member<IntWrapper>, 2> MemberVector; 2129 typedef HeapVector<Member<IntWrapper>, 2> MemberVector;
2127 typedef HeapDeque<Member<IntWrapper>, 0> MemberDeque; 2130 typedef HeapDeque<Member<IntWrapper>, 0> MemberDeque;
2128 2131
2129 typedef HeapVector<PairWrappedUnwrapped, 2> VectorWU; 2132 typedef HeapVector<PairWrappedUnwrapped, 2> VectorWU;
2130 typedef HeapVector<PairUnwrappedWrapped, 2> VectorUW; 2133 typedef HeapVector<PairUnwrappedWrapped, 2> VectorUW;
2131 typedef HeapDeque<PairWrappedUnwrapped, 0> DequeWU; 2134 typedef HeapDeque<PairWrappedUnwrapped, 0> DequeWU;
2132 typedef HeapDeque<PairUnwrappedWrapped, 0> DequeUW; 2135 typedef HeapDeque<PairUnwrappedWrapped, 0> DequeUW;
2133 2136
2134 Persistent<MemberMember> memberMember = new MemberMember(); 2137 Persistent<MemberMember> memberMember = new MemberMember();
2135 Persistent<MemberMember> memberMember2 = new MemberMember(); 2138 Persistent<MemberMember> memberMember2 = new MemberMember();
2136 Persistent<MemberMember> memberMember3 = new MemberMember(); 2139 Persistent<MemberMember> memberMember3 = new MemberMember();
2137 Persistent<MemberPrimitive> memberPrimitive = new MemberPrimitive(); 2140 Persistent<MemberPrimitive> memberPrimitive = new MemberPrimitive();
2138 Persistent<PrimitiveMember> primitiveMember = new PrimitiveMember(); 2141 Persistent<PrimitiveMember> primitiveMember = new PrimitiveMember();
2139 Persistent<MemberSet> set = new MemberSet(); 2142 Persistent<MemberSet> set = new MemberSet();
2140 Persistent<MemberSet> set2 = new MemberSet(); 2143 Persistent<MemberSet> set2 = new MemberSet();
2144 Persistent<MemberCountedSet> set3 = new MemberCountedSet();
2141 Persistent<MemberVector> vector = new MemberVector(); 2145 Persistent<MemberVector> vector = new MemberVector();
2142 Persistent<MemberVector> vector2 = new MemberVector(); 2146 Persistent<MemberVector> vector2 = new MemberVector();
2143 Persistent<VectorWU> vectorWU = new VectorWU(); 2147 Persistent<VectorWU> vectorWU = new VectorWU();
2144 Persistent<VectorWU> vectorWU2 = new VectorWU(); 2148 Persistent<VectorWU> vectorWU2 = new VectorWU();
2145 Persistent<VectorUW> vectorUW = new VectorUW(); 2149 Persistent<VectorUW> vectorUW = new VectorUW();
2146 Persistent<VectorUW> vectorUW2 = new VectorUW(); 2150 Persistent<VectorUW> vectorUW2 = new VectorUW();
2147 Persistent<MemberDeque> deque = new MemberDeque(); 2151 Persistent<MemberDeque> deque = new MemberDeque();
2148 Persistent<MemberDeque> deque2 = new MemberDeque(); 2152 Persistent<MemberDeque> deque2 = new MemberDeque();
2149 Persistent<DequeWU> dequeWU = new DequeWU(); 2153 Persistent<DequeWU> dequeWU = new DequeWU();
2150 Persistent<DequeWU> dequeWU2 = new DequeWU(); 2154 Persistent<DequeWU> dequeWU2 = new DequeWU();
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2191 primitiveMember->add(4, one); 2195 primitiveMember->add(4, one);
2192 memberPrimitive->add(one, 2); 2196 memberPrimitive->add(one, 2);
2193 memberPrimitive->add(two, 3); 2197 memberPrimitive->add(two, 3);
2194 memberPrimitive->add(three, 4); 2198 memberPrimitive->add(three, 4);
2195 memberPrimitive->add(four, 1); 2199 memberPrimitive->add(four, 1);
2196 set2->add(one); 2200 set2->add(one);
2197 set2->add(two); 2201 set2->add(two);
2198 set2->add(three); 2202 set2->add(three);
2199 set2->add(four); 2203 set2->add(four);
2200 set->add(oneB); 2204 set->add(oneB);
2205 set3->add(oneB);
2206 set3->add(oneB);
2201 vector->append(oneB); 2207 vector->append(oneB);
2202 deque->append(oneB); 2208 deque->append(oneB);
2203 vector2->append(threeB); 2209 vector2->append(threeB);
2204 vector2->append(fourB); 2210 vector2->append(fourB);
2205 deque2->append(threeE); 2211 deque2->append(threeE);
2206 deque2->append(fourE); 2212 deque2->append(fourE);
2207 vectorWU->append(PairWrappedUnwrapped(&*oneC, 42)); 2213 vectorWU->append(PairWrappedUnwrapped(&*oneC, 42));
2208 dequeWU->append(PairWrappedUnwrapped(&*oneE, 42)); 2214 dequeWU->append(PairWrappedUnwrapped(&*oneE, 42));
2209 vectorWU2->append(PairWrappedUnwrapped(&*threeC, 43)); 2215 vectorWU2->append(PairWrappedUnwrapped(&*threeC, 43));
2210 vectorWU2->append(PairWrappedUnwrapped(&*fourC, 44)); 2216 vectorWU2->append(PairWrappedUnwrapped(&*fourC, 44));
(...skipping 17 matching lines...) Expand all
2228 Heap::collectGarbage(ThreadState::HeapPointersOnStack); 2234 Heap::collectGarbage(ThreadState::HeapPointersOnStack);
2229 2235
2230 EXPECT_TRUE(dequeContains(*deque, oneB)); 2236 EXPECT_TRUE(dequeContains(*deque, oneB));
2231 2237
2232 EXPECT_EQ(0u, memberMember->size()); 2238 EXPECT_EQ(0u, memberMember->size());
2233 EXPECT_EQ(4u, memberMember2->size()); 2239 EXPECT_EQ(4u, memberMember2->size());
2234 EXPECT_EQ(4u, primitiveMember->size()); 2240 EXPECT_EQ(4u, primitiveMember->size());
2235 EXPECT_EQ(4u, memberPrimitive->size()); 2241 EXPECT_EQ(4u, memberPrimitive->size());
2236 EXPECT_EQ(1u, set->size()); 2242 EXPECT_EQ(1u, set->size());
2237 EXPECT_EQ(4u, set2->size()); 2243 EXPECT_EQ(4u, set2->size());
2244 EXPECT_EQ(1u, set3->size());
2238 EXPECT_EQ(1u, vector->size()); 2245 EXPECT_EQ(1u, vector->size());
2239 EXPECT_EQ(2u, vector2->size()); 2246 EXPECT_EQ(2u, vector2->size());
2240 EXPECT_EQ(1u, vectorWU->size()); 2247 EXPECT_EQ(1u, vectorWU->size());
2241 EXPECT_EQ(3u, vectorWU2->size()); 2248 EXPECT_EQ(3u, vectorWU2->size());
2242 EXPECT_EQ(1u, vectorUW->size()); 2249 EXPECT_EQ(1u, vectorUW->size());
2243 EXPECT_EQ(3u, vectorUW2->size()); 2250 EXPECT_EQ(3u, vectorUW2->size());
2244 EXPECT_EQ(1u, deque->size()); 2251 EXPECT_EQ(1u, deque->size());
2245 EXPECT_EQ(2u, deque2->size()); 2252 EXPECT_EQ(2u, deque2->size());
2246 EXPECT_EQ(1u, dequeWU->size()); 2253 EXPECT_EQ(1u, dequeWU->size());
2247 EXPECT_EQ(3u, dequeWU2->size()); 2254 EXPECT_EQ(3u, dequeWU2->size());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2280 2287
2281 // Swap set and set2 in a roundabout way. 2288 // Swap set and set2 in a roundabout way.
2282 MemberSet& cset1 = container->set; 2289 MemberSet& cset1 = container->set;
2283 MemberSet& cset2 = container->set2; 2290 MemberSet& cset2 = container->set2;
2284 set->swap(cset1); 2291 set->swap(cset1);
2285 set2->swap(cset2); 2292 set2->swap(cset2);
2286 set->swap(cset2); 2293 set->swap(cset2);
2287 cset1.swap(cset2); 2294 cset1.swap(cset2);
2288 cset2.swap(set2); 2295 cset2.swap(set2);
2289 2296
2297 MemberCountedSet& cCountedSet = container->set3;
2298 set3->swap(cCountedSet);
2299 EXPECT_EQ(0u, set3->size());
2300 set3->swap(cCountedSet);
2301
2290 // Triple swap. 2302 // Triple swap.
2291 container->map.swap(memberMember2); 2303 container->map.swap(memberMember2);
2292 MemberMember& containedMap = container->map; 2304 MemberMember& containedMap = container->map;
2293 memberMember3->swap(containedMap); 2305 memberMember3->swap(containedMap);
2294 memberMember3->swap(memberMember); 2306 memberMember3->swap(memberMember);
2295 2307
2296 EXPECT_TRUE(memberMember->get(one) == two); 2308 EXPECT_TRUE(memberMember->get(one) == two);
2297 EXPECT_TRUE(memberMember->get(two) == three); 2309 EXPECT_TRUE(memberMember->get(two) == three);
2298 EXPECT_TRUE(memberMember->get(three) == four); 2310 EXPECT_TRUE(memberMember->get(three) == four);
2299 EXPECT_TRUE(memberMember->get(four) == one); 2311 EXPECT_TRUE(memberMember->get(four) == one);
2300 EXPECT_TRUE(primitiveMember->get(1) == two); 2312 EXPECT_TRUE(primitiveMember->get(1) == two);
2301 EXPECT_TRUE(primitiveMember->get(2) == three); 2313 EXPECT_TRUE(primitiveMember->get(2) == three);
2302 EXPECT_TRUE(primitiveMember->get(3) == four); 2314 EXPECT_TRUE(primitiveMember->get(3) == four);
2303 EXPECT_TRUE(primitiveMember->get(4) == one); 2315 EXPECT_TRUE(primitiveMember->get(4) == one);
2304 EXPECT_EQ(1, memberPrimitive->get(four)); 2316 EXPECT_EQ(1, memberPrimitive->get(four));
2305 EXPECT_EQ(2, memberPrimitive->get(one)); 2317 EXPECT_EQ(2, memberPrimitive->get(one));
2306 EXPECT_EQ(3, memberPrimitive->get(two)); 2318 EXPECT_EQ(3, memberPrimitive->get(two));
2307 EXPECT_EQ(4, memberPrimitive->get(three)); 2319 EXPECT_EQ(4, memberPrimitive->get(three));
2308 EXPECT_TRUE(set->contains(one)); 2320 EXPECT_TRUE(set->contains(one));
2309 EXPECT_TRUE(set->contains(two)); 2321 EXPECT_TRUE(set->contains(two));
2310 EXPECT_TRUE(set->contains(three)); 2322 EXPECT_TRUE(set->contains(three));
2311 EXPECT_TRUE(set->contains(four)); 2323 EXPECT_TRUE(set->contains(four));
2312 EXPECT_TRUE(set2->contains(oneB)); 2324 EXPECT_TRUE(set2->contains(oneB));
2325 EXPECT_TRUE(set3->contains(oneB));
2313 EXPECT_TRUE(vector->contains(threeB)); 2326 EXPECT_TRUE(vector->contains(threeB));
2314 EXPECT_TRUE(vector->contains(fourB)); 2327 EXPECT_TRUE(vector->contains(fourB));
2315 EXPECT_TRUE(dequeContains(*deque, threeE)); 2328 EXPECT_TRUE(dequeContains(*deque, threeE));
2316 EXPECT_TRUE(dequeContains(*deque, fourE)); 2329 EXPECT_TRUE(dequeContains(*deque, fourE));
2317 EXPECT_TRUE(vector2->contains(oneB)); 2330 EXPECT_TRUE(vector2->contains(oneB));
2318 EXPECT_FALSE(vector2->contains(threeB)); 2331 EXPECT_FALSE(vector2->contains(threeB));
2319 EXPECT_TRUE(dequeContains(*deque2, oneB)); 2332 EXPECT_TRUE(dequeContains(*deque2, oneB));
2320 EXPECT_FALSE(dequeContains(*deque2, threeE)); 2333 EXPECT_FALSE(dequeContains(*deque2, threeE));
2321 EXPECT_TRUE(vectorWU->contains(PairWrappedUnwrapped(&*threeC, 43))); 2334 EXPECT_TRUE(vectorWU->contains(PairWrappedUnwrapped(&*threeC, 43)));
2322 EXPECT_TRUE(vectorWU->contains(PairWrappedUnwrapped(&*fourC, 44))); 2335 EXPECT_TRUE(vectorWU->contains(PairWrappedUnwrapped(&*fourC, 44)));
(...skipping 18 matching lines...) Expand all
2341 } 2354 }
2342 2355
2343 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 2356 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
2344 2357
2345 EXPECT_EQ(4u, memberMember->size()); 2358 EXPECT_EQ(4u, memberMember->size());
2346 EXPECT_EQ(0u, memberMember2->size()); 2359 EXPECT_EQ(0u, memberMember2->size());
2347 EXPECT_EQ(4u, primitiveMember->size()); 2360 EXPECT_EQ(4u, primitiveMember->size());
2348 EXPECT_EQ(4u, memberPrimitive->size()); 2361 EXPECT_EQ(4u, memberPrimitive->size());
2349 EXPECT_EQ(4u, set->size()); 2362 EXPECT_EQ(4u, set->size());
2350 EXPECT_EQ(1u, set2->size()); 2363 EXPECT_EQ(1u, set2->size());
2364 EXPECT_EQ(1u, set3->size());
2351 EXPECT_EQ(2u, vector->size()); 2365 EXPECT_EQ(2u, vector->size());
2352 EXPECT_EQ(1u, vector2->size()); 2366 EXPECT_EQ(1u, vector2->size());
2353 EXPECT_EQ(3u, vectorUW->size()); 2367 EXPECT_EQ(3u, vectorUW->size());
2354 EXPECT_EQ(1u, vector2->size()); 2368 EXPECT_EQ(1u, vector2->size());
2355 EXPECT_EQ(2u, deque->size()); 2369 EXPECT_EQ(2u, deque->size());
2356 EXPECT_EQ(1u, deque2->size()); 2370 EXPECT_EQ(1u, deque2->size());
2357 EXPECT_EQ(3u, dequeUW->size()); 2371 EXPECT_EQ(3u, dequeUW->size());
2358 EXPECT_EQ(1u, deque2->size()); 2372 EXPECT_EQ(1u, deque2->size());
2359 2373
2360 EXPECT_TRUE(memberMember->get(one) == two); 2374 EXPECT_TRUE(memberMember->get(one) == two);
2361 EXPECT_TRUE(primitiveMember->get(1) == two); 2375 EXPECT_TRUE(primitiveMember->get(1) == two);
2362 EXPECT_TRUE(primitiveMember->get(4) == one); 2376 EXPECT_TRUE(primitiveMember->get(4) == one);
2363 EXPECT_EQ(2, memberPrimitive->get(one)); 2377 EXPECT_EQ(2, memberPrimitive->get(one));
2364 EXPECT_EQ(3, memberPrimitive->get(two)); 2378 EXPECT_EQ(3, memberPrimitive->get(two));
2365 EXPECT_TRUE(set->contains(one)); 2379 EXPECT_TRUE(set->contains(one));
2366 EXPECT_TRUE(set->contains(two)); 2380 EXPECT_TRUE(set->contains(two));
2367 EXPECT_FALSE(set->contains(oneB)); 2381 EXPECT_FALSE(set->contains(oneB));
2368 EXPECT_TRUE(set2->contains(oneB)); 2382 EXPECT_TRUE(set2->contains(oneB));
2383 EXPECT_TRUE(set3->contains(oneB));
2384 EXPECT_EQ(2u, set3->find(oneB)->value);
2369 EXPECT_EQ(3, vector->at(0)->value()); 2385 EXPECT_EQ(3, vector->at(0)->value());
2370 EXPECT_EQ(4, vector->at(1)->value()); 2386 EXPECT_EQ(4, vector->at(1)->value());
2371 EXPECT_EQ(3, deque->begin()->get()->value()); 2387 EXPECT_EQ(3, deque->begin()->get()->value());
2372 } 2388 }
2373 2389
2374 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 2390 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
2375 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 2391 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
2376 2392
2377 EXPECT_EQ(4u, memberMember->size()); 2393 EXPECT_EQ(4u, memberMember->size());
2378 EXPECT_EQ(4u, primitiveMember->size()); 2394 EXPECT_EQ(4u, primitiveMember->size());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2426 HeapStats initialHeapStats; 2442 HeapStats initialHeapStats;
2427 clearOutOldGarbage(&initialHeapStats); 2443 clearOutOldGarbage(&initialHeapStats);
2428 IntWrapper::s_destructorCalls = 0; 2444 IntWrapper::s_destructorCalls = 0;
2429 2445
2430 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive; 2446 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive;
2431 2447
2432 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper> > WeakStrong; 2448 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper> > WeakStrong;
2433 typedef HeapHashMap<Member<IntWrapper>, WeakMember<IntWrapper> > StrongWeak; 2449 typedef HeapHashMap<Member<IntWrapper>, WeakMember<IntWrapper> > StrongWeak;
2434 typedef HeapHashMap<WeakMember<IntWrapper>, WeakMember<IntWrapper> > WeakWea k; 2450 typedef HeapHashMap<WeakMember<IntWrapper>, WeakMember<IntWrapper> > WeakWea k;
2435 typedef HeapHashSet<WeakMember<IntWrapper> > WeakSet; 2451 typedef HeapHashSet<WeakMember<IntWrapper> > WeakSet;
2452 typedef HeapHashCountedSet<WeakMember<IntWrapper> > WeakCountedSet;
2436 2453
2437 Persistent<WeakStrong> weakStrong = new WeakStrong(); 2454 Persistent<WeakStrong> weakStrong = new WeakStrong();
2438 Persistent<StrongWeak> strongWeak = new StrongWeak(); 2455 Persistent<StrongWeak> strongWeak = new StrongWeak();
2439 Persistent<WeakWeak> weakWeak = new WeakWeak(); 2456 Persistent<WeakWeak> weakWeak = new WeakWeak();
2440 Persistent<WeakSet> weakSet = new WeakSet(); 2457 Persistent<WeakSet> weakSet = new WeakSet();
2458 Persistent<WeakCountedSet> weakCountedSet = new WeakCountedSet();
2441 2459
2442 Persistent<IntWrapper> two = IntWrapper::create(2); 2460 Persistent<IntWrapper> two = IntWrapper::create(2);
2443 2461
2444 keepNumbersAlive.append(IntWrapper::create(103)); 2462 keepNumbersAlive.append(IntWrapper::create(103));
2445 keepNumbersAlive.append(IntWrapper::create(10)); 2463 keepNumbersAlive.append(IntWrapper::create(10));
2446 2464
2447 { 2465 {
2448 weakStrong->add(IntWrapper::create(1), two); 2466 weakStrong->add(IntWrapper::create(1), two);
2449 strongWeak->add(two, IntWrapper::create(1)); 2467 strongWeak->add(two, IntWrapper::create(1));
2450 weakWeak->add(two, IntWrapper::create(42)); 2468 weakWeak->add(two, IntWrapper::create(42));
2451 weakWeak->add(IntWrapper::create(42), two); 2469 weakWeak->add(IntWrapper::create(42), two);
2452 weakSet->add(IntWrapper::create(0)); 2470 weakSet->add(IntWrapper::create(0));
2453 weakSet->add(two); 2471 weakSet->add(two);
2454 weakSet->add(keepNumbersAlive[0]); 2472 weakSet->add(keepNumbersAlive[0]);
2455 weakSet->add(keepNumbersAlive[1]); 2473 weakSet->add(keepNumbersAlive[1]);
2474 weakCountedSet->add(IntWrapper::create(0));
2475 weakCountedSet->add(two);
2476 weakCountedSet->add(two);
2477 weakCountedSet->add(two);
2478 weakCountedSet->add(keepNumbersAlive[0]);
2479 weakCountedSet->add(keepNumbersAlive[1]);
2456 EXPECT_EQ(1u, weakStrong->size()); 2480 EXPECT_EQ(1u, weakStrong->size());
2457 EXPECT_EQ(1u, strongWeak->size()); 2481 EXPECT_EQ(1u, strongWeak->size());
2458 EXPECT_EQ(2u, weakWeak->size()); 2482 EXPECT_EQ(2u, weakWeak->size());
2459 EXPECT_EQ(4u, weakSet->size()); 2483 EXPECT_EQ(4u, weakSet->size());
2484 EXPECT_EQ(4u, weakCountedSet->size());
2485 EXPECT_EQ(3u, weakCountedSet->find(two)->value);
2486 weakCountedSet->remove(two);
2487 EXPECT_EQ(2u, weakCountedSet->find(two)->value);
2460 } 2488 }
2461 2489
2462 keepNumbersAlive[0] = nullptr; 2490 keepNumbersAlive[0] = nullptr;
2463 2491
2464 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 2492 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
2465 2493
2466 EXPECT_EQ(0u, weakStrong->size()); 2494 EXPECT_EQ(0u, weakStrong->size());
2467 EXPECT_EQ(0u, strongWeak->size()); 2495 EXPECT_EQ(0u, strongWeak->size());
2468 EXPECT_EQ(0u, weakWeak->size()); 2496 EXPECT_EQ(0u, weakWeak->size());
2469 EXPECT_EQ(2u, weakSet->size()); 2497 EXPECT_EQ(2u, weakSet->size());
2498 EXPECT_EQ(2u, weakCountedSet->size());
2470 } 2499 }
2471 2500
2472 template<typename Set> 2501 template<typename Set>
2473 void linkedSetHelper(bool strong) 2502 void linkedSetHelper(bool strong)
2474 { 2503 {
2475 HeapStats initialHeapStats; 2504 HeapStats initialHeapStats;
2476 clearOutOldGarbage(&initialHeapStats); 2505 clearOutOldGarbage(&initialHeapStats);
2477 IntWrapper::s_destructorCalls = 0; 2506 IntWrapper::s_destructorCalls = 0;
2478 2507
2479 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive; 2508 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive;
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
2711 TEST(HeapTest, HeapMapDestructor) 2740 TEST(HeapTest, HeapMapDestructor)
2712 { 2741 {
2713 heapMapDestructorHelper(true); 2742 heapMapDestructorHelper(true);
2714 heapMapDestructorHelper(false); 2743 heapMapDestructorHelper(false);
2715 } 2744 }
2716 2745
2717 typedef HeapHashSet<PairWeakStrong> WeakStrongSet; 2746 typedef HeapHashSet<PairWeakStrong> WeakStrongSet;
2718 typedef HeapHashSet<PairWeakUnwrapped> WeakUnwrappedSet; 2747 typedef HeapHashSet<PairWeakUnwrapped> WeakUnwrappedSet;
2719 typedef HeapHashSet<PairStrongWeak> StrongWeakSet; 2748 typedef HeapHashSet<PairStrongWeak> StrongWeakSet;
2720 typedef HeapHashSet<PairUnwrappedWeak> UnwrappedWeakSet; 2749 typedef HeapHashSet<PairUnwrappedWeak> UnwrappedWeakSet;
2750 typedef HeapLinkedHashSet<PairWeakStrong> WeakStrongLinkedSet;
2751 typedef HeapLinkedHashSet<PairWeakUnwrapped> WeakUnwrappedLinkedSet;
2752 typedef HeapLinkedHashSet<PairStrongWeak> StrongWeakLinkedSet;
2753 typedef HeapLinkedHashSet<PairUnwrappedWeak> UnwrappedWeakLinkedSet;
2754 typedef HeapHashCountedSet<PairWeakStrong> WeakStrongCountedSet;
2755 typedef HeapHashCountedSet<PairWeakUnwrapped> WeakUnwrappedCountedSet;
2756 typedef HeapHashCountedSet<PairStrongWeak> StrongWeakCountedSet;
2757 typedef HeapHashCountedSet<PairUnwrappedWeak> UnwrappedWeakCountedSet;
2721 2758
2759 template<typename T>
2760 T& iteratorExtractor(WTF::KeyValuePair<T, unsigned>& pair)
2761 {
2762 return pair.key;
2763 }
2764
2765 template<typename T>
2766 T& iteratorExtractor(T& notAPair)
2767 {
2768 return notAPair;
2769 }
2770
2771 template<typename WSSet, typename SWSet, typename WUSet, typename UWSet>
2722 void checkPairSets( 2772 void checkPairSets(
2723 Persistent<WeakStrongSet>& weakStrong, 2773 Persistent<WSSet>& weakStrong,
2724 Persistent<StrongWeakSet>& strongWeak, 2774 Persistent<SWSet>& strongWeak,
2725 Persistent<WeakUnwrappedSet>& weakUnwrapped, 2775 Persistent<WUSet>& weakUnwrapped,
2726 Persistent<UnwrappedWeakSet>& unwrappedWeak, 2776 Persistent<UWSet>& unwrappedWeak,
2727 bool ones, 2777 bool ones,
2728 Persistent<IntWrapper>& two) 2778 Persistent<IntWrapper>& two)
2729 { 2779 {
2730 WeakStrongSet::iterator itWS = weakStrong->begin(); 2780 typename WSSet::iterator itWS = weakStrong->begin();
2731 StrongWeakSet::iterator itSW = strongWeak->begin(); 2781 typename SWSet::iterator itSW = strongWeak->begin();
2732 WeakUnwrappedSet::iterator itWU = weakUnwrapped->begin(); 2782 typename WUSet::iterator itWU = weakUnwrapped->begin();
2733 UnwrappedWeakSet::iterator itUW = unwrappedWeak->begin(); 2783 typename UWSet::iterator itUW = unwrappedWeak->begin();
2734 2784
2735 EXPECT_EQ(2u, weakStrong->size()); 2785 EXPECT_EQ(2u, weakStrong->size());
2736 EXPECT_EQ(2u, strongWeak->size()); 2786 EXPECT_EQ(2u, strongWeak->size());
2737 EXPECT_EQ(2u, weakUnwrapped->size()); 2787 EXPECT_EQ(2u, weakUnwrapped->size());
2738 EXPECT_EQ(2u, unwrappedWeak->size()); 2788 EXPECT_EQ(2u, unwrappedWeak->size());
2739 2789
2740 PairWeakStrong p = *itWS; 2790 PairWeakStrong p = iteratorExtractor(*itWS);
2741 PairStrongWeak p2 = *itSW; 2791 PairStrongWeak p2 = iteratorExtractor(*itSW);
2742 PairWeakUnwrapped p3 = *itWU; 2792 PairWeakUnwrapped p3 = iteratorExtractor(*itWU);
2743 PairUnwrappedWeak p4 = *itUW; 2793 PairUnwrappedWeak p4 = iteratorExtractor(*itUW);
2744 if (p.first == two && p.second == two) 2794 if (p.first == two && p.second == two)
2745 ++itWS; 2795 ++itWS;
2746 if (p2.first == two && p2.second == two) 2796 if (p2.first == two && p2.second == two)
2747 ++itSW; 2797 ++itSW;
2748 if (p3.first == two && p3.second == 2) 2798 if (p3.first == two && p3.second == 2)
2749 ++itWU; 2799 ++itWU;
2750 if (p4.first == 2 && p4.second == two) 2800 if (p4.first == 2 && p4.second == two)
2751 ++itUW; 2801 ++itUW;
2752 p = *itWS; 2802 p = iteratorExtractor(*itWS);
2753 p2 = *itSW; 2803 p2 = iteratorExtractor(*itSW);
2754 p3 = *itWU; 2804 p3 = iteratorExtractor(*itWU);
2755 p4 = *itUW; 2805 p4 = iteratorExtractor(*itUW);
2756 IntWrapper* nullWrapper = 0; 2806 IntWrapper* nullWrapper = 0;
2757 if (ones) { 2807 if (ones) {
2758 EXPECT_EQ(p.first->value(), 1); 2808 EXPECT_EQ(p.first->value(), 1);
2759 EXPECT_EQ(p2.second->value(), 1); 2809 EXPECT_EQ(p2.second->value(), 1);
2760 EXPECT_EQ(p3.first->value(), 1); 2810 EXPECT_EQ(p3.first->value(), 1);
2761 EXPECT_EQ(p4.second->value(), 1); 2811 EXPECT_EQ(p4.second->value(), 1);
2762 } else { 2812 } else {
2763 EXPECT_EQ(p.first, nullWrapper); 2813 EXPECT_EQ(p.first, nullWrapper);
2764 EXPECT_EQ(p2.second, nullWrapper); 2814 EXPECT_EQ(p2.second, nullWrapper);
2765 EXPECT_EQ(p3.first, nullWrapper); 2815 EXPECT_EQ(p3.first, nullWrapper);
2766 EXPECT_EQ(p4.second, nullWrapper); 2816 EXPECT_EQ(p4.second, nullWrapper);
2767 } 2817 }
2768 2818
2769 EXPECT_EQ(p.second->value(), 2); 2819 EXPECT_EQ(p.second->value(), 2);
2770 EXPECT_EQ(p2.first->value(), 2); 2820 EXPECT_EQ(p2.first->value(), 2);
2771 EXPECT_EQ(p3.second, 2); 2821 EXPECT_EQ(p3.second, 2);
2772 EXPECT_EQ(p4.first, 2); 2822 EXPECT_EQ(p4.first, 2);
2773 2823
2774 EXPECT_TRUE(weakStrong->contains(PairWeakStrong(&*two, &*two))); 2824 EXPECT_TRUE(weakStrong->contains(PairWeakStrong(&*two, &*two)));
2775 EXPECT_TRUE(strongWeak->contains(PairStrongWeak(&*two, &*two))); 2825 EXPECT_TRUE(strongWeak->contains(PairStrongWeak(&*two, &*two)));
2776 EXPECT_TRUE(weakUnwrapped->contains(PairWeakUnwrapped(&*two, 2))); 2826 EXPECT_TRUE(weakUnwrapped->contains(PairWeakUnwrapped(&*two, 2)));
2777 EXPECT_TRUE(unwrappedWeak->contains(PairUnwrappedWeak(2, &*two))); 2827 EXPECT_TRUE(unwrappedWeak->contains(PairUnwrappedWeak(2, &*two)));
2778 } 2828 }
2779 2829
2780 TEST(HeapTest, HeapWeakPairs) 2830 template<typename WSSet, typename SWSet, typename WUSet, typename UWSet>
2831 void heapWeakPairsHelper()
2781 { 2832 {
2782 IntWrapper::s_destructorCalls = 0; 2833 IntWrapper::s_destructorCalls = 0;
2783 2834
2784 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive; 2835 PersistentHeapVector<Member<IntWrapper> > keepNumbersAlive;
2785 2836
2786 Persistent<WeakStrongSet> weakStrong = new WeakStrongSet(); 2837 Persistent<WSSet> weakStrong = new WSSet();
2787 Persistent<StrongWeakSet> strongWeak = new StrongWeakSet(); 2838 Persistent<SWSet> strongWeak = new SWSet();
2788 Persistent<WeakUnwrappedSet> weakUnwrapped = new WeakUnwrappedSet(); 2839 Persistent<WUSet> weakUnwrapped = new WUSet();
2789 Persistent<UnwrappedWeakSet> unwrappedWeak = new UnwrappedWeakSet(); 2840 Persistent<UWSet> unwrappedWeak = new UWSet();
2790 2841
2791 Persistent<IntWrapper> two = IntWrapper::create(2); 2842 Persistent<IntWrapper> two = IntWrapper::create(2);
2792 2843
2793 weakStrong->add(PairWeakStrong(IntWrapper::create(1), &*two)); 2844 weakStrong->add(PairWeakStrong(IntWrapper::create(1), &*two));
2794 weakStrong->add(PairWeakStrong(&*two, &*two)); 2845 weakStrong->add(PairWeakStrong(&*two, &*two));
2795 strongWeak->add(PairStrongWeak(&*two, IntWrapper::create(1))); 2846 strongWeak->add(PairStrongWeak(&*two, IntWrapper::create(1)));
2796 strongWeak->add(PairStrongWeak(&*two, &*two)); 2847 strongWeak->add(PairStrongWeak(&*two, &*two));
2797 weakUnwrapped->add(PairWeakUnwrapped(IntWrapper::create(1), 2)); 2848 weakUnwrapped->add(PairWeakUnwrapped(IntWrapper::create(1), 2));
2798 weakUnwrapped->add(PairWeakUnwrapped(&*two, 2)); 2849 weakUnwrapped->add(PairWeakUnwrapped(&*two, 2));
2799 unwrappedWeak->add(PairUnwrappedWeak(2, IntWrapper::create(1))); 2850 unwrappedWeak->add(PairUnwrappedWeak(2, IntWrapper::create(1)));
2800 unwrappedWeak->add(PairUnwrappedWeak(2, &*two)); 2851 unwrappedWeak->add(PairUnwrappedWeak(2, &*two));
2801 2852
2802 checkPairSets(weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, true, tw o); 2853 checkPairSets(weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, true, tw o);
2803 2854
2804 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 2855 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
2805 checkPairSets(weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, false, t wo); 2856 checkPairSets(weakStrong, strongWeak, weakUnwrapped, unwrappedWeak, false, t wo);
2806 } 2857 }
2807 2858
2859 TEST(HeapTest, HeapWeakPairs)
2860 {
2861 heapWeakPairsHelper<WeakStrongSet, StrongWeakSet, WeakUnwrappedSet, Unwrappe dWeakSet>();
2862 heapWeakPairsHelper<WeakStrongCountedSet, StrongWeakCountedSet, WeakUnwrappe dCountedSet, UnwrappedWeakCountedSet>();
2863 heapWeakPairsHelper<WeakStrongLinkedSet, StrongWeakLinkedSet, WeakUnwrappedL inkedSet, UnwrappedWeakLinkedSet>();
2864 }
2865
2808 TEST(HeapTest, HeapWeakCollectionTypes) 2866 TEST(HeapTest, HeapWeakCollectionTypes)
2809 { 2867 {
2810 HeapStats initialHeapSize; 2868 HeapStats initialHeapSize;
2811 IntWrapper::s_destructorCalls = 0; 2869 IntWrapper::s_destructorCalls = 0;
2812 2870
2813 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper> > WeakStrong; 2871 typedef HeapHashMap<WeakMember<IntWrapper>, Member<IntWrapper> > WeakStrong;
2814 typedef HeapHashMap<Member<IntWrapper>, WeakMember<IntWrapper> > StrongWeak; 2872 typedef HeapHashMap<Member<IntWrapper>, WeakMember<IntWrapper> > StrongWeak;
2815 typedef HeapHashMap<WeakMember<IntWrapper>, WeakMember<IntWrapper> > WeakWea k; 2873 typedef HeapHashMap<WeakMember<IntWrapper>, WeakMember<IntWrapper> > WeakWea k;
2816 typedef HeapHashSet<WeakMember<IntWrapper> > WeakSet; 2874 typedef HeapHashSet<WeakMember<IntWrapper> > WeakSet;
2817 2875
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after
3676 { 3734 {
3677 Persistent<MixinB> b = obj; 3735 Persistent<MixinB> b = obj;
3678 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3736 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3679 EXPECT_EQ(0, IntWrapper::s_destructorCalls); 3737 EXPECT_EQ(0, IntWrapper::s_destructorCalls);
3680 } 3738 }
3681 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); 3739 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack);
3682 EXPECT_EQ(3, IntWrapper::s_destructorCalls); 3740 EXPECT_EQ(3, IntWrapper::s_destructorCalls);
3683 } 3741 }
3684 3742
3685 } // WebCore namespace 3743 } // WebCore namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698