| 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 |