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

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

Issue 2321223003: Revert of Move collectGarbage* methods to ThreadState (Closed)
Patch Set: Created 4 years, 3 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
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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 #include "wtf/HashTraits.h" 45 #include "wtf/HashTraits.h"
46 #include "wtf/LinkedHashSet.h" 46 #include "wtf/LinkedHashSet.h"
47 #include "wtf/PtrUtil.h" 47 #include "wtf/PtrUtil.h"
48 #include <algorithm> 48 #include <algorithm>
49 #include <memory> 49 #include <memory>
50 50
51 namespace blink { 51 namespace blink {
52 52
53 static void preciselyCollectGarbage() 53 static void preciselyCollectGarbage()
54 { 54 {
55 ThreadState::current()->collectGarbage(BlinkGC::NoHeapPointersOnStack, Blink GC::GCWithSweep, BlinkGC::ForcedGC); 55 ThreadHeap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSw eep, BlinkGC::ForcedGC);
56 } 56 }
57 57
58 static void conservativelyCollectGarbage() 58 static void conservativelyCollectGarbage()
59 { 59 {
60 ThreadState::current()->collectGarbage(BlinkGC::HeapPointersOnStack, BlinkGC ::GCWithSweep, BlinkGC::ForcedGC); 60 ThreadHeap::collectGarbage(BlinkGC::HeapPointersOnStack, BlinkGC::GCWithSwee p, BlinkGC::ForcedGC);
61 } 61 }
62 62
63 class IntWrapper : public GarbageCollectedFinalized<IntWrapper> { 63 class IntWrapper : public GarbageCollectedFinalized<IntWrapper> {
64 public: 64 public:
65 static IntWrapper* create(int x) 65 static IntWrapper* create(int x)
66 { 66 {
67 return new IntWrapper(x); 67 return new IntWrapper(x);
68 } 68 }
69 69
70 virtual ~IntWrapper() 70 virtual ~IntWrapper()
(...skipping 1944 matching lines...) Expand 10 before | Expand all | Expand 10 after
2015 #endif 2015 #endif
2016 2016
2017 TEST(HeapTest, LazySweepingPages) 2017 TEST(HeapTest, LazySweepingPages)
2018 { 2018 {
2019 clearOutOldGarbage(); 2019 clearOutOldGarbage();
2020 2020
2021 SimpleFinalizedObject::s_destructorCalls = 0; 2021 SimpleFinalizedObject::s_destructorCalls = 0;
2022 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); 2022 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls);
2023 for (int i = 0; i < 1000; i++) 2023 for (int i = 0; i < 1000; i++)
2024 SimpleFinalizedObject::create(); 2024 SimpleFinalizedObject::create();
2025 ThreadState::current()->collectGarbage(BlinkGC::NoHeapPointersOnStack, Blink GC::GCWithoutSweep, BlinkGC::ForcedGC); 2025 ThreadHeap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithou tSweep, BlinkGC::ForcedGC);
2026 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); 2026 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls);
2027 for (int i = 0; i < 10000; i++) 2027 for (int i = 0; i < 10000; i++)
2028 SimpleFinalizedObject::create(); 2028 SimpleFinalizedObject::create();
2029 EXPECT_EQ(1000, SimpleFinalizedObject::s_destructorCalls); 2029 EXPECT_EQ(1000, SimpleFinalizedObject::s_destructorCalls);
2030 preciselyCollectGarbage(); 2030 preciselyCollectGarbage();
2031 EXPECT_EQ(11000, SimpleFinalizedObject::s_destructorCalls); 2031 EXPECT_EQ(11000, SimpleFinalizedObject::s_destructorCalls);
2032 } 2032 }
2033 2033
2034 TEST(HeapTest, LazySweepingLargeObjectPages) 2034 TEST(HeapTest, LazySweepingLargeObjectPages)
2035 { 2035 {
2036 clearOutOldGarbage(); 2036 clearOutOldGarbage();
2037 2037
2038 // Create free lists that can be reused for IntWrappers created in 2038 // Create free lists that can be reused for IntWrappers created in
2039 // LargeHeapObject::create(). 2039 // LargeHeapObject::create().
2040 Persistent<IntWrapper> p1 = new IntWrapper(1); 2040 Persistent<IntWrapper> p1 = new IntWrapper(1);
2041 for (int i = 0; i < 100; i++) { 2041 for (int i = 0; i < 100; i++) {
2042 new IntWrapper(i); 2042 new IntWrapper(i);
2043 } 2043 }
2044 Persistent<IntWrapper> p2 = new IntWrapper(2); 2044 Persistent<IntWrapper> p2 = new IntWrapper(2);
2045 preciselyCollectGarbage(); 2045 preciselyCollectGarbage();
2046 preciselyCollectGarbage(); 2046 preciselyCollectGarbage();
2047 2047
2048 LargeHeapObject::s_destructorCalls = 0; 2048 LargeHeapObject::s_destructorCalls = 0;
2049 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); 2049 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls);
2050 for (int i = 0; i < 10; i++) 2050 for (int i = 0; i < 10; i++)
2051 LargeHeapObject::create(); 2051 LargeHeapObject::create();
2052 ThreadState::current()->collectGarbage(BlinkGC::NoHeapPointersOnStack, Blink GC::GCWithoutSweep, BlinkGC::ForcedGC); 2052 ThreadHeap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithou tSweep, BlinkGC::ForcedGC);
2053 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); 2053 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls);
2054 for (int i = 0; i < 10; i++) { 2054 for (int i = 0; i < 10; i++) {
2055 LargeHeapObject::create(); 2055 LargeHeapObject::create();
2056 EXPECT_EQ(i + 1, LargeHeapObject::s_destructorCalls); 2056 EXPECT_EQ(i + 1, LargeHeapObject::s_destructorCalls);
2057 } 2057 }
2058 LargeHeapObject::create(); 2058 LargeHeapObject::create();
2059 LargeHeapObject::create(); 2059 LargeHeapObject::create();
2060 EXPECT_EQ(10, LargeHeapObject::s_destructorCalls); 2060 EXPECT_EQ(10, LargeHeapObject::s_destructorCalls);
2061 ThreadState::current()->collectGarbage(BlinkGC::NoHeapPointersOnStack, Blink GC::GCWithoutSweep, BlinkGC::ForcedGC); 2061 ThreadHeap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithou tSweep, BlinkGC::ForcedGC);
2062 EXPECT_EQ(10, LargeHeapObject::s_destructorCalls); 2062 EXPECT_EQ(10, LargeHeapObject::s_destructorCalls);
2063 preciselyCollectGarbage(); 2063 preciselyCollectGarbage();
2064 EXPECT_EQ(22, LargeHeapObject::s_destructorCalls); 2064 EXPECT_EQ(22, LargeHeapObject::s_destructorCalls);
2065 } 2065 }
2066 2066
2067 class SimpleFinalizedEagerObjectBase : public GarbageCollectedFinalized<SimpleFi nalizedEagerObjectBase> { 2067 class SimpleFinalizedEagerObjectBase : public GarbageCollectedFinalized<SimpleFi nalizedEagerObjectBase> {
2068 public: 2068 public:
2069 virtual ~SimpleFinalizedEagerObjectBase() { } 2069 virtual ~SimpleFinalizedEagerObjectBase() { }
2070 DEFINE_INLINE_TRACE() { } 2070 DEFINE_INLINE_TRACE() { }
2071 2071
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2126 SimpleFinalizedEagerObject::s_destructorCalls = 0; 2126 SimpleFinalizedEagerObject::s_destructorCalls = 0;
2127 SimpleFinalizedObjectInstanceOfTemplate::s_destructorCalls = 0; 2127 SimpleFinalizedObjectInstanceOfTemplate::s_destructorCalls = 0;
2128 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); 2128 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls);
2129 EXPECT_EQ(0, SimpleFinalizedEagerObject::s_destructorCalls); 2129 EXPECT_EQ(0, SimpleFinalizedEagerObject::s_destructorCalls);
2130 for (int i = 0; i < 1000; i++) 2130 for (int i = 0; i < 1000; i++)
2131 SimpleFinalizedObject::create(); 2131 SimpleFinalizedObject::create();
2132 for (int i = 0; i < 100; i++) 2132 for (int i = 0; i < 100; i++)
2133 SimpleFinalizedEagerObject::create(); 2133 SimpleFinalizedEagerObject::create();
2134 for (int i = 0; i < 100; i++) 2134 for (int i = 0; i < 100; i++)
2135 SimpleFinalizedObjectInstanceOfTemplate::create(); 2135 SimpleFinalizedObjectInstanceOfTemplate::create();
2136 ThreadState::current()->collectGarbage(BlinkGC::NoHeapPointersOnStack, Blink GC::GCWithoutSweep, BlinkGC::ForcedGC); 2136 ThreadHeap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithou tSweep, BlinkGC::ForcedGC);
2137 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); 2137 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls);
2138 EXPECT_EQ(100, SimpleFinalizedEagerObject::s_destructorCalls); 2138 EXPECT_EQ(100, SimpleFinalizedEagerObject::s_destructorCalls);
2139 EXPECT_EQ(100, SimpleFinalizedObjectInstanceOfTemplate::s_destructorCalls); 2139 EXPECT_EQ(100, SimpleFinalizedObjectInstanceOfTemplate::s_destructorCalls);
2140 } 2140 }
2141 2141
2142 TEST(HeapTest, Finalization) 2142 TEST(HeapTest, Finalization)
2143 { 2143 {
2144 { 2144 {
2145 HeapTestSubClass* t1 = HeapTestSubClass::create(); 2145 HeapTestSubClass* t1 = HeapTestSubClass::create();
2146 HeapTestSubClass* t2 = HeapTestSubClass::create(); 2146 HeapTestSubClass* t2 = HeapTestSubClass::create();
(...skipping 4087 matching lines...) Expand 10 before | Expand all | Expand 10 after
6234 { 6234 {
6235 } 6235 }
6236 }; 6236 };
6237 6237
6238 // Regression test for crbug.com/404511. Tests conservative marking of 6238 // Regression test for crbug.com/404511. Tests conservative marking of
6239 // an object with an uninitialized vtable. 6239 // an object with an uninitialized vtable.
6240 TEST(HeapTest, AllocationInSuperConstructorArgument) 6240 TEST(HeapTest, AllocationInSuperConstructorArgument)
6241 { 6241 {
6242 AllocInSuperConstructorArgument* object = new AllocInSuperConstructorArgumen t(); 6242 AllocInSuperConstructorArgument* object = new AllocInSuperConstructorArgumen t();
6243 EXPECT_TRUE(object); 6243 EXPECT_TRUE(object);
6244 ThreadState::current()->collectAllGarbage(); 6244 ThreadHeap::collectAllGarbage();
6245 } 6245 }
6246 6246
6247 class NonNodeAllocatingNodeInDestructor : public GarbageCollectedFinalized<NonNo deAllocatingNodeInDestructor> { 6247 class NonNodeAllocatingNodeInDestructor : public GarbageCollectedFinalized<NonNo deAllocatingNodeInDestructor> {
6248 public: 6248 public:
6249 ~NonNodeAllocatingNodeInDestructor() 6249 ~NonNodeAllocatingNodeInDestructor()
6250 { 6250 {
6251 s_node = new Persistent<IntNode>(IntNode::create(10)); 6251 s_node = new Persistent<IntNode>(IntNode::create(10));
6252 } 6252 }
6253 6253
6254 DEFINE_INLINE_TRACE() { } 6254 DEFINE_INLINE_TRACE() { }
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after
6690 void workerThreadMainForCrossThreadWeakPersistentTest(DestructorLockingObject** object) 6690 void workerThreadMainForCrossThreadWeakPersistentTest(DestructorLockingObject** object)
6691 { 6691 {
6692 // Step 2: Create an object and store the pointer. 6692 // Step 2: Create an object and store the pointer.
6693 MutexLocker locker(workerThreadMutex()); 6693 MutexLocker locker(workerThreadMutex());
6694 ThreadState::attachCurrentThread(false); 6694 ThreadState::attachCurrentThread(false);
6695 *object = DestructorLockingObject::create(); 6695 *object = DestructorLockingObject::create();
6696 wakeMainThread(); 6696 wakeMainThread();
6697 parkWorkerThread(); 6697 parkWorkerThread();
6698 6698
6699 // Step 4: Run a GC. 6699 // Step 4: Run a GC.
6700 ThreadState::current()->collectGarbage(BlinkGC::NoHeapPointersOnStack, Blink GC::GCWithSweep, BlinkGC::ForcedGC); 6700 ThreadHeap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSw eep, BlinkGC::ForcedGC);
6701 wakeMainThread(); 6701 wakeMainThread();
6702 parkWorkerThread(); 6702 parkWorkerThread();
6703 6703
6704 // Step 6: Finish. 6704 // Step 6: Finish.
6705 ThreadState::detachCurrentThread(); 6705 ThreadState::detachCurrentThread();
6706 wakeMainThread(); 6706 wakeMainThread();
6707 } 6707 }
6708 6708
6709 } // anonymous namespace 6709 } // anonymous namespace
6710 6710
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
6982 static_assert(WTF::IsGarbageCollectedType<HeapLinkedHashSet<Member<IntWrappe r>>>::value, "HeapLinkedHashSet"); 6982 static_assert(WTF::IsGarbageCollectedType<HeapLinkedHashSet<Member<IntWrappe r>>>::value, "HeapLinkedHashSet");
6983 static_assert(WTF::IsGarbageCollectedType<HeapListHashSet<Member<IntWrapper> >>::value, "HeapListHashSet"); 6983 static_assert(WTF::IsGarbageCollectedType<HeapListHashSet<Member<IntWrapper> >>::value, "HeapListHashSet");
6984 static_assert(WTF::IsGarbageCollectedType<HeapHashCountedSet<Member<IntWrapp er>>>::value, "HeapHashCountedSet"); 6984 static_assert(WTF::IsGarbageCollectedType<HeapHashCountedSet<Member<IntWrapp er>>>::value, "HeapHashCountedSet");
6985 static_assert(WTF::IsGarbageCollectedType<HeapHashMap<int, Member<IntWrapper >>>::value, "HeapHashMap"); 6985 static_assert(WTF::IsGarbageCollectedType<HeapHashMap<int, Member<IntWrapper >>>::value, "HeapHashMap");
6986 static_assert(WTF::IsGarbageCollectedType<HeapVector<Member<IntWrapper>>>::v alue, "HeapVector"); 6986 static_assert(WTF::IsGarbageCollectedType<HeapVector<Member<IntWrapper>>>::v alue, "HeapVector");
6987 static_assert(WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::va lue, "HeapDeque"); 6987 static_assert(WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::va lue, "HeapDeque");
6988 static_assert(WTF::IsGarbageCollectedType<HeapTerminatedArray<Member<IntWrap per>>>::value, "HeapTerminatedArray"); 6988 static_assert(WTF::IsGarbageCollectedType<HeapTerminatedArray<Member<IntWrap per>>>::value, "HeapTerminatedArray");
6989 } 6989 }
6990 6990
6991 } // namespace blink 6991 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/Heap.cpp ('k') | third_party/WebKit/Source/platform/heap/PersistentTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698