| 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 1999 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2010 explicit ShouldBeTraced(IntWrapper* wrapper) : m_wrapper(wrapper) { } | 2010 explicit ShouldBeTraced(IntWrapper* wrapper) : m_wrapper(wrapper) { } |
| 2011 void trace(Visitor* visitor) { visitor->trace(m_wrapper); } | 2011 void trace(Visitor* visitor) { visitor->trace(m_wrapper); } |
| 2012 Member<IntWrapper> m_wrapper; | 2012 Member<IntWrapper> m_wrapper; |
| 2013 }; | 2013 }; |
| 2014 | 2014 |
| 2015 class OffHeapContainer : public GarbageCollectedFinalized<OffHeapContainer> { | 2015 class OffHeapContainer : public GarbageCollectedFinalized<OffHeapContainer> { |
| 2016 public: | 2016 public: |
| 2017 static OffHeapContainer* create() { return new OffHeapContainer(); } | 2017 static OffHeapContainer* create() { return new OffHeapContainer(); } |
| 2018 | 2018 |
| 2019 static const int iterations = 300; | 2019 static const int iterations = 300; |
| 2020 static const int deadWrappers = 2100; | 2020 static const int deadWrappers = 1800; |
| 2021 | 2021 |
| 2022 OffHeapContainer() | 2022 OffHeapContainer() |
| 2023 { | 2023 { |
| 2024 for (int i = 0; i < iterations; i++) { | 2024 for (int i = 0; i < iterations; i++) { |
| 2025 m_deque1.append(ShouldBeTraced(IntWrapper::create(i))); | 2025 m_deque1.append(ShouldBeTraced(IntWrapper::create(i))); |
| 2026 m_vector1.append(ShouldBeTraced(IntWrapper::create(i))); | 2026 m_vector1.append(ShouldBeTraced(IntWrapper::create(i))); |
| 2027 m_deque2.append(IntWrapper::create(i)); | 2027 m_deque2.append(IntWrapper::create(i)); |
| 2028 m_vector2.append(IntWrapper::create(i)); | 2028 m_vector2.append(IntWrapper::create(i)); |
| 2029 m_hashSet.add(IntWrapper::create(i)); | |
| 2030 m_hashMap.add(i + 103, IntWrapper::create(i)); | 2029 m_hashMap.add(i + 103, IntWrapper::create(i)); |
| 2031 m_ownedVector.append(adoptPtr(new ShouldBeTraced(IntWrapper::create(
i)))); | 2030 m_ownedVector.append(adoptPtr(new ShouldBeTraced(IntWrapper::create(
i)))); |
| 2032 } | 2031 } |
| 2033 | 2032 |
| 2034 Deque<ShouldBeTraced>::iterator d1Iterator(m_deque1.begin()); | 2033 Deque<ShouldBeTraced>::iterator d1Iterator(m_deque1.begin()); |
| 2035 Vector<ShouldBeTraced>::iterator v1Iterator(m_vector1.begin()); | 2034 Vector<ShouldBeTraced>::iterator v1Iterator(m_vector1.begin()); |
| 2036 Deque<Member<IntWrapper> >::iterator d2Iterator(m_deque2.begin()); | 2035 Deque<Member<IntWrapper> >::iterator d2Iterator(m_deque2.begin()); |
| 2037 Vector<Member<IntWrapper> >::iterator v2Iterator(m_vector2.begin()); | 2036 Vector<Member<IntWrapper> >::iterator v2Iterator(m_vector2.begin()); |
| 2038 HashSet<Member<IntWrapper> >::iterator setIterator(m_hashSet.begin()); | |
| 2039 HashMap<int, Member<IntWrapper> >::iterator mapIterator(m_hashMap.begin(
)); | 2037 HashMap<int, Member<IntWrapper> >::iterator mapIterator(m_hashMap.begin(
)); |
| 2040 Vector<OwnPtr<ShouldBeTraced> >::iterator ownedVectorIterator(m_ownedVec
tor.begin()); | 2038 Vector<OwnPtr<ShouldBeTraced> >::iterator ownedVectorIterator(m_ownedVec
tor.begin()); |
| 2041 | 2039 |
| 2042 for (int i = 0; i < iterations; i++) { | 2040 for (int i = 0; i < iterations; i++) { |
| 2043 EXPECT_EQ(i, m_vector1[i].m_wrapper->value()); | 2041 EXPECT_EQ(i, m_vector1[i].m_wrapper->value()); |
| 2044 EXPECT_EQ(i, m_vector2[i]->value()); | 2042 EXPECT_EQ(i, m_vector2[i]->value()); |
| 2045 EXPECT_EQ(i, d1Iterator->m_wrapper->value()); | 2043 EXPECT_EQ(i, d1Iterator->m_wrapper->value()); |
| 2046 EXPECT_EQ(i, v1Iterator->m_wrapper->value()); | 2044 EXPECT_EQ(i, v1Iterator->m_wrapper->value()); |
| 2047 EXPECT_EQ(i, d2Iterator->get()->value()); | 2045 EXPECT_EQ(i, d2Iterator->get()->value()); |
| 2048 EXPECT_EQ(i, v2Iterator->get()->value()); | 2046 EXPECT_EQ(i, v2Iterator->get()->value()); |
| 2049 EXPECT_EQ(i, ownedVectorIterator->get()->m_wrapper->value()); | 2047 EXPECT_EQ(i, ownedVectorIterator->get()->m_wrapper->value()); |
| 2050 int value = setIterator->get()->value(); | 2048 int value = mapIterator->value.get()->value(); |
| 2051 EXPECT_LE(0, value); | |
| 2052 EXPECT_GT(iterations, value); | |
| 2053 value = mapIterator->value.get()->value(); | |
| 2054 EXPECT_LE(0, value); | 2049 EXPECT_LE(0, value); |
| 2055 EXPECT_GT(iterations, value); | 2050 EXPECT_GT(iterations, value); |
| 2056 ++d1Iterator; | 2051 ++d1Iterator; |
| 2057 ++v1Iterator; | 2052 ++v1Iterator; |
| 2058 ++d2Iterator; | 2053 ++d2Iterator; |
| 2059 ++v2Iterator; | 2054 ++v2Iterator; |
| 2060 ++setIterator; | |
| 2061 ++mapIterator; | 2055 ++mapIterator; |
| 2062 ++ownedVectorIterator; | 2056 ++ownedVectorIterator; |
| 2063 } | 2057 } |
| 2064 EXPECT_EQ(d1Iterator, m_deque1.end()); | 2058 EXPECT_EQ(d1Iterator, m_deque1.end()); |
| 2065 EXPECT_EQ(v1Iterator, m_vector1.end()); | 2059 EXPECT_EQ(v1Iterator, m_vector1.end()); |
| 2066 EXPECT_EQ(d2Iterator, m_deque2.end()); | 2060 EXPECT_EQ(d2Iterator, m_deque2.end()); |
| 2067 EXPECT_EQ(v2Iterator, m_vector2.end()); | 2061 EXPECT_EQ(v2Iterator, m_vector2.end()); |
| 2068 EXPECT_EQ(setIterator, m_hashSet.end()); | |
| 2069 EXPECT_EQ(mapIterator, m_hashMap.end()); | 2062 EXPECT_EQ(mapIterator, m_hashMap.end()); |
| 2070 EXPECT_EQ(ownedVectorIterator, m_ownedVector.end()); | 2063 EXPECT_EQ(ownedVectorIterator, m_ownedVector.end()); |
| 2071 } | 2064 } |
| 2072 | 2065 |
| 2073 void trace(Visitor* visitor) | 2066 void trace(Visitor* visitor) |
| 2074 { | 2067 { |
| 2075 visitor->trace(m_deque1); | 2068 visitor->trace(m_deque1); |
| 2076 visitor->trace(m_vector1); | 2069 visitor->trace(m_vector1); |
| 2077 visitor->trace(m_deque2); | 2070 visitor->trace(m_deque2); |
| 2078 visitor->trace(m_vector2); | 2071 visitor->trace(m_vector2); |
| 2079 visitor->trace(m_hashSet); | |
| 2080 visitor->trace(m_hashMap); | 2072 visitor->trace(m_hashMap); |
| 2081 visitor->trace(m_ownedVector); | 2073 visitor->trace(m_ownedVector); |
| 2082 } | 2074 } |
| 2083 | 2075 |
| 2084 Deque<ShouldBeTraced> m_deque1; | 2076 Deque<ShouldBeTraced> m_deque1; |
| 2085 Vector<ShouldBeTraced> m_vector1; | 2077 Vector<ShouldBeTraced> m_vector1; |
| 2086 Deque<Member<IntWrapper> > m_deque2; | 2078 Deque<Member<IntWrapper> > m_deque2; |
| 2087 Vector<Member<IntWrapper> > m_vector2; | 2079 Vector<Member<IntWrapper> > m_vector2; |
| 2088 HashSet<Member<IntWrapper> > m_hashSet; | |
| 2089 HashMap<int, Member<IntWrapper> > m_hashMap; | 2080 HashMap<int, Member<IntWrapper> > m_hashMap; |
| 2090 Vector<OwnPtr<ShouldBeTraced> > m_ownedVector; | 2081 Vector<OwnPtr<ShouldBeTraced> > m_ownedVector; |
| 2091 }; | 2082 }; |
| 2092 | 2083 |
| 2093 const int OffHeapContainer::iterations; | 2084 const int OffHeapContainer::iterations; |
| 2094 const int OffHeapContainer::deadWrappers; | 2085 const int OffHeapContainer::deadWrappers; |
| 2095 | 2086 |
| 2096 // These class definitions test compile-time asserts with transition | 2087 // These class definitions test compile-time asserts with transition |
| 2097 // types. They are therefore unused in test code and just need to | 2088 // types. They are therefore unused in test code and just need to |
| 2098 // compile. This is intentional; do not delete the A and B classes below. | 2089 // compile. This is intentional; do not delete the A and B classes below. |
| (...skipping 2745 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4844 }; | 4835 }; |
| 4845 | 4836 |
| 4846 volatile uintptr_t DeadBitTester::s_workerObjectPointer = 0; | 4837 volatile uintptr_t DeadBitTester::s_workerObjectPointer = 0; |
| 4847 | 4838 |
| 4848 TEST(HeapTest, ObjectDeadBit) | 4839 TEST(HeapTest, ObjectDeadBit) |
| 4849 { | 4840 { |
| 4850 DeadBitTester::test(); | 4841 DeadBitTester::test(); |
| 4851 } | 4842 } |
| 4852 | 4843 |
| 4853 } // WebCore namespace | 4844 } // WebCore namespace |
| OLD | NEW |