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

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

Issue 2050123002: Remove OwnPtr from Blink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First attempt to land. Created 4 years, 6 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 26 matching lines...) Expand all
37 #include "platform/heap/SelfKeepAlive.h" 37 #include "platform/heap/SelfKeepAlive.h"
38 #include "platform/heap/ThreadState.h" 38 #include "platform/heap/ThreadState.h"
39 #include "platform/heap/Visitor.h" 39 #include "platform/heap/Visitor.h"
40 #include "platform/testing/UnitTestHelpers.h" 40 #include "platform/testing/UnitTestHelpers.h"
41 #include "public/platform/Platform.h" 41 #include "public/platform/Platform.h"
42 #include "public/platform/WebTaskRunner.h" 42 #include "public/platform/WebTaskRunner.h"
43 #include "public/platform/WebTraceLocation.h" 43 #include "public/platform/WebTraceLocation.h"
44 #include "testing/gtest/include/gtest/gtest.h" 44 #include "testing/gtest/include/gtest/gtest.h"
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"
48 #include <memory>
47 49
48 namespace blink { 50 namespace blink {
49 51
50 static void preciselyCollectGarbage() 52 static void preciselyCollectGarbage()
51 { 53 {
52 ThreadHeap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSw eep, BlinkGC::ForcedGC); 54 ThreadHeap::collectGarbage(BlinkGC::NoHeapPointersOnStack, BlinkGC::GCWithSw eep, BlinkGC::ForcedGC);
53 } 55 }
54 56
55 static void conservativelyCollectGarbage() 57 static void conservativelyCollectGarbage()
56 { 58 {
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 int m_x; 460 int m_x;
459 }; 461 };
460 462
461 int IntWrapper::s_destructorCalls = 0; 463 int IntWrapper::s_destructorCalls = 0;
462 int OffHeapInt::s_destructorCalls = 0; 464 int OffHeapInt::s_destructorCalls = 0;
463 465
464 class ThreadedTesterBase { 466 class ThreadedTesterBase {
465 protected: 467 protected:
466 static void test(ThreadedTesterBase* tester) 468 static void test(ThreadedTesterBase* tester)
467 { 469 {
468 Vector<OwnPtr<WebThread>, numberOfThreads> m_threads; 470 Vector<std::unique_ptr<WebThread>, numberOfThreads> m_threads;
469 for (int i = 0; i < numberOfThreads; i++) { 471 for (int i = 0; i < numberOfThreads; i++) {
470 m_threads.append(adoptPtr(Platform::current()->createThread("blink g c testing thread"))); 472 m_threads.append(wrapUnique(Platform::current()->createThread("blink gc testing thread")));
471 m_threads.last()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, thre adSafeBind(threadFunc, AllowCrossThreadAccess(tester))); 473 m_threads.last()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, thre adSafeBind(threadFunc, AllowCrossThreadAccess(tester)));
472 } 474 }
473 while (tester->m_threadsToFinish) { 475 while (tester->m_threadsToFinish) {
474 SafePointScope scope(BlinkGC::NoHeapPointersOnStack); 476 SafePointScope scope(BlinkGC::NoHeapPointersOnStack);
475 testing::yieldCurrentThread(); 477 testing::yieldCurrentThread();
476 } 478 }
477 delete tester; 479 delete tester;
478 } 480 }
479 481
480 virtual void runThread() = 0; 482 virtual void runThread() = 0;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 for (auto& globalIntWrapper : m_crossPersistents) { 524 for (auto& globalIntWrapper : m_crossPersistents) {
523 ASSERT(globalIntWrapper.get()); 525 ASSERT(globalIntWrapper.get());
524 EXPECT_FALSE(globalIntWrapper.get()->get()); 526 EXPECT_FALSE(globalIntWrapper.get()->get());
525 } 527 }
526 } 528 }
527 529
528 protected: 530 protected:
529 using GlobalIntWrapperPersistent = CrossThreadPersistent<IntWrapper>; 531 using GlobalIntWrapperPersistent = CrossThreadPersistent<IntWrapper>;
530 532
531 Mutex m_mutex; 533 Mutex m_mutex;
532 Vector<OwnPtr<GlobalIntWrapperPersistent>> m_crossPersistents; 534 Vector<std::unique_ptr<GlobalIntWrapperPersistent>> m_crossPersistents;
533 535
534 PassOwnPtr<GlobalIntWrapperPersistent> createGlobalPersistent(int value) 536 std::unique_ptr<GlobalIntWrapperPersistent> createGlobalPersistent(int value )
535 { 537 {
536 return adoptPtr(new GlobalIntWrapperPersistent(IntWrapper::create(value) )); 538 return wrapUnique(new GlobalIntWrapperPersistent(IntWrapper::create(valu e)));
537 } 539 }
538 540
539 void addGlobalPersistent() 541 void addGlobalPersistent()
540 { 542 {
541 MutexLocker lock(m_mutex); 543 MutexLocker lock(m_mutex);
542 m_crossPersistents.append(createGlobalPersistent(0x2a2a2a2a)); 544 m_crossPersistents.append(createGlobalPersistent(0x2a2a2a2a));
543 } 545 }
544 546
545 void runThread() override 547 void runThread() override
546 { 548 {
547 ThreadState::attachCurrentThread(false); 549 ThreadState::attachCurrentThread(false);
548 550
549 // Add a cross-thread persistent from this thread; the test object 551 // Add a cross-thread persistent from this thread; the test object
550 // verifies that it will have been cleared out after the threads 552 // verifies that it will have been cleared out after the threads
551 // have all detached, running their termination GCs while doing so. 553 // have all detached, running their termination GCs while doing so.
552 addGlobalPersistent(); 554 addGlobalPersistent();
553 555
554 int gcCount = 0; 556 int gcCount = 0;
555 while (!done()) { 557 while (!done()) {
556 ThreadState::current()->safePoint(BlinkGC::NoHeapPointersOnStack); 558 ThreadState::current()->safePoint(BlinkGC::NoHeapPointersOnStack);
557 { 559 {
558 Persistent<IntWrapper> wrapper; 560 Persistent<IntWrapper> wrapper;
559 561
560 OwnPtr<GlobalIntWrapperPersistent> globalPersistent = createGlob alPersistent(0x0ed0cabb); 562 std::unique_ptr<GlobalIntWrapperPersistent> globalPersistent = c reateGlobalPersistent(0x0ed0cabb);
561 563
562 for (int i = 0; i < numberOfAllocations; i++) { 564 for (int i = 0; i < numberOfAllocations; i++) {
563 wrapper = IntWrapper::create(0x0bbac0de); 565 wrapper = IntWrapper::create(0x0bbac0de);
564 if (!(i % 10)) { 566 if (!(i % 10)) {
565 globalPersistent = createGlobalPersistent(0x0ed0cabb); 567 globalPersistent = createGlobalPersistent(0x0ed0cabb);
566 } 568 }
567 SafePointScope scope(BlinkGC::NoHeapPointersOnStack); 569 SafePointScope scope(BlinkGC::NoHeapPointersOnStack);
568 testing::yieldCurrentThread(); 570 testing::yieldCurrentThread();
569 } 571 }
570 572
(...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after
1381 , m_didCallWillFinalize(false) 1383 , m_didCallWillFinalize(false)
1382 { 1384 {
1383 } 1385 }
1384 1386
1385 WeakMember<T> m_data; 1387 WeakMember<T> m_data;
1386 bool m_didCallWillFinalize; 1388 bool m_didCallWillFinalize;
1387 }; 1389 };
1388 1390
1389 class FinalizationObserverWithHashMap { 1391 class FinalizationObserverWithHashMap {
1390 public: 1392 public:
1391 typedef HeapHashMap<WeakMember<Observable>, OwnPtr<FinalizationObserverWithH ashMap>> ObserverMap; 1393 typedef HeapHashMap<WeakMember<Observable>, std::unique_ptr<FinalizationObse rverWithHashMap>> ObserverMap;
1392 1394
1393 explicit FinalizationObserverWithHashMap(Observable& target) : m_target(targ et) { } 1395 explicit FinalizationObserverWithHashMap(Observable& target) : m_target(targ et) { }
1394 ~FinalizationObserverWithHashMap() 1396 ~FinalizationObserverWithHashMap()
1395 { 1397 {
1396 m_target.willFinalize(); 1398 m_target.willFinalize();
1397 s_didCallWillFinalize = true; 1399 s_didCallWillFinalize = true;
1398 } 1400 }
1399 1401
1400 static ObserverMap& observe(Observable& target) 1402 static ObserverMap& observe(Observable& target)
1401 { 1403 {
1402 ObserverMap& map = observers(); 1404 ObserverMap& map = observers();
1403 ObserverMap::AddResult result = map.add(&target, nullptr); 1405 ObserverMap::AddResult result = map.add(&target, nullptr);
1404 if (result.isNewEntry) 1406 if (result.isNewEntry)
1405 result.storedValue->value = adoptPtr(new FinalizationObserverWithHas hMap(target)); 1407 result.storedValue->value = wrapUnique(new FinalizationObserverWithH ashMap(target));
1406 else 1408 else
1407 ASSERT(result.storedValue->value); 1409 ASSERT(result.storedValue->value);
1408 return map; 1410 return map;
1409 } 1411 }
1410 1412
1411 static void clearObservers() 1413 static void clearObservers()
1412 { 1414 {
1413 delete s_observerMap; 1415 delete s_observerMap;
1414 s_observerMap = nullptr; 1416 s_observerMap = nullptr;
1415 } 1417 }
(...skipping 3371 matching lines...) Expand 10 before | Expand all | Expand 10 after
4787 } 4789 }
4788 } 4790 }
4789 4791
4790 EXPECT_FALSE(RefCountedWithDestructor::s_wasDestructed); 4792 EXPECT_FALSE(RefCountedWithDestructor::s_wasDestructed);
4791 set.clear(); 4793 set.clear();
4792 EXPECT_TRUE(RefCountedWithDestructor::s_wasDestructed); 4794 EXPECT_TRUE(RefCountedWithDestructor::s_wasDestructed);
4793 } 4795 }
4794 4796
4795 TEST(HeapTest, DestructorsCalled) 4797 TEST(HeapTest, DestructorsCalled)
4796 { 4798 {
4797 HeapHashMap<Member<IntWrapper>, OwnPtr<SimpleClassWithDestructor>> map; 4799 HeapHashMap<Member<IntWrapper>, std::unique_ptr<SimpleClassWithDestructor>> map;
4798 SimpleClassWithDestructor* hasDestructor = new SimpleClassWithDestructor(); 4800 SimpleClassWithDestructor* hasDestructor = new SimpleClassWithDestructor();
4799 map.add(IntWrapper::create(1), adoptPtr(hasDestructor)); 4801 map.add(IntWrapper::create(1), wrapUnique(hasDestructor));
4800 SimpleClassWithDestructor::s_wasDestructed = false; 4802 SimpleClassWithDestructor::s_wasDestructed = false;
4801 map.clear(); 4803 map.clear();
4802 EXPECT_TRUE(SimpleClassWithDestructor::s_wasDestructed); 4804 EXPECT_TRUE(SimpleClassWithDestructor::s_wasDestructed);
4803 } 4805 }
4804 4806
4805 class MixinA : public GarbageCollectedMixin { 4807 class MixinA : public GarbageCollectedMixin {
4806 public: 4808 public:
4807 MixinA() : m_obj(IntWrapper::create(100)) { } 4809 MixinA() : m_obj(IntWrapper::create(100)) { }
4808 DEFINE_INLINE_VIRTUAL_TRACE() 4810 DEFINE_INLINE_VIRTUAL_TRACE()
4809 { 4811 {
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
4934 EXPECT_EQ(2, MixinA::s_traceCount); 4936 EXPECT_EQ(2, MixinA::s_traceCount);
4935 } 4937 }
4936 preciselyCollectGarbage(); 4938 preciselyCollectGarbage();
4937 EXPECT_EQ(2, MixinA::s_traceCount); 4939 EXPECT_EQ(2, MixinA::s_traceCount);
4938 } 4940 }
4939 4941
4940 class GCParkingThreadTester { 4942 class GCParkingThreadTester {
4941 public: 4943 public:
4942 static void test() 4944 static void test()
4943 { 4945 {
4944 OwnPtr<WebThread> sleepingThread = adoptPtr(Platform::current()->createT hread("SleepingThread")); 4946 std::unique_ptr<WebThread> sleepingThread = wrapUnique(Platform::current ()->createThread("SleepingThread"));
4945 sleepingThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafe Bind(sleeperMainFunc)); 4947 sleepingThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafe Bind(sleeperMainFunc));
4946 4948
4947 // Wait for the sleeper to run. 4949 // Wait for the sleeper to run.
4948 while (!s_sleeperRunning) { 4950 while (!s_sleeperRunning) {
4949 testing::yieldCurrentThread(); 4951 testing::yieldCurrentThread();
4950 } 4952 }
4951 4953
4952 { 4954 {
4953 // Expect the first attempt to park the sleeping thread to fail 4955 // Expect the first attempt to park the sleeping thread to fail
4954 TestGCScope scope(BlinkGC::NoHeapPointersOnStack); 4956 TestGCScope scope(BlinkGC::NoHeapPointersOnStack);
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
5599 workerThreadCondition().signal(); 5601 workerThreadCondition().signal();
5600 } 5602 }
5601 5603
5602 class DeadBitTester { 5604 class DeadBitTester {
5603 public: 5605 public:
5604 static void test() 5606 static void test()
5605 { 5607 {
5606 IntWrapper::s_destructorCalls = 0; 5608 IntWrapper::s_destructorCalls = 0;
5607 5609
5608 MutexLocker locker(mainThreadMutex()); 5610 MutexLocker locker(mainThreadMutex());
5609 OwnPtr<WebThread> workerThread = adoptPtr(Platform::current()->createThr ead("Test Worker Thread")); 5611 std::unique_ptr<WebThread> workerThread = wrapUnique(Platform::current() ->createThread("Test Worker Thread"));
5610 workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBi nd(workerThreadMain)); 5612 workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBi nd(workerThreadMain));
5611 5613
5612 // Wait for the worker thread to have done its initialization, 5614 // Wait for the worker thread to have done its initialization,
5613 // IE. the worker allocates an object and then throw aways any 5615 // IE. the worker allocates an object and then throw aways any
5614 // pointers to it. 5616 // pointers to it.
5615 parkMainThread(); 5617 parkMainThread();
5616 5618
5617 // Now do a GC. This will not find the worker threads object since it 5619 // Now do a GC. This will not find the worker threads object since it
5618 // is not referred from any of the threads. Even a conservative 5620 // is not referred from any of the threads. Even a conservative
5619 // GC will not find it. 5621 // GC will not find it.
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
5702 DeadBitTester::test(); 5704 DeadBitTester::test();
5703 } 5705 }
5704 5706
5705 class ThreadedStrongificationTester { 5707 class ThreadedStrongificationTester {
5706 public: 5708 public:
5707 static void test() 5709 static void test()
5708 { 5710 {
5709 IntWrapper::s_destructorCalls = 0; 5711 IntWrapper::s_destructorCalls = 0;
5710 5712
5711 MutexLocker locker(mainThreadMutex()); 5713 MutexLocker locker(mainThreadMutex());
5712 OwnPtr<WebThread> workerThread = adoptPtr(Platform::current()->createThr ead("Test Worker Thread")); 5714 std::unique_ptr<WebThread> workerThread = wrapUnique(Platform::current() ->createThread("Test Worker Thread"));
5713 workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBi nd(workerThreadMain)); 5715 workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBi nd(workerThreadMain));
5714 5716
5715 // Wait for the worker thread initialization. The worker 5717 // Wait for the worker thread initialization. The worker
5716 // allocates a weak collection where both collection and 5718 // allocates a weak collection where both collection and
5717 // contents are kept alive via persistent pointers. 5719 // contents are kept alive via persistent pointers.
5718 parkMainThread(); 5720 parkMainThread();
5719 5721
5720 // Perform two garbage collections where the worker thread does 5722 // Perform two garbage collections where the worker thread does
5721 // not wake up in between. This will cause us to remove marks 5723 // not wake up in between. This will cause us to remove marks
5722 // and mark unmarked objects dead. The collection on the worker 5724 // and mark unmarked objects dead. The collection on the worker
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
5905 5907
5906 int DestructorLockingObject::s_destructorCalls = 0; 5908 int DestructorLockingObject::s_destructorCalls = 0;
5907 5909
5908 class RecursiveLockingTester { 5910 class RecursiveLockingTester {
5909 public: 5911 public:
5910 static void test() 5912 static void test()
5911 { 5913 {
5912 DestructorLockingObject::s_destructorCalls = 0; 5914 DestructorLockingObject::s_destructorCalls = 0;
5913 5915
5914 MutexLocker locker(mainThreadMutex()); 5916 MutexLocker locker(mainThreadMutex());
5915 OwnPtr<WebThread> workerThread = adoptPtr(Platform::current()->createThr ead("Test Worker Thread")); 5917 std::unique_ptr<WebThread> workerThread = wrapUnique(Platform::current() ->createThread("Test Worker Thread"));
5916 workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBi nd(workerThreadMain)); 5918 workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBi nd(workerThreadMain));
5917 5919
5918 // Park the main thread until the worker thread has initialized. 5920 // Park the main thread until the worker thread has initialized.
5919 parkMainThread(); 5921 parkMainThread();
5920 5922
5921 { 5923 {
5922 SafePointAwareMutexLocker recursiveLocker(recursiveMutex()); 5924 SafePointAwareMutexLocker recursiveLocker(recursiveMutex());
5923 5925
5924 // Let the worker try to acquire the above mutex. It won't get it 5926 // Let the worker try to acquire the above mutex. It won't get it
5925 // until the main thread has done its GC. 5927 // until the main thread has done its GC.
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after
6610 public: 6612 public:
6611 explicit WeakPersistentHolder(IntWrapper* object) : m_object(object) { } 6613 explicit WeakPersistentHolder(IntWrapper* object) : m_object(object) { }
6612 IntWrapper* object() const { return m_object; } 6614 IntWrapper* object() const { return m_object; }
6613 private: 6615 private:
6614 WeakPersistent<IntWrapper> m_object; 6616 WeakPersistent<IntWrapper> m_object;
6615 }; 6617 };
6616 6618
6617 TEST(HeapTest, WeakPersistent) 6619 TEST(HeapTest, WeakPersistent)
6618 { 6620 {
6619 Persistent<IntWrapper> object = new IntWrapper(20); 6621 Persistent<IntWrapper> object = new IntWrapper(20);
6620 OwnPtr<WeakPersistentHolder> holder = adoptPtr(new WeakPersistentHolder(obje ct)); 6622 std::unique_ptr<WeakPersistentHolder> holder = wrapUnique(new WeakPersistent Holder(object));
6621 preciselyCollectGarbage(); 6623 preciselyCollectGarbage();
6622 EXPECT_TRUE(holder->object()); 6624 EXPECT_TRUE(holder->object());
6623 object = nullptr; 6625 object = nullptr;
6624 preciselyCollectGarbage(); 6626 preciselyCollectGarbage();
6625 EXPECT_FALSE(holder->object()); 6627 EXPECT_FALSE(holder->object());
6626 } 6628 }
6627 6629
6628 namespace { 6630 namespace {
6629 6631
6630 void workerThreadMainForCrossThreadWeakPersistentTest(DestructorLockingObject** object) 6632 void workerThreadMainForCrossThreadWeakPersistentTest(DestructorLockingObject** object)
(...skipping 20 matching lines...) Expand all
6651 TEST(HeapTest, CrossThreadWeakPersistent) 6653 TEST(HeapTest, CrossThreadWeakPersistent)
6652 { 6654 {
6653 // Create an object in the worker thread, have a CrossThreadWeakPersistent p ointing to it on the main thread, 6655 // Create an object in the worker thread, have a CrossThreadWeakPersistent p ointing to it on the main thread,
6654 // clear the reference in the worker thread, run a GC in the worker thread, and see if the 6656 // clear the reference in the worker thread, run a GC in the worker thread, and see if the
6655 // CrossThreadWeakPersistent is cleared. 6657 // CrossThreadWeakPersistent is cleared.
6656 6658
6657 DestructorLockingObject::s_destructorCalls = 0; 6659 DestructorLockingObject::s_destructorCalls = 0;
6658 6660
6659 // Step 1: Initiate a worker thread, and wait for |object| to get allocated on the worker thread. 6661 // Step 1: Initiate a worker thread, and wait for |object| to get allocated on the worker thread.
6660 MutexLocker mainThreadMutexLocker(mainThreadMutex()); 6662 MutexLocker mainThreadMutexLocker(mainThreadMutex());
6661 OwnPtr<WebThread> workerThread = adoptPtr(Platform::current()->createThread( "Test Worker Thread")); 6663 std::unique_ptr<WebThread> workerThread = wrapUnique(Platform::current()->cr eateThread("Test Worker Thread"));
6662 DestructorLockingObject* object = nullptr; 6664 DestructorLockingObject* object = nullptr;
6663 workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(w orkerThreadMainForCrossThreadWeakPersistentTest, AllowCrossThreadAccess(&object) )); 6665 workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(w orkerThreadMainForCrossThreadWeakPersistentTest, AllowCrossThreadAccess(&object) ));
6664 parkMainThread(); 6666 parkMainThread();
6665 6667
6666 // Step 3: Set up a CrossThreadWeakPersistent. 6668 // Step 3: Set up a CrossThreadWeakPersistent.
6667 ASSERT_TRUE(object); 6669 ASSERT_TRUE(object);
6668 CrossThreadWeakPersistent<DestructorLockingObject> crossThreadWeakPersistent (object); 6670 CrossThreadWeakPersistent<DestructorLockingObject> crossThreadWeakPersistent (object);
6669 object = nullptr; 6671 object = nullptr;
6670 { 6672 {
6671 SafePointAwareMutexLocker recursiveMutexLocker(recursiveMutex()); 6673 SafePointAwareMutexLocker recursiveMutexLocker(recursiveMutex());
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
6922 static_assert(WTF::IsGarbageCollectedType<HeapLinkedHashSet<Member<IntWrappe r>>>::value, "HeapLinkedHashSet"); 6924 static_assert(WTF::IsGarbageCollectedType<HeapLinkedHashSet<Member<IntWrappe r>>>::value, "HeapLinkedHashSet");
6923 static_assert(WTF::IsGarbageCollectedType<HeapListHashSet<Member<IntWrapper> >>::value, "HeapListHashSet"); 6925 static_assert(WTF::IsGarbageCollectedType<HeapListHashSet<Member<IntWrapper> >>::value, "HeapListHashSet");
6924 static_assert(WTF::IsGarbageCollectedType<HeapHashCountedSet<Member<IntWrapp er>>>::value, "HeapHashCountedSet"); 6926 static_assert(WTF::IsGarbageCollectedType<HeapHashCountedSet<Member<IntWrapp er>>>::value, "HeapHashCountedSet");
6925 static_assert(WTF::IsGarbageCollectedType<HeapHashMap<int, Member<IntWrapper >>>::value, "HeapHashMap"); 6927 static_assert(WTF::IsGarbageCollectedType<HeapHashMap<int, Member<IntWrapper >>>::value, "HeapHashMap");
6926 static_assert(WTF::IsGarbageCollectedType<HeapVector<Member<IntWrapper>>>::v alue, "HeapVector"); 6928 static_assert(WTF::IsGarbageCollectedType<HeapVector<Member<IntWrapper>>>::v alue, "HeapVector");
6927 static_assert(WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::va lue, "HeapDeque"); 6929 static_assert(WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::va lue, "HeapDeque");
6928 static_assert(WTF::IsGarbageCollectedType<HeapTerminatedArray<Member<IntWrap per>>>::value, "HeapTerminatedArray"); 6930 static_assert(WTF::IsGarbageCollectedType<HeapTerminatedArray<Member<IntWrap per>>>::value, "HeapTerminatedArray");
6929 } 6931 }
6930 6932
6931 } // namespace blink 6933 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/HeapPage.cpp ('k') | third_party/WebKit/Source/platform/heap/PersistentNode.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698