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 4134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4145 EXPECT_EQ(4u, map1->size()); | 4145 EXPECT_EQ(4u, map1->size()); |
4146 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); | 4146 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); |
4147 EXPECT_EQ(2, OffHeapInt::s_destructorCalls); | 4147 EXPECT_EQ(2, OffHeapInt::s_destructorCalls); |
4148 EXPECT_EQ(2u, map1->size()); | 4148 EXPECT_EQ(2u, map1->size()); |
4149 Iterator i1 = map1->begin(); | 4149 Iterator i1 = map1->begin(); |
4150 EXPECT_TRUE(i1->key.first->value() == 103 || i1->key.first == livingInt); | 4150 EXPECT_TRUE(i1->key.first->value() == 103 || i1->key.first == livingInt); |
4151 EXPECT_EQ(livingInt, i1->key.second); | 4151 EXPECT_EQ(livingInt, i1->key.second); |
4152 ++i1; | 4152 ++i1; |
4153 EXPECT_TRUE(i1->key.first->value() == 103 || i1->key.first == livingInt); | 4153 EXPECT_TRUE(i1->key.first->value() == 103 || i1->key.first == livingInt); |
4154 EXPECT_EQ(livingInt, i1->key.second); | 4154 EXPECT_EQ(livingInt, i1->key.second); |
4155 | |
4156 map1.clear(); | |
4157 livingInt.clear(); | |
haraken
2014/08/11 02:00:07
Hmm, I don't fully understand why we need to call
Daniel Chow
2014/08/11 02:44:21
it's a good idea, I will make a try today
On 2014
| |
4158 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); | |
4155 } | 4159 } |
4156 | 4160 |
4157 TEST(HeapTest, MapWithCustomWeaknessHandling2) | 4161 TEST(HeapTest, MapWithCustomWeaknessHandling2) |
4158 { | 4162 { |
4159 typedef HeapHashMap<RefPtr<OffHeapInt>, PairWithWeakHandling> Map; | 4163 typedef HeapHashMap<RefPtr<OffHeapInt>, PairWithWeakHandling> Map; |
4160 typedef Map::iterator Iterator; | 4164 typedef Map::iterator Iterator; |
4161 HeapStats initialHeapSize; | 4165 HeapStats initialHeapSize; |
4162 clearOutOldGarbage(&initialHeapSize); | 4166 clearOutOldGarbage(&initialHeapSize); |
4163 OffHeapInt::s_destructorCalls = 0; | 4167 OffHeapInt::s_destructorCalls = 0; |
4164 | 4168 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4216 EXPECT_EQ(4u, map1->size()); | 4220 EXPECT_EQ(4u, map1->size()); |
4217 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); | 4221 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); |
4218 EXPECT_EQ(2, OffHeapInt::s_destructorCalls); | 4222 EXPECT_EQ(2, OffHeapInt::s_destructorCalls); |
4219 EXPECT_EQ(2u, map1->size()); | 4223 EXPECT_EQ(2u, map1->size()); |
4220 Iterator i1 = map1->begin(); | 4224 Iterator i1 = map1->begin(); |
4221 EXPECT_TRUE(i1->value.first->value() == 103 || i1->value.first == livingInt) ; | 4225 EXPECT_TRUE(i1->value.first->value() == 103 || i1->value.first == livingInt) ; |
4222 EXPECT_EQ(livingInt, i1->value.second); | 4226 EXPECT_EQ(livingInt, i1->value.second); |
4223 ++i1; | 4227 ++i1; |
4224 EXPECT_TRUE(i1->value.first->value() == 103 || i1->value.first == livingInt) ; | 4228 EXPECT_TRUE(i1->value.first->value() == 103 || i1->value.first == livingInt) ; |
4225 EXPECT_EQ(livingInt, i1->value.second); | 4229 EXPECT_EQ(livingInt, i1->value.second); |
4230 | |
4231 map1.clear(); | |
4232 livingInt.clear(); | |
4233 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); | |
4226 } | 4234 } |
4227 | 4235 |
4228 TEST(HeapTest, Bind) | 4236 TEST(HeapTest, Bind) |
4229 { | 4237 { |
4230 Closure closure = bind(&Bar::trace, Bar::create(), static_cast<Visitor*>(0)) ; | 4238 Closure closure = bind(&Bar::trace, Bar::create(), static_cast<Visitor*>(0)) ; |
4231 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); | 4239 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); |
4232 // The closure should have a persistent handle to the Bar. | 4240 // The closure should have a persistent handle to the Bar. |
4233 EXPECT_EQ(1u, Bar::s_live); | 4241 EXPECT_EQ(1u, Bar::s_live); |
4234 | 4242 |
4235 Closure closure2 = bind(&Bar::trace, RawPtr<Bar>(Bar::create()), static_cast <Visitor*>(0)); | 4243 Closure closure2 = bind(&Bar::trace, RawPtr<Bar>(Bar::create()), static_cast <Visitor*>(0)); |
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4968 | 4976 |
4969 static volatile IntWrapper* s_workerObjectPointer; | 4977 static volatile IntWrapper* s_workerObjectPointer; |
4970 }; | 4978 }; |
4971 | 4979 |
4972 TEST(HeapTest, RecursiveMutex) | 4980 TEST(HeapTest, RecursiveMutex) |
4973 { | 4981 { |
4974 RecursiveLockingTester::test(); | 4982 RecursiveLockingTester::test(); |
4975 } | 4983 } |
4976 | 4984 |
4977 template<typename T> | 4985 template<typename T> |
4978 class TraceIfNeededTester : public GarbageCollected<TraceIfNeededTester<T> > { | 4986 class TraceIfNeededTester : public GarbageCollectedFinalized<TraceIfNeededTester <T> > { |
haraken
2014/08/11 02:00:07
This change looks correct.
Ian: It would be great
| |
4979 public: | 4987 public: |
4980 static TraceIfNeededTester<T>* create() { return new TraceIfNeededTester<T>( ); } | 4988 static TraceIfNeededTester<T>* create() { return new TraceIfNeededTester<T>( ); } |
4981 static TraceIfNeededTester<T>* create(const T& obj) { return new TraceIfNeed edTester<T>(obj); } | 4989 static TraceIfNeededTester<T>* create(const T& obj) { return new TraceIfNeed edTester<T>(obj); } |
4982 void trace(Visitor* visitor) { TraceIfNeeded<T>::trace(visitor, &m_obj); } | 4990 void trace(Visitor* visitor) { TraceIfNeeded<T>::trace(visitor, &m_obj); } |
4983 T& obj() { return m_obj; } | 4991 T& obj() { return m_obj; } |
4992 ~TraceIfNeededTester() { } | |
4984 private: | 4993 private: |
4985 TraceIfNeededTester() { } | 4994 TraceIfNeededTester() { } |
4986 explicit TraceIfNeededTester(const T& obj) : m_obj(obj) { } | 4995 explicit TraceIfNeededTester(const T& obj) : m_obj(obj) { } |
4987 T m_obj; | 4996 T m_obj; |
4988 }; | 4997 }; |
4989 | 4998 |
4990 class PartObject { | 4999 class PartObject { |
4991 DISALLOW_ALLOCATION(); | 5000 DISALLOW_ALLOCATION(); |
4992 public: | 5001 public: |
4993 PartObject() : m_obj(SimpleObject::create()) { } | 5002 PartObject() : m_obj(SimpleObject::create()) { } |
(...skipping 27 matching lines...) Expand all Loading... | |
5021 EXPECT_EQ(1u, visitor.count()); | 5030 EXPECT_EQ(1u, visitor.count()); |
5022 } | 5031 } |
5023 | 5032 |
5024 { | 5033 { |
5025 TraceIfNeededTester<HeapVector<Member<SimpleObject> > >* m_vec = TraceIf NeededTester<HeapVector<Member<SimpleObject> > >::create(); | 5034 TraceIfNeededTester<HeapVector<Member<SimpleObject> > >* m_vec = TraceIf NeededTester<HeapVector<Member<SimpleObject> > >::create(); |
5026 m_vec->obj().append(SimpleObject::create()); | 5035 m_vec->obj().append(SimpleObject::create()); |
5027 visitor.reset(); | 5036 visitor.reset(); |
5028 m_vec->trace(&visitor); | 5037 m_vec->trace(&visitor); |
5029 EXPECT_EQ(2u, visitor.count()); | 5038 EXPECT_EQ(2u, visitor.count()); |
5030 } | 5039 } |
5040 | |
5041 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack); | |
5031 } | 5042 } |
5032 | 5043 |
5033 } // namespace blink | 5044 } // namespace blink |
OLD | NEW |