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

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

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