OLD | NEW |
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 1397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1408 #if !ENABLE(OILPAN) | 1408 #if !ENABLE(OILPAN) |
1409 m_pointsBack->setBackPointer(0); | 1409 m_pointsBack->setBackPointer(0); |
1410 #endif | 1410 #endif |
1411 --s_aliveCount; | 1411 --s_aliveCount; |
1412 } | 1412 } |
1413 | 1413 |
1414 void doStuff(PassRefPtrWillBeRawPtr<SuperClass> targetPass, PointsBack* poin
tsBack, int superClassCount) | 1414 void doStuff(PassRefPtrWillBeRawPtr<SuperClass> targetPass, PointsBack* poin
tsBack, int superClassCount) |
1415 { | 1415 { |
1416 RefPtrWillBeRawPtr<SuperClass> target = targetPass; | 1416 RefPtrWillBeRawPtr<SuperClass> target = targetPass; |
1417 conservativelyCollectGarbage(); | 1417 conservativelyCollectGarbage(); |
1418 EXPECT_EQ(pointsBack, target->pointsBack()); | 1418 EXPECT_EQ(pointsBack, target->getPointsBack()); |
1419 EXPECT_EQ(superClassCount, SuperClass::s_aliveCount); | 1419 EXPECT_EQ(superClassCount, SuperClass::s_aliveCount); |
1420 } | 1420 } |
1421 | 1421 |
1422 DEFINE_INLINE_VIRTUAL_TRACE() | 1422 DEFINE_INLINE_VIRTUAL_TRACE() |
1423 { | 1423 { |
1424 visitor->trace(m_pointsBack); | 1424 visitor->trace(m_pointsBack); |
1425 } | 1425 } |
1426 | 1426 |
1427 PointsBack* pointsBack() const { return m_pointsBack.get(); } | 1427 PointsBack* getPointsBack() const { return m_pointsBack.get(); } |
1428 | 1428 |
1429 static int s_aliveCount; | 1429 static int s_aliveCount; |
1430 protected: | 1430 protected: |
1431 explicit SuperClass(PassRefPtrWillBeRawPtr<PointsBack> pointsBack) | 1431 explicit SuperClass(PassRefPtrWillBeRawPtr<PointsBack> pointsBack) |
1432 : m_pointsBack(pointsBack) | 1432 : m_pointsBack(pointsBack) |
1433 { | 1433 { |
1434 m_pointsBack->setBackPointer(this); | 1434 m_pointsBack->setBackPointer(this); |
1435 ++s_aliveCount; | 1435 ++s_aliveCount; |
1436 } | 1436 } |
1437 | 1437 |
(...skipping 3708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5146 } | 5146 } |
5147 | 5147 |
5148 class EphemeronWrapper : public GarbageCollected<EphemeronWrapper> { | 5148 class EphemeronWrapper : public GarbageCollected<EphemeronWrapper> { |
5149 public: | 5149 public: |
5150 DEFINE_INLINE_TRACE() | 5150 DEFINE_INLINE_TRACE() |
5151 { | 5151 { |
5152 visitor->trace(m_map); | 5152 visitor->trace(m_map); |
5153 } | 5153 } |
5154 | 5154 |
5155 typedef HeapHashMap<WeakMember<IntWrapper>, Member<EphemeronWrapper>> Map; | 5155 typedef HeapHashMap<WeakMember<IntWrapper>, Member<EphemeronWrapper>> Map; |
5156 Map& map() { return m_map; } | 5156 Map& getMap() { return m_map; } |
5157 | 5157 |
5158 private: | 5158 private: |
5159 Map m_map; | 5159 Map m_map; |
5160 }; | 5160 }; |
5161 | 5161 |
5162 TEST(HeapTest, EphemeronsPointToEphemerons) | 5162 TEST(HeapTest, EphemeronsPointToEphemerons) |
5163 { | 5163 { |
5164 Persistent<IntWrapper> key = IntWrapper::create(42); | 5164 Persistent<IntWrapper> key = IntWrapper::create(42); |
5165 Persistent<IntWrapper> key2 = IntWrapper::create(103); | 5165 Persistent<IntWrapper> key2 = IntWrapper::create(103); |
5166 | 5166 |
5167 Persistent<EphemeronWrapper> chain; | 5167 Persistent<EphemeronWrapper> chain; |
5168 for (int i = 0; i < 100; i++) { | 5168 for (int i = 0; i < 100; i++) { |
5169 EphemeronWrapper* oldHead = chain; | 5169 EphemeronWrapper* oldHead = chain; |
5170 chain = new EphemeronWrapper(); | 5170 chain = new EphemeronWrapper(); |
5171 if (i == 50) | 5171 if (i == 50) |
5172 chain->map().add(key2, oldHead); | 5172 chain->getMap().add(key2, oldHead); |
5173 else | 5173 else |
5174 chain->map().add(key, oldHead); | 5174 chain->getMap().add(key, oldHead); |
5175 chain->map().add(IntWrapper::create(103), new EphemeronWrapper()); | 5175 chain->getMap().add(IntWrapper::create(103), new EphemeronWrapper()); |
5176 } | 5176 } |
5177 | 5177 |
5178 preciselyCollectGarbage(); | 5178 preciselyCollectGarbage(); |
5179 | 5179 |
5180 EphemeronWrapper* wrapper = chain; | 5180 EphemeronWrapper* wrapper = chain; |
5181 for (int i = 0; i< 100; i++) { | 5181 for (int i = 0; i< 100; i++) { |
5182 EXPECT_EQ(1u, wrapper->map().size()); | 5182 EXPECT_EQ(1u, wrapper->getMap().size()); |
5183 if (i == 49) | 5183 if (i == 49) |
5184 wrapper = wrapper->map().get(key2); | 5184 wrapper = wrapper->getMap().get(key2); |
5185 else | 5185 else |
5186 wrapper = wrapper->map().get(key); | 5186 wrapper = wrapper->getMap().get(key); |
5187 } | 5187 } |
5188 EXPECT_EQ(nullptr, wrapper); | 5188 EXPECT_EQ(nullptr, wrapper); |
5189 | 5189 |
5190 key2.clear(); | 5190 key2.clear(); |
5191 preciselyCollectGarbage(); | 5191 preciselyCollectGarbage(); |
5192 | 5192 |
5193 wrapper = chain; | 5193 wrapper = chain; |
5194 for (int i = 0; i < 50; i++) { | 5194 for (int i = 0; i < 50; i++) { |
5195 EXPECT_EQ(i == 49 ? 0u : 1u, wrapper->map().size()); | 5195 EXPECT_EQ(i == 49 ? 0u : 1u, wrapper->getMap().size()); |
5196 wrapper = wrapper->map().get(key); | 5196 wrapper = wrapper->getMap().get(key); |
5197 } | 5197 } |
5198 EXPECT_EQ(nullptr, wrapper); | 5198 EXPECT_EQ(nullptr, wrapper); |
5199 | 5199 |
5200 key.clear(); | 5200 key.clear(); |
5201 preciselyCollectGarbage(); | 5201 preciselyCollectGarbage(); |
5202 EXPECT_EQ(0u, chain->map().size()); | 5202 EXPECT_EQ(0u, chain->getMap().size()); |
5203 } | 5203 } |
5204 | 5204 |
5205 TEST(HeapTest, Ephemeron) | 5205 TEST(HeapTest, Ephemeron) |
5206 { | 5206 { |
5207 typedef HeapHashMap<WeakMember<IntWrapper>, PairWithWeakHandling> WeakPairM
ap; | 5207 typedef HeapHashMap<WeakMember<IntWrapper>, PairWithWeakHandling> WeakPairM
ap; |
5208 typedef HeapHashMap<PairWithWeakHandling, WeakMember<IntWrapper>> PairWeakM
ap; | 5208 typedef HeapHashMap<PairWithWeakHandling, WeakMember<IntWrapper>> PairWeakM
ap; |
5209 typedef HeapHashSet<WeakMember<IntWrapper>> Set; | 5209 typedef HeapHashSet<WeakMember<IntWrapper>> Set; |
5210 | 5210 |
5211 Persistent<WeakPairMap> weakPairMap = new WeakPairMap(); | 5211 Persistent<WeakPairMap> weakPairMap = new WeakPairMap(); |
5212 Persistent<WeakPairMap> weakPairMap2 = new WeakPairMap(); | 5212 Persistent<WeakPairMap> weakPairMap2 = new WeakPairMap(); |
(...skipping 1270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6483 EXPECT_EQ(1u, vector2.size()); | 6483 EXPECT_EQ(1u, vector2.size()); |
6484 // TODO(Oilpan): when Vector.h's contiguous container support no longer disables | 6484 // TODO(Oilpan): when Vector.h's contiguous container support no longer disables |
6485 // Vector<>s with inline capacity, remove. | 6485 // Vector<>s with inline capacity, remove. |
6486 #if !defined(ANNOTATE_CONTIGUOUS_CONTAINER) | 6486 #if !defined(ANNOTATE_CONTIGUOUS_CONTAINER) |
6487 EXPECT_EQ(16u, vector1.capacity()); | 6487 EXPECT_EQ(16u, vector1.capacity()); |
6488 EXPECT_EQ(16u, vector2.capacity()); | 6488 EXPECT_EQ(16u, vector2.capacity()); |
6489 #endif | 6489 #endif |
6490 } | 6490 } |
6491 | 6491 |
6492 } // namespace blink | 6492 } // namespace blink |
OLD | NEW |