| 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 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 }; | 482 }; |
| 483 | 483 |
| 484 int IntWrapper::s_destructorCalls = 0; | 484 int IntWrapper::s_destructorCalls = 0; |
| 485 int OffHeapInt::s_destructorCalls = 0; | 485 int OffHeapInt::s_destructorCalls = 0; |
| 486 | 486 |
| 487 class ThreadedTesterBase { | 487 class ThreadedTesterBase { |
| 488 protected: | 488 protected: |
| 489 static void test(ThreadedTesterBase* tester) { | 489 static void test(ThreadedTesterBase* tester) { |
| 490 Vector<std::unique_ptr<WebThread>, numberOfThreads> m_threads; | 490 Vector<std::unique_ptr<WebThread>, numberOfThreads> m_threads; |
| 491 for (int i = 0; i < numberOfThreads; i++) { | 491 for (int i = 0; i < numberOfThreads; i++) { |
| 492 m_threads.append(WTF::wrapUnique( | 492 m_threads.push_back(WTF::wrapUnique( |
| 493 Platform::current()->createThread("blink gc testing thread"))); | 493 Platform::current()->createThread("blink gc testing thread"))); |
| 494 m_threads.back()->getWebTaskRunner()->postTask( | 494 m_threads.back()->getWebTaskRunner()->postTask( |
| 495 BLINK_FROM_HERE, | 495 BLINK_FROM_HERE, |
| 496 crossThreadBind(threadFunc, crossThreadUnretained(tester))); | 496 crossThreadBind(threadFunc, crossThreadUnretained(tester))); |
| 497 } | 497 } |
| 498 while (tester->m_threadsToFinish) { | 498 while (tester->m_threadsToFinish) { |
| 499 SafePointScope scope(BlinkGC::NoHeapPointersOnStack); | 499 SafePointScope scope(BlinkGC::NoHeapPointersOnStack); |
| 500 testing::yieldCurrentThread(); | 500 testing::yieldCurrentThread(); |
| 501 } | 501 } |
| 502 delete tester; | 502 delete tester; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 Vector<std::unique_ptr<GlobalIntWrapperPersistent>> m_crossPersistents; | 550 Vector<std::unique_ptr<GlobalIntWrapperPersistent>> m_crossPersistents; |
| 551 | 551 |
| 552 std::unique_ptr<GlobalIntWrapperPersistent> createGlobalPersistent( | 552 std::unique_ptr<GlobalIntWrapperPersistent> createGlobalPersistent( |
| 553 int value) { | 553 int value) { |
| 554 return WTF::wrapUnique( | 554 return WTF::wrapUnique( |
| 555 new GlobalIntWrapperPersistent(IntWrapper::create(value))); | 555 new GlobalIntWrapperPersistent(IntWrapper::create(value))); |
| 556 } | 556 } |
| 557 | 557 |
| 558 void addGlobalPersistent() { | 558 void addGlobalPersistent() { |
| 559 MutexLocker lock(m_mutex); | 559 MutexLocker lock(m_mutex); |
| 560 m_crossPersistents.append(createGlobalPersistent(0x2a2a2a2a)); | 560 m_crossPersistents.push_back(createGlobalPersistent(0x2a2a2a2a)); |
| 561 } | 561 } |
| 562 | 562 |
| 563 void runThread() override { | 563 void runThread() override { |
| 564 ThreadState::attachCurrentThread(BlinkGC::MainThreadHeapMode); | 564 ThreadState::attachCurrentThread(BlinkGC::MainThreadHeapMode); |
| 565 | 565 |
| 566 // Add a cross-thread persistent from this thread; the test object | 566 // Add a cross-thread persistent from this thread; the test object |
| 567 // verifies that it will have been cleared out after the threads | 567 // verifies that it will have been cleared out after the threads |
| 568 // have all detached, running their termination GCs while doing so. | 568 // have all detached, running their termination GCs while doing so. |
| 569 addGlobalPersistent(); | 569 addGlobalPersistent(); |
| 570 | 570 |
| (...skipping 1773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2344 | 2344 |
| 2345 TEST(HeapTest, HeapVectorWithInlineCapacity) { | 2345 TEST(HeapTest, HeapVectorWithInlineCapacity) { |
| 2346 IntWrapper* one = IntWrapper::create(1); | 2346 IntWrapper* one = IntWrapper::create(1); |
| 2347 IntWrapper* two = IntWrapper::create(2); | 2347 IntWrapper* two = IntWrapper::create(2); |
| 2348 IntWrapper* three = IntWrapper::create(3); | 2348 IntWrapper* three = IntWrapper::create(3); |
| 2349 IntWrapper* four = IntWrapper::create(4); | 2349 IntWrapper* four = IntWrapper::create(4); |
| 2350 IntWrapper* five = IntWrapper::create(5); | 2350 IntWrapper* five = IntWrapper::create(5); |
| 2351 IntWrapper* six = IntWrapper::create(6); | 2351 IntWrapper* six = IntWrapper::create(6); |
| 2352 { | 2352 { |
| 2353 HeapVector<Member<IntWrapper>, 2> vector; | 2353 HeapVector<Member<IntWrapper>, 2> vector; |
| 2354 vector.append(one); | 2354 vector.push_back(one); |
| 2355 vector.append(two); | 2355 vector.push_back(two); |
| 2356 conservativelyCollectGarbage(); | 2356 conservativelyCollectGarbage(); |
| 2357 EXPECT_TRUE(vector.contains(one)); | 2357 EXPECT_TRUE(vector.contains(one)); |
| 2358 EXPECT_TRUE(vector.contains(two)); | 2358 EXPECT_TRUE(vector.contains(two)); |
| 2359 | 2359 |
| 2360 vector.append(three); | 2360 vector.push_back(three); |
| 2361 vector.append(four); | 2361 vector.push_back(four); |
| 2362 conservativelyCollectGarbage(); | 2362 conservativelyCollectGarbage(); |
| 2363 EXPECT_TRUE(vector.contains(one)); | 2363 EXPECT_TRUE(vector.contains(one)); |
| 2364 EXPECT_TRUE(vector.contains(two)); | 2364 EXPECT_TRUE(vector.contains(two)); |
| 2365 EXPECT_TRUE(vector.contains(three)); | 2365 EXPECT_TRUE(vector.contains(three)); |
| 2366 EXPECT_TRUE(vector.contains(four)); | 2366 EXPECT_TRUE(vector.contains(four)); |
| 2367 | 2367 |
| 2368 vector.shrink(1); | 2368 vector.shrink(1); |
| 2369 conservativelyCollectGarbage(); | 2369 conservativelyCollectGarbage(); |
| 2370 EXPECT_TRUE(vector.contains(one)); | 2370 EXPECT_TRUE(vector.contains(one)); |
| 2371 EXPECT_FALSE(vector.contains(two)); | 2371 EXPECT_FALSE(vector.contains(two)); |
| 2372 EXPECT_FALSE(vector.contains(three)); | 2372 EXPECT_FALSE(vector.contains(three)); |
| 2373 EXPECT_FALSE(vector.contains(four)); | 2373 EXPECT_FALSE(vector.contains(four)); |
| 2374 } | 2374 } |
| 2375 { | 2375 { |
| 2376 HeapVector<Member<IntWrapper>, 2> vector1; | 2376 HeapVector<Member<IntWrapper>, 2> vector1; |
| 2377 HeapVector<Member<IntWrapper>, 2> vector2; | 2377 HeapVector<Member<IntWrapper>, 2> vector2; |
| 2378 | 2378 |
| 2379 vector1.append(one); | 2379 vector1.push_back(one); |
| 2380 vector2.append(two); | 2380 vector2.push_back(two); |
| 2381 vector1.swap(vector2); | 2381 vector1.swap(vector2); |
| 2382 conservativelyCollectGarbage(); | 2382 conservativelyCollectGarbage(); |
| 2383 EXPECT_TRUE(vector1.contains(two)); | 2383 EXPECT_TRUE(vector1.contains(two)); |
| 2384 EXPECT_TRUE(vector2.contains(one)); | 2384 EXPECT_TRUE(vector2.contains(one)); |
| 2385 } | 2385 } |
| 2386 { | 2386 { |
| 2387 HeapVector<Member<IntWrapper>, 2> vector1; | 2387 HeapVector<Member<IntWrapper>, 2> vector1; |
| 2388 HeapVector<Member<IntWrapper>, 2> vector2; | 2388 HeapVector<Member<IntWrapper>, 2> vector2; |
| 2389 | 2389 |
| 2390 vector1.append(one); | 2390 vector1.push_back(one); |
| 2391 vector1.append(two); | 2391 vector1.push_back(two); |
| 2392 vector2.append(three); | 2392 vector2.push_back(three); |
| 2393 vector2.append(four); | 2393 vector2.push_back(four); |
| 2394 vector2.append(five); | 2394 vector2.push_back(five); |
| 2395 vector2.append(six); | 2395 vector2.push_back(six); |
| 2396 vector1.swap(vector2); | 2396 vector1.swap(vector2); |
| 2397 conservativelyCollectGarbage(); | 2397 conservativelyCollectGarbage(); |
| 2398 EXPECT_TRUE(vector1.contains(three)); | 2398 EXPECT_TRUE(vector1.contains(three)); |
| 2399 EXPECT_TRUE(vector1.contains(four)); | 2399 EXPECT_TRUE(vector1.contains(four)); |
| 2400 EXPECT_TRUE(vector1.contains(five)); | 2400 EXPECT_TRUE(vector1.contains(five)); |
| 2401 EXPECT_TRUE(vector1.contains(six)); | 2401 EXPECT_TRUE(vector1.contains(six)); |
| 2402 EXPECT_TRUE(vector2.contains(one)); | 2402 EXPECT_TRUE(vector2.contains(one)); |
| 2403 EXPECT_TRUE(vector2.contains(two)); | 2403 EXPECT_TRUE(vector2.contains(two)); |
| 2404 } | 2404 } |
| 2405 } | 2405 } |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2549 memberPrimitive->add(two, 3); | 2549 memberPrimitive->add(two, 3); |
| 2550 memberPrimitive->add(three, 4); | 2550 memberPrimitive->add(three, 4); |
| 2551 memberPrimitive->add(four, 1); | 2551 memberPrimitive->add(four, 1); |
| 2552 set2->add(one); | 2552 set2->add(one); |
| 2553 set2->add(two); | 2553 set2->add(two); |
| 2554 set2->add(three); | 2554 set2->add(three); |
| 2555 set2->add(four); | 2555 set2->add(four); |
| 2556 set->add(oneB); | 2556 set->add(oneB); |
| 2557 set3->add(oneB); | 2557 set3->add(oneB); |
| 2558 set3->add(oneB); | 2558 set3->add(oneB); |
| 2559 vector->append(oneB); | 2559 vector->push_back(oneB); |
| 2560 deque->append(oneB); | 2560 deque->append(oneB); |
| 2561 vector2->append(threeB); | 2561 vector2->push_back(threeB); |
| 2562 vector2->append(fourB); | 2562 vector2->push_back(fourB); |
| 2563 deque2->append(threeE); | 2563 deque2->append(threeE); |
| 2564 deque2->append(fourE); | 2564 deque2->append(fourE); |
| 2565 vectorWU->append(PairWrappedUnwrapped(&*oneC, 42)); | 2565 vectorWU->push_back(PairWrappedUnwrapped(&*oneC, 42)); |
| 2566 dequeWU->append(PairWrappedUnwrapped(&*oneE, 42)); | 2566 dequeWU->append(PairWrappedUnwrapped(&*oneE, 42)); |
| 2567 vectorWU2->append(PairWrappedUnwrapped(&*threeC, 43)); | 2567 vectorWU2->push_back(PairWrappedUnwrapped(&*threeC, 43)); |
| 2568 vectorWU2->append(PairWrappedUnwrapped(&*fourC, 44)); | 2568 vectorWU2->push_back(PairWrappedUnwrapped(&*fourC, 44)); |
| 2569 vectorWU2->append(PairWrappedUnwrapped(&*fiveC, 45)); | 2569 vectorWU2->push_back(PairWrappedUnwrapped(&*fiveC, 45)); |
| 2570 dequeWU2->append(PairWrappedUnwrapped(&*threeE, 43)); | 2570 dequeWU2->append(PairWrappedUnwrapped(&*threeE, 43)); |
| 2571 dequeWU2->append(PairWrappedUnwrapped(&*fourE, 44)); | 2571 dequeWU2->append(PairWrappedUnwrapped(&*fourE, 44)); |
| 2572 dequeWU2->append(PairWrappedUnwrapped(&*fiveE, 45)); | 2572 dequeWU2->append(PairWrappedUnwrapped(&*fiveE, 45)); |
| 2573 vectorUW->append(PairUnwrappedWrapped(1, &*oneD)); | 2573 vectorUW->push_back(PairUnwrappedWrapped(1, &*oneD)); |
| 2574 vectorUW2->append(PairUnwrappedWrapped(103, &*threeD)); | 2574 vectorUW2->push_back(PairUnwrappedWrapped(103, &*threeD)); |
| 2575 vectorUW2->append(PairUnwrappedWrapped(104, &*fourD)); | 2575 vectorUW2->push_back(PairUnwrappedWrapped(104, &*fourD)); |
| 2576 vectorUW2->append(PairUnwrappedWrapped(105, &*fiveD)); | 2576 vectorUW2->push_back(PairUnwrappedWrapped(105, &*fiveD)); |
| 2577 dequeUW->append(PairUnwrappedWrapped(1, &*oneF)); | 2577 dequeUW->append(PairUnwrappedWrapped(1, &*oneF)); |
| 2578 dequeUW2->append(PairUnwrappedWrapped(103, &*threeF)); | 2578 dequeUW2->append(PairUnwrappedWrapped(103, &*threeF)); |
| 2579 dequeUW2->append(PairUnwrappedWrapped(104, &*fourF)); | 2579 dequeUW2->append(PairUnwrappedWrapped(104, &*fourF)); |
| 2580 dequeUW2->append(PairUnwrappedWrapped(105, &*fiveF)); | 2580 dequeUW2->append(PairUnwrappedWrapped(105, &*fiveF)); |
| 2581 | 2581 |
| 2582 EXPECT_TRUE(dequeContains(*deque, oneB)); | 2582 EXPECT_TRUE(dequeContains(*deque, oneB)); |
| 2583 | 2583 |
| 2584 // Collect garbage. This should change nothing since we are keeping | 2584 // Collect garbage. This should change nothing since we are keeping |
| 2585 // alive the IntWrapper objects with on-stack pointers. | 2585 // alive the IntWrapper objects with on-stack pointers. |
| 2586 conservativelyCollectGarbage(); | 2586 conservativelyCollectGarbage(); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2769 typedef Vector<Persistent<IntWrapper>> PersistentVector; | 2769 typedef Vector<Persistent<IntWrapper>> PersistentVector; |
| 2770 | 2770 |
| 2771 Persistent<IntWrapper> one(IntWrapper::create(1)); | 2771 Persistent<IntWrapper> one(IntWrapper::create(1)); |
| 2772 Persistent<IntWrapper> two(IntWrapper::create(2)); | 2772 Persistent<IntWrapper> two(IntWrapper::create(2)); |
| 2773 Persistent<IntWrapper> three(IntWrapper::create(3)); | 2773 Persistent<IntWrapper> three(IntWrapper::create(3)); |
| 2774 Persistent<IntWrapper> four(IntWrapper::create(4)); | 2774 Persistent<IntWrapper> four(IntWrapper::create(4)); |
| 2775 Persistent<IntWrapper> five(IntWrapper::create(5)); | 2775 Persistent<IntWrapper> five(IntWrapper::create(5)); |
| 2776 Persistent<IntWrapper> six(IntWrapper::create(6)); | 2776 Persistent<IntWrapper> six(IntWrapper::create(6)); |
| 2777 { | 2777 { |
| 2778 PersistentVector vector; | 2778 PersistentVector vector; |
| 2779 vector.append(one); | 2779 vector.push_back(one); |
| 2780 vector.append(two); | 2780 vector.push_back(two); |
| 2781 conservativelyCollectGarbage(); | 2781 conservativelyCollectGarbage(); |
| 2782 EXPECT_TRUE(vector.contains(one)); | 2782 EXPECT_TRUE(vector.contains(one)); |
| 2783 EXPECT_TRUE(vector.contains(two)); | 2783 EXPECT_TRUE(vector.contains(two)); |
| 2784 | 2784 |
| 2785 vector.append(three); | 2785 vector.push_back(three); |
| 2786 vector.append(four); | 2786 vector.push_back(four); |
| 2787 conservativelyCollectGarbage(); | 2787 conservativelyCollectGarbage(); |
| 2788 EXPECT_TRUE(vector.contains(one)); | 2788 EXPECT_TRUE(vector.contains(one)); |
| 2789 EXPECT_TRUE(vector.contains(two)); | 2789 EXPECT_TRUE(vector.contains(two)); |
| 2790 EXPECT_TRUE(vector.contains(three)); | 2790 EXPECT_TRUE(vector.contains(three)); |
| 2791 EXPECT_TRUE(vector.contains(four)); | 2791 EXPECT_TRUE(vector.contains(four)); |
| 2792 | 2792 |
| 2793 vector.shrink(1); | 2793 vector.shrink(1); |
| 2794 conservativelyCollectGarbage(); | 2794 conservativelyCollectGarbage(); |
| 2795 EXPECT_TRUE(vector.contains(one)); | 2795 EXPECT_TRUE(vector.contains(one)); |
| 2796 EXPECT_FALSE(vector.contains(two)); | 2796 EXPECT_FALSE(vector.contains(two)); |
| 2797 EXPECT_FALSE(vector.contains(three)); | 2797 EXPECT_FALSE(vector.contains(three)); |
| 2798 EXPECT_FALSE(vector.contains(four)); | 2798 EXPECT_FALSE(vector.contains(four)); |
| 2799 } | 2799 } |
| 2800 { | 2800 { |
| 2801 PersistentVector vector1; | 2801 PersistentVector vector1; |
| 2802 PersistentVector vector2; | 2802 PersistentVector vector2; |
| 2803 | 2803 |
| 2804 vector1.append(one); | 2804 vector1.push_back(one); |
| 2805 vector2.append(two); | 2805 vector2.push_back(two); |
| 2806 vector1.swap(vector2); | 2806 vector1.swap(vector2); |
| 2807 conservativelyCollectGarbage(); | 2807 conservativelyCollectGarbage(); |
| 2808 EXPECT_TRUE(vector1.contains(two)); | 2808 EXPECT_TRUE(vector1.contains(two)); |
| 2809 EXPECT_TRUE(vector2.contains(one)); | 2809 EXPECT_TRUE(vector2.contains(one)); |
| 2810 } | 2810 } |
| 2811 { | 2811 { |
| 2812 PersistentVector vector1; | 2812 PersistentVector vector1; |
| 2813 PersistentVector vector2; | 2813 PersistentVector vector2; |
| 2814 | 2814 |
| 2815 vector1.append(one); | 2815 vector1.push_back(one); |
| 2816 vector1.append(two); | 2816 vector1.push_back(two); |
| 2817 vector2.append(three); | 2817 vector2.push_back(three); |
| 2818 vector2.append(four); | 2818 vector2.push_back(four); |
| 2819 vector2.append(five); | 2819 vector2.push_back(five); |
| 2820 vector2.append(six); | 2820 vector2.push_back(six); |
| 2821 vector1.swap(vector2); | 2821 vector1.swap(vector2); |
| 2822 conservativelyCollectGarbage(); | 2822 conservativelyCollectGarbage(); |
| 2823 EXPECT_TRUE(vector1.contains(three)); | 2823 EXPECT_TRUE(vector1.contains(three)); |
| 2824 EXPECT_TRUE(vector1.contains(four)); | 2824 EXPECT_TRUE(vector1.contains(four)); |
| 2825 EXPECT_TRUE(vector1.contains(five)); | 2825 EXPECT_TRUE(vector1.contains(five)); |
| 2826 EXPECT_TRUE(vector1.contains(six)); | 2826 EXPECT_TRUE(vector1.contains(six)); |
| 2827 EXPECT_TRUE(vector2.contains(one)); | 2827 EXPECT_TRUE(vector2.contains(one)); |
| 2828 EXPECT_TRUE(vector2.contains(two)); | 2828 EXPECT_TRUE(vector2.contains(two)); |
| 2829 } | 2829 } |
| 2830 } | 2830 } |
| 2831 | 2831 |
| 2832 TEST(HeapTest, CrossThreadPersistentVector) { | 2832 TEST(HeapTest, CrossThreadPersistentVector) { |
| 2833 IntWrapper::s_destructorCalls = 0; | 2833 IntWrapper::s_destructorCalls = 0; |
| 2834 | 2834 |
| 2835 typedef Vector<CrossThreadPersistent<IntWrapper>> CrossThreadPersistentVector; | 2835 typedef Vector<CrossThreadPersistent<IntWrapper>> CrossThreadPersistentVector; |
| 2836 | 2836 |
| 2837 CrossThreadPersistent<IntWrapper> one(IntWrapper::create(1)); | 2837 CrossThreadPersistent<IntWrapper> one(IntWrapper::create(1)); |
| 2838 CrossThreadPersistent<IntWrapper> two(IntWrapper::create(2)); | 2838 CrossThreadPersistent<IntWrapper> two(IntWrapper::create(2)); |
| 2839 CrossThreadPersistent<IntWrapper> three(IntWrapper::create(3)); | 2839 CrossThreadPersistent<IntWrapper> three(IntWrapper::create(3)); |
| 2840 CrossThreadPersistent<IntWrapper> four(IntWrapper::create(4)); | 2840 CrossThreadPersistent<IntWrapper> four(IntWrapper::create(4)); |
| 2841 CrossThreadPersistent<IntWrapper> five(IntWrapper::create(5)); | 2841 CrossThreadPersistent<IntWrapper> five(IntWrapper::create(5)); |
| 2842 CrossThreadPersistent<IntWrapper> six(IntWrapper::create(6)); | 2842 CrossThreadPersistent<IntWrapper> six(IntWrapper::create(6)); |
| 2843 { | 2843 { |
| 2844 CrossThreadPersistentVector vector; | 2844 CrossThreadPersistentVector vector; |
| 2845 vector.append(one); | 2845 vector.push_back(one); |
| 2846 vector.append(two); | 2846 vector.push_back(two); |
| 2847 conservativelyCollectGarbage(); | 2847 conservativelyCollectGarbage(); |
| 2848 EXPECT_TRUE(vector.contains(one)); | 2848 EXPECT_TRUE(vector.contains(one)); |
| 2849 EXPECT_TRUE(vector.contains(two)); | 2849 EXPECT_TRUE(vector.contains(two)); |
| 2850 | 2850 |
| 2851 vector.append(three); | 2851 vector.push_back(three); |
| 2852 vector.append(four); | 2852 vector.push_back(four); |
| 2853 conservativelyCollectGarbage(); | 2853 conservativelyCollectGarbage(); |
| 2854 EXPECT_TRUE(vector.contains(one)); | 2854 EXPECT_TRUE(vector.contains(one)); |
| 2855 EXPECT_TRUE(vector.contains(two)); | 2855 EXPECT_TRUE(vector.contains(two)); |
| 2856 EXPECT_TRUE(vector.contains(three)); | 2856 EXPECT_TRUE(vector.contains(three)); |
| 2857 EXPECT_TRUE(vector.contains(four)); | 2857 EXPECT_TRUE(vector.contains(four)); |
| 2858 | 2858 |
| 2859 vector.shrink(1); | 2859 vector.shrink(1); |
| 2860 conservativelyCollectGarbage(); | 2860 conservativelyCollectGarbage(); |
| 2861 EXPECT_TRUE(vector.contains(one)); | 2861 EXPECT_TRUE(vector.contains(one)); |
| 2862 EXPECT_FALSE(vector.contains(two)); | 2862 EXPECT_FALSE(vector.contains(two)); |
| 2863 EXPECT_FALSE(vector.contains(three)); | 2863 EXPECT_FALSE(vector.contains(three)); |
| 2864 EXPECT_FALSE(vector.contains(four)); | 2864 EXPECT_FALSE(vector.contains(four)); |
| 2865 } | 2865 } |
| 2866 { | 2866 { |
| 2867 CrossThreadPersistentVector vector1; | 2867 CrossThreadPersistentVector vector1; |
| 2868 CrossThreadPersistentVector vector2; | 2868 CrossThreadPersistentVector vector2; |
| 2869 | 2869 |
| 2870 vector1.append(one); | 2870 vector1.push_back(one); |
| 2871 vector2.append(two); | 2871 vector2.push_back(two); |
| 2872 vector1.swap(vector2); | 2872 vector1.swap(vector2); |
| 2873 conservativelyCollectGarbage(); | 2873 conservativelyCollectGarbage(); |
| 2874 EXPECT_TRUE(vector1.contains(two)); | 2874 EXPECT_TRUE(vector1.contains(two)); |
| 2875 EXPECT_TRUE(vector2.contains(one)); | 2875 EXPECT_TRUE(vector2.contains(one)); |
| 2876 } | 2876 } |
| 2877 { | 2877 { |
| 2878 CrossThreadPersistentVector vector1; | 2878 CrossThreadPersistentVector vector1; |
| 2879 CrossThreadPersistentVector vector2; | 2879 CrossThreadPersistentVector vector2; |
| 2880 | 2880 |
| 2881 vector1.append(one); | 2881 vector1.push_back(one); |
| 2882 vector1.append(two); | 2882 vector1.push_back(two); |
| 2883 vector2.append(three); | 2883 vector2.push_back(three); |
| 2884 vector2.append(four); | 2884 vector2.push_back(four); |
| 2885 vector2.append(five); | 2885 vector2.push_back(five); |
| 2886 vector2.append(six); | 2886 vector2.push_back(six); |
| 2887 vector1.swap(vector2); | 2887 vector1.swap(vector2); |
| 2888 conservativelyCollectGarbage(); | 2888 conservativelyCollectGarbage(); |
| 2889 EXPECT_TRUE(vector1.contains(three)); | 2889 EXPECT_TRUE(vector1.contains(three)); |
| 2890 EXPECT_TRUE(vector1.contains(four)); | 2890 EXPECT_TRUE(vector1.contains(four)); |
| 2891 EXPECT_TRUE(vector1.contains(five)); | 2891 EXPECT_TRUE(vector1.contains(five)); |
| 2892 EXPECT_TRUE(vector1.contains(six)); | 2892 EXPECT_TRUE(vector1.contains(six)); |
| 2893 EXPECT_TRUE(vector2.contains(one)); | 2893 EXPECT_TRUE(vector2.contains(one)); |
| 2894 EXPECT_TRUE(vector2.contains(two)); | 2894 EXPECT_TRUE(vector2.contains(two)); |
| 2895 } | 2895 } |
| 2896 } | 2896 } |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2997 } | 2997 } |
| 2998 } | 2998 } |
| 2999 | 2999 |
| 3000 class NonTrivialObject final { | 3000 class NonTrivialObject final { |
| 3001 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 3001 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
| 3002 | 3002 |
| 3003 public: | 3003 public: |
| 3004 NonTrivialObject() {} | 3004 NonTrivialObject() {} |
| 3005 explicit NonTrivialObject(int num) { | 3005 explicit NonTrivialObject(int num) { |
| 3006 m_deque.append(IntWrapper::create(num)); | 3006 m_deque.append(IntWrapper::create(num)); |
| 3007 m_vector.append(IntWrapper::create(num)); | 3007 m_vector.push_back(IntWrapper::create(num)); |
| 3008 } | 3008 } |
| 3009 DEFINE_INLINE_TRACE() { | 3009 DEFINE_INLINE_TRACE() { |
| 3010 visitor->trace(m_deque); | 3010 visitor->trace(m_deque); |
| 3011 visitor->trace(m_vector); | 3011 visitor->trace(m_vector); |
| 3012 } | 3012 } |
| 3013 | 3013 |
| 3014 private: | 3014 private: |
| 3015 HeapDeque<Member<IntWrapper>> m_deque; | 3015 HeapDeque<Member<IntWrapper>> m_deque; |
| 3016 HeapVector<Member<IntWrapper>> m_vector; | 3016 HeapVector<Member<IntWrapper>> m_vector; |
| 3017 }; | 3017 }; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3063 typedef HeapHashCountedSet<WeakMember<IntWrapper>> WeakCountedSet; | 3063 typedef HeapHashCountedSet<WeakMember<IntWrapper>> WeakCountedSet; |
| 3064 | 3064 |
| 3065 Persistent<WeakStrong> weakStrong = new WeakStrong(); | 3065 Persistent<WeakStrong> weakStrong = new WeakStrong(); |
| 3066 Persistent<StrongWeak> strongWeak = new StrongWeak(); | 3066 Persistent<StrongWeak> strongWeak = new StrongWeak(); |
| 3067 Persistent<WeakWeak> weakWeak = new WeakWeak(); | 3067 Persistent<WeakWeak> weakWeak = new WeakWeak(); |
| 3068 Persistent<WeakSet> weakSet = new WeakSet(); | 3068 Persistent<WeakSet> weakSet = new WeakSet(); |
| 3069 Persistent<WeakCountedSet> weakCountedSet = new WeakCountedSet(); | 3069 Persistent<WeakCountedSet> weakCountedSet = new WeakCountedSet(); |
| 3070 | 3070 |
| 3071 Persistent<IntWrapper> two = IntWrapper::create(2); | 3071 Persistent<IntWrapper> two = IntWrapper::create(2); |
| 3072 | 3072 |
| 3073 keepNumbersAlive.append(IntWrapper::create(103)); | 3073 keepNumbersAlive.push_back(IntWrapper::create(103)); |
| 3074 keepNumbersAlive.append(IntWrapper::create(10)); | 3074 keepNumbersAlive.push_back(IntWrapper::create(10)); |
| 3075 | 3075 |
| 3076 { | 3076 { |
| 3077 weakStrong->add(IntWrapper::create(1), two); | 3077 weakStrong->add(IntWrapper::create(1), two); |
| 3078 strongWeak->add(two, IntWrapper::create(1)); | 3078 strongWeak->add(two, IntWrapper::create(1)); |
| 3079 weakWeak->add(two, IntWrapper::create(42)); | 3079 weakWeak->add(two, IntWrapper::create(42)); |
| 3080 weakWeak->add(IntWrapper::create(42), two); | 3080 weakWeak->add(IntWrapper::create(42), two); |
| 3081 weakSet->add(IntWrapper::create(0)); | 3081 weakSet->add(IntWrapper::create(0)); |
| 3082 weakSet->add(two); | 3082 weakSet->add(two); |
| 3083 weakSet->add(keepNumbersAlive[0]); | 3083 weakSet->add(keepNumbersAlive[0]); |
| 3084 weakSet->add(keepNumbersAlive[1]); | 3084 weakSet->add(keepNumbersAlive[1]); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3114 clearOutOldGarbage(); | 3114 clearOutOldGarbage(); |
| 3115 IntWrapper::s_destructorCalls = 0; | 3115 IntWrapper::s_destructorCalls = 0; |
| 3116 | 3116 |
| 3117 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive; | 3117 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive; |
| 3118 | 3118 |
| 3119 Persistent<Set> set1 = new Set(); | 3119 Persistent<Set> set1 = new Set(); |
| 3120 Persistent<Set> set2 = new Set(); | 3120 Persistent<Set> set2 = new Set(); |
| 3121 | 3121 |
| 3122 const Set& constSet = *set1.get(); | 3122 const Set& constSet = *set1.get(); |
| 3123 | 3123 |
| 3124 keepNumbersAlive.append(IntWrapper::create(2)); | 3124 keepNumbersAlive.push_back(IntWrapper::create(2)); |
| 3125 keepNumbersAlive.append(IntWrapper::create(103)); | 3125 keepNumbersAlive.push_back(IntWrapper::create(103)); |
| 3126 keepNumbersAlive.append(IntWrapper::create(10)); | 3126 keepNumbersAlive.push_back(IntWrapper::create(10)); |
| 3127 | 3127 |
| 3128 set1->add(IntWrapper::create(0)); | 3128 set1->add(IntWrapper::create(0)); |
| 3129 set1->add(keepNumbersAlive[0]); | 3129 set1->add(keepNumbersAlive[0]); |
| 3130 set1->add(keepNumbersAlive[1]); | 3130 set1->add(keepNumbersAlive[1]); |
| 3131 set1->add(keepNumbersAlive[2]); | 3131 set1->add(keepNumbersAlive[2]); |
| 3132 | 3132 |
| 3133 set2->clear(); | 3133 set2->clear(); |
| 3134 set2->add(IntWrapper::create(42)); | 3134 set2->add(IntWrapper::create(42)); |
| 3135 set2->clear(); | 3135 set2->clear(); |
| 3136 | 3136 |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3510 Persistent<StrongWeak> strongWeak = new StrongWeak(); | 3510 Persistent<StrongWeak> strongWeak = new StrongWeak(); |
| 3511 Persistent<WeakWeak> weakWeak = new WeakWeak(); | 3511 Persistent<WeakWeak> weakWeak = new WeakWeak(); |
| 3512 | 3512 |
| 3513 Persistent<WeakSet> weakSet = new WeakSet(); | 3513 Persistent<WeakSet> weakSet = new WeakSet(); |
| 3514 Persistent<WeakOrderedSet> weakOrderedSet = new WeakOrderedSet(); | 3514 Persistent<WeakOrderedSet> weakOrderedSet = new WeakOrderedSet(); |
| 3515 | 3515 |
| 3516 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive; | 3516 PersistentHeapVector<Member<IntWrapper>> keepNumbersAlive; |
| 3517 for (int i = 0; i < 128; i += 2) { | 3517 for (int i = 0; i < 128; i += 2) { |
| 3518 IntWrapper* wrapped = IntWrapper::create(i); | 3518 IntWrapper* wrapped = IntWrapper::create(i); |
| 3519 IntWrapper* wrapped2 = IntWrapper::create(i + 1); | 3519 IntWrapper* wrapped2 = IntWrapper::create(i + 1); |
| 3520 keepNumbersAlive.append(wrapped); | 3520 keepNumbersAlive.push_back(wrapped); |
| 3521 keepNumbersAlive.append(wrapped2); | 3521 keepNumbersAlive.push_back(wrapped2); |
| 3522 weakStrong->add(wrapped, wrapped2); | 3522 weakStrong->add(wrapped, wrapped2); |
| 3523 strongWeak->add(wrapped2, wrapped); | 3523 strongWeak->add(wrapped2, wrapped); |
| 3524 weakWeak->add(wrapped, wrapped2); | 3524 weakWeak->add(wrapped, wrapped2); |
| 3525 weakSet->add(wrapped); | 3525 weakSet->add(wrapped); |
| 3526 weakOrderedSet->add(wrapped); | 3526 weakOrderedSet->add(wrapped); |
| 3527 } | 3527 } |
| 3528 | 3528 |
| 3529 EXPECT_EQ(64u, weakStrong->size()); | 3529 EXPECT_EQ(64u, weakStrong->size()); |
| 3530 EXPECT_EQ(64u, strongWeak->size()); | 3530 EXPECT_EQ(64u, strongWeak->size()); |
| 3531 EXPECT_EQ(64u, weakWeak->size()); | 3531 EXPECT_EQ(64u, weakWeak->size()); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3628 ASSERT_TRUE(weakOrderedSet->contains(keepNumbersAlive[i])); | 3628 ASSERT_TRUE(weakOrderedSet->contains(keepNumbersAlive[i])); |
| 3629 if (deleteAfterwards) | 3629 if (deleteAfterwards) |
| 3630 weakOrderedSet->remove(keepNumbersAlive[i]); | 3630 weakOrderedSet->remove(keepNumbersAlive[i]); |
| 3631 else | 3631 else |
| 3632 count++; | 3632 count++; |
| 3633 } | 3633 } |
| 3634 } | 3634 } |
| 3635 if (addAfterwards) { | 3635 if (addAfterwards) { |
| 3636 for (int i = 1000; i < 1100; i++) { | 3636 for (int i = 1000; i < 1100; i++) { |
| 3637 IntWrapper* wrapped = IntWrapper::create(i); | 3637 IntWrapper* wrapped = IntWrapper::create(i); |
| 3638 keepNumbersAlive.append(wrapped); | 3638 keepNumbersAlive.push_back(wrapped); |
| 3639 weakStrong->add(wrapped, wrapped); | 3639 weakStrong->add(wrapped, wrapped); |
| 3640 strongWeak->add(wrapped, wrapped); | 3640 strongWeak->add(wrapped, wrapped); |
| 3641 weakWeak->add(wrapped, wrapped); | 3641 weakWeak->add(wrapped, wrapped); |
| 3642 weakSet->add(wrapped); | 3642 weakSet->add(wrapped); |
| 3643 weakOrderedSet->add(wrapped); | 3643 weakOrderedSet->add(wrapped); |
| 3644 } | 3644 } |
| 3645 } | 3645 } |
| 3646 if (collectionNumber == weakStrongIndex) | 3646 if (collectionNumber == weakStrongIndex) |
| 3647 EXPECT_EQ(count + added, weakStrong->size()); | 3647 EXPECT_EQ(count + added, weakStrong->size()); |
| 3648 else if (collectionNumber == strongWeakIndex) | 3648 else if (collectionNumber == strongWeakIndex) |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3691 HeapVector<Member<IntWrapper>> vector; | 3691 HeapVector<Member<IntWrapper>> vector; |
| 3692 set.add(new IntWrapper(1)); | 3692 set.add(new IntWrapper(1)); |
| 3693 set.add(new IntWrapper(1)); | 3693 set.add(new IntWrapper(1)); |
| 3694 set.add(new IntWrapper(2)); | 3694 set.add(new IntWrapper(2)); |
| 3695 | 3695 |
| 3696 copyToVector(set, vector); | 3696 copyToVector(set, vector); |
| 3697 EXPECT_EQ(3u, vector.size()); | 3697 EXPECT_EQ(3u, vector.size()); |
| 3698 | 3698 |
| 3699 Vector<int> intVector; | 3699 Vector<int> intVector; |
| 3700 for (const auto& i : vector) | 3700 for (const auto& i : vector) |
| 3701 intVector.append(i->value()); | 3701 intVector.push_back(i->value()); |
| 3702 std::sort(intVector.begin(), intVector.end()); | 3702 std::sort(intVector.begin(), intVector.end()); |
| 3703 ASSERT_EQ(3u, intVector.size()); | 3703 ASSERT_EQ(3u, intVector.size()); |
| 3704 EXPECT_EQ(1, intVector[0]); | 3704 EXPECT_EQ(1, intVector[0]); |
| 3705 EXPECT_EQ(1, intVector[1]); | 3705 EXPECT_EQ(1, intVector[1]); |
| 3706 EXPECT_EQ(2, intVector[2]); | 3706 EXPECT_EQ(2, intVector[2]); |
| 3707 } | 3707 } |
| 3708 | 3708 |
| 3709 TEST(HeapTest, WeakHeapHashCountedSetToVector) { | 3709 TEST(HeapTest, WeakHeapHashCountedSetToVector) { |
| 3710 HeapHashCountedSet<WeakMember<IntWrapper>> set; | 3710 HeapHashCountedSet<WeakMember<IntWrapper>> set; |
| 3711 HeapVector<Member<IntWrapper>> vector; | 3711 HeapVector<Member<IntWrapper>> vector; |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3921 ThreadHeap& heap = ThreadState::current()->heap(); | 3921 ThreadHeap& heap = ThreadState::current()->heap(); |
| 3922 clearOutOldGarbage(); | 3922 clearOutOldGarbage(); |
| 3923 | 3923 |
| 3924 Vector<Address> objectAddresses; | 3924 Vector<Address> objectAddresses; |
| 3925 Vector<Address> endAddresses; | 3925 Vector<Address> endAddresses; |
| 3926 Address largeObjectAddress; | 3926 Address largeObjectAddress; |
| 3927 Address largeObjectEndAddress; | 3927 Address largeObjectEndAddress; |
| 3928 for (int i = 0; i < 10; i++) { | 3928 for (int i = 0; i < 10; i++) { |
| 3929 SimpleObject* object = SimpleObject::create(); | 3929 SimpleObject* object = SimpleObject::create(); |
| 3930 Address objectAddress = reinterpret_cast<Address>(object); | 3930 Address objectAddress = reinterpret_cast<Address>(object); |
| 3931 objectAddresses.append(objectAddress); | 3931 objectAddresses.push_back(objectAddress); |
| 3932 endAddresses.append(objectAddress + sizeof(SimpleObject) - 1); | 3932 endAddresses.push_back(objectAddress + sizeof(SimpleObject) - 1); |
| 3933 } | 3933 } |
| 3934 LargeHeapObject* largeObject = LargeHeapObject::create(); | 3934 LargeHeapObject* largeObject = LargeHeapObject::create(); |
| 3935 largeObjectAddress = reinterpret_cast<Address>(largeObject); | 3935 largeObjectAddress = reinterpret_cast<Address>(largeObject); |
| 3936 largeObjectEndAddress = largeObjectAddress + sizeof(LargeHeapObject) - 1; | 3936 largeObjectEndAddress = largeObjectAddress + sizeof(LargeHeapObject) - 1; |
| 3937 | 3937 |
| 3938 // This is a low-level test where we call checkAndMarkPointer. This method | 3938 // This is a low-level test where we call checkAndMarkPointer. This method |
| 3939 // causes the object start bitmap to be computed which requires the heap | 3939 // causes the object start bitmap to be computed which requires the heap |
| 3940 // to be in a consistent state (e.g. the free allocation area must be put | 3940 // to be in a consistent state (e.g. the free allocation area must be put |
| 3941 // into a free list header). However when we call makeConsistentForGC it | 3941 // into a free list header). However when we call makeConsistentForGC it |
| 3942 // also clears out the freelists so we have to rebuild those before trying | 3942 // also clears out the freelists so we have to rebuild those before trying |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4019 IntWrapper* three(IntWrapper::create(3)); | 4019 IntWrapper* three(IntWrapper::create(3)); |
| 4020 IntWrapper* four(IntWrapper::create(4)); | 4020 IntWrapper* four(IntWrapper::create(4)); |
| 4021 IntWrapper* five(IntWrapper::create(5)); | 4021 IntWrapper* five(IntWrapper::create(5)); |
| 4022 IntWrapper* six(IntWrapper::create(6)); | 4022 IntWrapper* six(IntWrapper::create(6)); |
| 4023 IntWrapper* seven(IntWrapper::create(7)); | 4023 IntWrapper* seven(IntWrapper::create(7)); |
| 4024 IntWrapper* eight(IntWrapper::create(8)); | 4024 IntWrapper* eight(IntWrapper::create(8)); |
| 4025 IntWrapper* nine(IntWrapper::create(9)); | 4025 IntWrapper* nine(IntWrapper::create(9)); |
| 4026 Persistent<IntWrapper> ten(IntWrapper::create(10)); | 4026 Persistent<IntWrapper> ten(IntWrapper::create(10)); |
| 4027 IntWrapper* eleven(IntWrapper::create(11)); | 4027 IntWrapper* eleven(IntWrapper::create(11)); |
| 4028 | 4028 |
| 4029 pVec.append(one); | 4029 pVec.push_back(one); |
| 4030 pVec.append(two); | 4030 pVec.push_back(two); |
| 4031 | 4031 |
| 4032 pDeque.append(seven); | 4032 pDeque.append(seven); |
| 4033 pDeque.append(two); | 4033 pDeque.append(two); |
| 4034 | 4034 |
| 4035 Vec* vec = new Vec(); | 4035 Vec* vec = new Vec(); |
| 4036 vec->swap(pVec); | 4036 vec->swap(pVec); |
| 4037 | 4037 |
| 4038 pVec.append(two); | 4038 pVec.push_back(two); |
| 4039 pVec.append(three); | 4039 pVec.push_back(three); |
| 4040 | 4040 |
| 4041 pSet.add(four); | 4041 pSet.add(four); |
| 4042 pListSet.add(eight); | 4042 pListSet.add(eight); |
| 4043 pLinkedSet.add(nine); | 4043 pLinkedSet.add(nine); |
| 4044 pMap.add(five, six); | 4044 pMap.add(five, six); |
| 4045 wpMap.add(ten, eleven); | 4045 wpMap.add(ten, eleven); |
| 4046 | 4046 |
| 4047 // Collect |vec| and |one|. | 4047 // Collect |vec| and |one|. |
| 4048 vec = 0; | 4048 vec = 0; |
| 4049 preciselyCollectGarbage(); | 4049 preciselyCollectGarbage(); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4099 | 4099 |
| 4100 map->add(key, IntVector()); | 4100 map->add(key, IntVector()); |
| 4101 map2->add(key, IntDeque()); | 4101 map2->add(key, IntDeque()); |
| 4102 | 4102 |
| 4103 HeapHashMap<void*, IntVector>::iterator it = map->find(key); | 4103 HeapHashMap<void*, IntVector>::iterator it = map->find(key); |
| 4104 EXPECT_EQ(0u, map->get(key).size()); | 4104 EXPECT_EQ(0u, map->get(key).size()); |
| 4105 | 4105 |
| 4106 HeapHashMap<void*, IntDeque>::iterator it2 = map2->find(key); | 4106 HeapHashMap<void*, IntDeque>::iterator it2 = map2->find(key); |
| 4107 EXPECT_EQ(0u, map2->get(key).size()); | 4107 EXPECT_EQ(0u, map2->get(key).size()); |
| 4108 | 4108 |
| 4109 it->value.append(IntWrapper::create(42)); | 4109 it->value.push_back(IntWrapper::create(42)); |
| 4110 EXPECT_EQ(1u, map->get(key).size()); | 4110 EXPECT_EQ(1u, map->get(key).size()); |
| 4111 | 4111 |
| 4112 it2->value.append(IntWrapper::create(42)); | 4112 it2->value.append(IntWrapper::create(42)); |
| 4113 EXPECT_EQ(1u, map2->get(key).size()); | 4113 EXPECT_EQ(1u, map2->get(key).size()); |
| 4114 | 4114 |
| 4115 Persistent<HeapHashMap<void*, IntVector>> keepAlive(map); | 4115 Persistent<HeapHashMap<void*, IntVector>> keepAlive(map); |
| 4116 Persistent<HeapHashMap<void*, IntDeque>> keepAlive2(map2); | 4116 Persistent<HeapHashMap<void*, IntDeque>> keepAlive2(map2); |
| 4117 | 4117 |
| 4118 for (int i = 0; i < 100; i++) { | 4118 for (int i = 0; i < 100; i++) { |
| 4119 map->add(key + 1 + i, IntVector()); | 4119 map->add(key + 1 + i, IntVector()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4172 } | 4172 } |
| 4173 | 4173 |
| 4174 TEST(HeapTest, CollectionNesting3) { | 4174 TEST(HeapTest, CollectionNesting3) { |
| 4175 clearOutOldGarbage(); | 4175 clearOutOldGarbage(); |
| 4176 IntWrapper::s_destructorCalls = 0; | 4176 IntWrapper::s_destructorCalls = 0; |
| 4177 typedef HeapVector<Member<IntWrapper>> IntVector; | 4177 typedef HeapVector<Member<IntWrapper>> IntVector; |
| 4178 typedef HeapDeque<Member<IntWrapper>> IntDeque; | 4178 typedef HeapDeque<Member<IntWrapper>> IntDeque; |
| 4179 HeapVector<IntVector>* vector = new HeapVector<IntVector>(); | 4179 HeapVector<IntVector>* vector = new HeapVector<IntVector>(); |
| 4180 HeapDeque<IntDeque>* deque = new HeapDeque<IntDeque>(); | 4180 HeapDeque<IntDeque>* deque = new HeapDeque<IntDeque>(); |
| 4181 | 4181 |
| 4182 vector->append(IntVector()); | 4182 vector->push_back(IntVector()); |
| 4183 deque->append(IntDeque()); | 4183 deque->append(IntDeque()); |
| 4184 | 4184 |
| 4185 HeapVector<IntVector>::iterator it = vector->begin(); | 4185 HeapVector<IntVector>::iterator it = vector->begin(); |
| 4186 HeapDeque<IntDeque>::iterator it2 = deque->begin(); | 4186 HeapDeque<IntDeque>::iterator it2 = deque->begin(); |
| 4187 EXPECT_EQ(0u, it->size()); | 4187 EXPECT_EQ(0u, it->size()); |
| 4188 EXPECT_EQ(0u, it2->size()); | 4188 EXPECT_EQ(0u, it2->size()); |
| 4189 | 4189 |
| 4190 it->append(IntWrapper::create(42)); | 4190 it->push_back(IntWrapper::create(42)); |
| 4191 it2->append(IntWrapper::create(42)); | 4191 it2->append(IntWrapper::create(42)); |
| 4192 EXPECT_EQ(1u, it->size()); | 4192 EXPECT_EQ(1u, it->size()); |
| 4193 EXPECT_EQ(1u, it2->size()); | 4193 EXPECT_EQ(1u, it2->size()); |
| 4194 | 4194 |
| 4195 Persistent<HeapVector<IntVector>> keepAlive(vector); | 4195 Persistent<HeapVector<IntVector>> keepAlive(vector); |
| 4196 Persistent<HeapDeque<IntDeque>> keepAlive2(deque); | 4196 Persistent<HeapDeque<IntDeque>> keepAlive2(deque); |
| 4197 preciselyCollectGarbage(); | 4197 preciselyCollectGarbage(); |
| 4198 EXPECT_EQ(1u, it->size()); | 4198 EXPECT_EQ(1u, it->size()); |
| 4199 EXPECT_EQ(1u, it2->size()); | 4199 EXPECT_EQ(1u, it2->size()); |
| 4200 EXPECT_EQ(0, IntWrapper::s_destructorCalls); | 4200 EXPECT_EQ(0, IntWrapper::s_destructorCalls); |
| 4201 } | 4201 } |
| 4202 | 4202 |
| 4203 TEST(HeapTest, EmbeddedInVector) { | 4203 TEST(HeapTest, EmbeddedInVector) { |
| 4204 clearOutOldGarbage(); | 4204 clearOutOldGarbage(); |
| 4205 SimpleFinalizedObject::s_destructorCalls = 0; | 4205 SimpleFinalizedObject::s_destructorCalls = 0; |
| 4206 { | 4206 { |
| 4207 PersistentHeapVector<VectorObject, 2> inlineVector; | 4207 PersistentHeapVector<VectorObject, 2> inlineVector; |
| 4208 PersistentHeapVector<VectorObject> outlineVector; | 4208 PersistentHeapVector<VectorObject> outlineVector; |
| 4209 VectorObject i1, i2; | 4209 VectorObject i1, i2; |
| 4210 inlineVector.append(i1); | 4210 inlineVector.push_back(i1); |
| 4211 inlineVector.append(i2); | 4211 inlineVector.push_back(i2); |
| 4212 | 4212 |
| 4213 VectorObject o1, o2; | 4213 VectorObject o1, o2; |
| 4214 outlineVector.append(o1); | 4214 outlineVector.push_back(o1); |
| 4215 outlineVector.append(o2); | 4215 outlineVector.push_back(o2); |
| 4216 | 4216 |
| 4217 PersistentHeapVector<VectorObjectInheritedTrace> vectorInheritedTrace; | 4217 PersistentHeapVector<VectorObjectInheritedTrace> vectorInheritedTrace; |
| 4218 VectorObjectInheritedTrace it1, it2; | 4218 VectorObjectInheritedTrace it1, it2; |
| 4219 vectorInheritedTrace.append(it1); | 4219 vectorInheritedTrace.push_back(it1); |
| 4220 vectorInheritedTrace.append(it2); | 4220 vectorInheritedTrace.push_back(it2); |
| 4221 | 4221 |
| 4222 preciselyCollectGarbage(); | 4222 preciselyCollectGarbage(); |
| 4223 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); | 4223 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); |
| 4224 } | 4224 } |
| 4225 preciselyCollectGarbage(); | 4225 preciselyCollectGarbage(); |
| 4226 EXPECT_EQ(6, SimpleFinalizedObject::s_destructorCalls); | 4226 EXPECT_EQ(6, SimpleFinalizedObject::s_destructorCalls); |
| 4227 } | 4227 } |
| 4228 | 4228 |
| 4229 TEST(HeapTest, EmbeddedInDeque) { | 4229 TEST(HeapTest, EmbeddedInDeque) { |
| 4230 clearOutOldGarbage(); | 4230 clearOutOldGarbage(); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4283 | 4283 |
| 4284 WTF_ALLOW_MOVE_AND_INIT_WITH_MEM_FUNCTIONS(blink::InlinedVectorObject); | 4284 WTF_ALLOW_MOVE_AND_INIT_WITH_MEM_FUNCTIONS(blink::InlinedVectorObject); |
| 4285 | 4285 |
| 4286 namespace blink { | 4286 namespace blink { |
| 4287 | 4287 |
| 4288 class InlinedVectorObjectWrapper final | 4288 class InlinedVectorObjectWrapper final |
| 4289 : public GarbageCollectedFinalized<InlinedVectorObjectWrapper> { | 4289 : public GarbageCollectedFinalized<InlinedVectorObjectWrapper> { |
| 4290 public: | 4290 public: |
| 4291 InlinedVectorObjectWrapper() { | 4291 InlinedVectorObjectWrapper() { |
| 4292 InlinedVectorObject i1, i2; | 4292 InlinedVectorObject i1, i2; |
| 4293 m_vector1.append(i1); | 4293 m_vector1.push_back(i1); |
| 4294 m_vector1.append(i2); | 4294 m_vector1.push_back(i2); |
| 4295 m_vector2.append(i1); | 4295 m_vector2.push_back(i1); |
| 4296 m_vector2.append(i2); // This allocates an out-of-line buffer. | 4296 m_vector2.push_back(i2); // This allocates an out-of-line buffer. |
| 4297 m_vector3.append(i1); | 4297 m_vector3.push_back(i1); |
| 4298 m_vector3.append(i2); | 4298 m_vector3.push_back(i2); |
| 4299 } | 4299 } |
| 4300 | 4300 |
| 4301 DEFINE_INLINE_TRACE() { | 4301 DEFINE_INLINE_TRACE() { |
| 4302 visitor->trace(m_vector1); | 4302 visitor->trace(m_vector1); |
| 4303 visitor->trace(m_vector2); | 4303 visitor->trace(m_vector2); |
| 4304 visitor->trace(m_vector3); | 4304 visitor->trace(m_vector3); |
| 4305 } | 4305 } |
| 4306 | 4306 |
| 4307 private: | 4307 private: |
| 4308 HeapVector<InlinedVectorObject> m_vector1; | 4308 HeapVector<InlinedVectorObject> m_vector1; |
| 4309 HeapVector<InlinedVectorObject, 1> m_vector2; | 4309 HeapVector<InlinedVectorObject, 1> m_vector2; |
| 4310 HeapVector<InlinedVectorObject, 2> m_vector3; | 4310 HeapVector<InlinedVectorObject, 2> m_vector3; |
| 4311 }; | 4311 }; |
| 4312 | 4312 |
| 4313 class InlinedVectorObjectWithVtableWrapper final | 4313 class InlinedVectorObjectWithVtableWrapper final |
| 4314 : public GarbageCollectedFinalized<InlinedVectorObjectWithVtableWrapper> { | 4314 : public GarbageCollectedFinalized<InlinedVectorObjectWithVtableWrapper> { |
| 4315 public: | 4315 public: |
| 4316 InlinedVectorObjectWithVtableWrapper() { | 4316 InlinedVectorObjectWithVtableWrapper() { |
| 4317 InlinedVectorObjectWithVtable i1, i2; | 4317 InlinedVectorObjectWithVtable i1, i2; |
| 4318 m_vector1.append(i1); | 4318 m_vector1.push_back(i1); |
| 4319 m_vector1.append(i2); | 4319 m_vector1.push_back(i2); |
| 4320 m_vector2.append(i1); | 4320 m_vector2.push_back(i1); |
| 4321 m_vector2.append(i2); // This allocates an out-of-line buffer. | 4321 m_vector2.push_back(i2); // This allocates an out-of-line buffer. |
| 4322 m_vector3.append(i1); | 4322 m_vector3.push_back(i1); |
| 4323 m_vector3.append(i2); | 4323 m_vector3.push_back(i2); |
| 4324 } | 4324 } |
| 4325 | 4325 |
| 4326 DEFINE_INLINE_TRACE() { | 4326 DEFINE_INLINE_TRACE() { |
| 4327 visitor->trace(m_vector1); | 4327 visitor->trace(m_vector1); |
| 4328 visitor->trace(m_vector2); | 4328 visitor->trace(m_vector2); |
| 4329 visitor->trace(m_vector3); | 4329 visitor->trace(m_vector3); |
| 4330 } | 4330 } |
| 4331 | 4331 |
| 4332 private: | 4332 private: |
| 4333 HeapVector<InlinedVectorObjectWithVtable> m_vector1; | 4333 HeapVector<InlinedVectorObjectWithVtable> m_vector1; |
| 4334 HeapVector<InlinedVectorObjectWithVtable, 1> m_vector2; | 4334 HeapVector<InlinedVectorObjectWithVtable, 1> m_vector2; |
| 4335 HeapVector<InlinedVectorObjectWithVtable, 2> m_vector3; | 4335 HeapVector<InlinedVectorObjectWithVtable, 2> m_vector3; |
| 4336 }; | 4336 }; |
| 4337 | 4337 |
| 4338 TEST(HeapTest, VectorDestructors) { | 4338 TEST(HeapTest, VectorDestructors) { |
| 4339 clearOutOldGarbage(); | 4339 clearOutOldGarbage(); |
| 4340 InlinedVectorObject::s_destructorCalls = 0; | 4340 InlinedVectorObject::s_destructorCalls = 0; |
| 4341 { | 4341 { |
| 4342 HeapVector<InlinedVectorObject> vector; | 4342 HeapVector<InlinedVectorObject> vector; |
| 4343 InlinedVectorObject i1, i2; | 4343 InlinedVectorObject i1, i2; |
| 4344 vector.append(i1); | 4344 vector.push_back(i1); |
| 4345 vector.append(i2); | 4345 vector.push_back(i2); |
| 4346 } | 4346 } |
| 4347 preciselyCollectGarbage(); | 4347 preciselyCollectGarbage(); |
| 4348 // This is not EXPECT_EQ but EXPECT_LE because a HeapVectorBacking calls | 4348 // This is not EXPECT_EQ but EXPECT_LE because a HeapVectorBacking calls |
| 4349 // destructors for all elements in (not the size but) the capacity of | 4349 // destructors for all elements in (not the size but) the capacity of |
| 4350 // the vector. Thus the number of destructors called becomes larger | 4350 // the vector. Thus the number of destructors called becomes larger |
| 4351 // than the actual number of objects in the vector. | 4351 // than the actual number of objects in the vector. |
| 4352 EXPECT_LE(4, InlinedVectorObject::s_destructorCalls); | 4352 EXPECT_LE(4, InlinedVectorObject::s_destructorCalls); |
| 4353 | 4353 |
| 4354 InlinedVectorObject::s_destructorCalls = 0; | 4354 InlinedVectorObject::s_destructorCalls = 0; |
| 4355 { | 4355 { |
| 4356 HeapVector<InlinedVectorObject, 1> vector; | 4356 HeapVector<InlinedVectorObject, 1> vector; |
| 4357 InlinedVectorObject i1, i2; | 4357 InlinedVectorObject i1, i2; |
| 4358 vector.append(i1); | 4358 vector.push_back(i1); |
| 4359 vector.append(i2); // This allocates an out-of-line buffer. | 4359 vector.push_back(i2); // This allocates an out-of-line buffer. |
| 4360 } | 4360 } |
| 4361 preciselyCollectGarbage(); | 4361 preciselyCollectGarbage(); |
| 4362 EXPECT_LE(4, InlinedVectorObject::s_destructorCalls); | 4362 EXPECT_LE(4, InlinedVectorObject::s_destructorCalls); |
| 4363 | 4363 |
| 4364 InlinedVectorObject::s_destructorCalls = 0; | 4364 InlinedVectorObject::s_destructorCalls = 0; |
| 4365 { | 4365 { |
| 4366 HeapVector<InlinedVectorObject, 2> vector; | 4366 HeapVector<InlinedVectorObject, 2> vector; |
| 4367 InlinedVectorObject i1, i2; | 4367 InlinedVectorObject i1, i2; |
| 4368 vector.append(i1); | 4368 vector.push_back(i1); |
| 4369 vector.append(i2); | 4369 vector.push_back(i2); |
| 4370 } | 4370 } |
| 4371 preciselyCollectGarbage(); | 4371 preciselyCollectGarbage(); |
| 4372 EXPECT_LE(4, InlinedVectorObject::s_destructorCalls); | 4372 EXPECT_LE(4, InlinedVectorObject::s_destructorCalls); |
| 4373 | 4373 |
| 4374 InlinedVectorObject::s_destructorCalls = 0; | 4374 InlinedVectorObject::s_destructorCalls = 0; |
| 4375 { | 4375 { |
| 4376 Persistent<InlinedVectorObjectWrapper> vectorWrapper = | 4376 Persistent<InlinedVectorObjectWrapper> vectorWrapper = |
| 4377 new InlinedVectorObjectWrapper(); | 4377 new InlinedVectorObjectWrapper(); |
| 4378 conservativelyCollectGarbage(); | 4378 conservativelyCollectGarbage(); |
| 4379 EXPECT_EQ(2, InlinedVectorObject::s_destructorCalls); | 4379 EXPECT_EQ(2, InlinedVectorObject::s_destructorCalls); |
| 4380 } | 4380 } |
| 4381 preciselyCollectGarbage(); | 4381 preciselyCollectGarbage(); |
| 4382 EXPECT_LE(8, InlinedVectorObject::s_destructorCalls); | 4382 EXPECT_LE(8, InlinedVectorObject::s_destructorCalls); |
| 4383 } | 4383 } |
| 4384 | 4384 |
| 4385 // TODO(Oilpan): when Vector.h's contiguous container support no longer disables | 4385 // TODO(Oilpan): when Vector.h's contiguous container support no longer disables |
| 4386 // Vector<>s with inline capacity, enable this test. | 4386 // Vector<>s with inline capacity, enable this test. |
| 4387 #if !defined(ANNOTATE_CONTIGUOUS_CONTAINER) | 4387 #if !defined(ANNOTATE_CONTIGUOUS_CONTAINER) |
| 4388 TEST(HeapTest, VectorDestructorsWithVtable) { | 4388 TEST(HeapTest, VectorDestructorsWithVtable) { |
| 4389 clearOutOldGarbage(); | 4389 clearOutOldGarbage(); |
| 4390 InlinedVectorObjectWithVtable::s_destructorCalls = 0; | 4390 InlinedVectorObjectWithVtable::s_destructorCalls = 0; |
| 4391 { | 4391 { |
| 4392 HeapVector<InlinedVectorObjectWithVtable> vector; | 4392 HeapVector<InlinedVectorObjectWithVtable> vector; |
| 4393 InlinedVectorObjectWithVtable i1, i2; | 4393 InlinedVectorObjectWithVtable i1, i2; |
| 4394 vector.append(i1); | 4394 vector.push_back(i1); |
| 4395 vector.append(i2); | 4395 vector.push_back(i2); |
| 4396 } | 4396 } |
| 4397 preciselyCollectGarbage(); | 4397 preciselyCollectGarbage(); |
| 4398 EXPECT_EQ(4, InlinedVectorObjectWithVtable::s_destructorCalls); | 4398 EXPECT_EQ(4, InlinedVectorObjectWithVtable::s_destructorCalls); |
| 4399 | 4399 |
| 4400 InlinedVectorObjectWithVtable::s_destructorCalls = 0; | 4400 InlinedVectorObjectWithVtable::s_destructorCalls = 0; |
| 4401 { | 4401 { |
| 4402 HeapVector<InlinedVectorObjectWithVtable, 1> vector; | 4402 HeapVector<InlinedVectorObjectWithVtable, 1> vector; |
| 4403 InlinedVectorObjectWithVtable i1, i2; | 4403 InlinedVectorObjectWithVtable i1, i2; |
| 4404 vector.append(i1); | 4404 vector.push_back(i1); |
| 4405 vector.append(i2); // This allocates an out-of-line buffer. | 4405 vector.push_back(i2); // This allocates an out-of-line buffer. |
| 4406 } | 4406 } |
| 4407 preciselyCollectGarbage(); | 4407 preciselyCollectGarbage(); |
| 4408 EXPECT_EQ(5, InlinedVectorObjectWithVtable::s_destructorCalls); | 4408 EXPECT_EQ(5, InlinedVectorObjectWithVtable::s_destructorCalls); |
| 4409 | 4409 |
| 4410 InlinedVectorObjectWithVtable::s_destructorCalls = 0; | 4410 InlinedVectorObjectWithVtable::s_destructorCalls = 0; |
| 4411 { | 4411 { |
| 4412 HeapVector<InlinedVectorObjectWithVtable, 2> vector; | 4412 HeapVector<InlinedVectorObjectWithVtable, 2> vector; |
| 4413 InlinedVectorObjectWithVtable i1, i2; | 4413 InlinedVectorObjectWithVtable i1, i2; |
| 4414 vector.append(i1); | 4414 vector.push_back(i1); |
| 4415 vector.append(i2); | 4415 vector.push_back(i2); |
| 4416 } | 4416 } |
| 4417 preciselyCollectGarbage(); | 4417 preciselyCollectGarbage(); |
| 4418 EXPECT_EQ(4, InlinedVectorObjectWithVtable::s_destructorCalls); | 4418 EXPECT_EQ(4, InlinedVectorObjectWithVtable::s_destructorCalls); |
| 4419 | 4419 |
| 4420 InlinedVectorObjectWithVtable::s_destructorCalls = 0; | 4420 InlinedVectorObjectWithVtable::s_destructorCalls = 0; |
| 4421 { | 4421 { |
| 4422 Persistent<InlinedVectorObjectWithVtableWrapper> vectorWrapper = | 4422 Persistent<InlinedVectorObjectWithVtableWrapper> vectorWrapper = |
| 4423 new InlinedVectorObjectWithVtableWrapper(); | 4423 new InlinedVectorObjectWithVtableWrapper(); |
| 4424 conservativelyCollectGarbage(); | 4424 conservativelyCollectGarbage(); |
| 4425 EXPECT_EQ(3, InlinedVectorObjectWithVtable::s_destructorCalls); | 4425 EXPECT_EQ(3, InlinedVectorObjectWithVtable::s_destructorCalls); |
| (...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5232 EXPECT_EQ(0u, outer->size()); | 5232 EXPECT_EQ(0u, outer->size()); |
| 5233 } | 5233 } |
| 5234 outer->clear(); | 5234 outer->clear(); |
| 5235 Persistent<IntWrapper> deep = IntWrapper::create(42); | 5235 Persistent<IntWrapper> deep = IntWrapper::create(42); |
| 5236 Persistent<IntWrapper> home = IntWrapper::create(103); | 5236 Persistent<IntWrapper> home = IntWrapper::create(103); |
| 5237 Persistent<IntWrapper> composite = IntWrapper::create(91); | 5237 Persistent<IntWrapper> composite = IntWrapper::create(91); |
| 5238 Persistent<HeapVector<Member<IntWrapper>>> keepAlive = | 5238 Persistent<HeapVector<Member<IntWrapper>>> keepAlive = |
| 5239 new HeapVector<Member<IntWrapper>>(); | 5239 new HeapVector<Member<IntWrapper>>(); |
| 5240 for (int i = 0; i < 10000; i++) { | 5240 for (int i = 0; i < 10000; i++) { |
| 5241 IntWrapper* value = IntWrapper::create(i); | 5241 IntWrapper* value = IntWrapper::create(i); |
| 5242 keepAlive->append(value); | 5242 keepAlive->push_back(value); |
| 5243 OuterMap::AddResult newEntry = outer->add(value, InnerMap()); | 5243 OuterMap::AddResult newEntry = outer->add(value, InnerMap()); |
| 5244 newEntry.storedValue->value.add(deep, home); | 5244 newEntry.storedValue->value.add(deep, home); |
| 5245 newEntry.storedValue->value.add(composite, home); | 5245 newEntry.storedValue->value.add(composite, home); |
| 5246 } | 5246 } |
| 5247 composite.clear(); | 5247 composite.clear(); |
| 5248 preciselyCollectGarbage(); | 5248 preciselyCollectGarbage(); |
| 5249 EXPECT_EQ(10000u, outer->size()); | 5249 EXPECT_EQ(10000u, outer->size()); |
| 5250 for (int i = 0; i < 10000; i++) { | 5250 for (int i = 0; i < 10000; i++) { |
| 5251 IntWrapper* value = keepAlive->at(i); | 5251 IntWrapper* value = keepAlive->at(i); |
| 5252 EXPECT_EQ(1u, outer->get(value) | 5252 EXPECT_EQ(1u, outer->get(value) |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5895 TraceIfNeededTester<Member<SimpleObject>>::create( | 5895 TraceIfNeededTester<Member<SimpleObject>>::create( |
| 5896 Member<SimpleObject>(SimpleObject::create())); | 5896 Member<SimpleObject>(SimpleObject::create())); |
| 5897 visitor.reset(); | 5897 visitor.reset(); |
| 5898 m_obj->trace(&visitor); | 5898 m_obj->trace(&visitor); |
| 5899 EXPECT_EQ(1u, visitor.count()); | 5899 EXPECT_EQ(1u, visitor.count()); |
| 5900 } | 5900 } |
| 5901 | 5901 |
| 5902 { | 5902 { |
| 5903 TraceIfNeededTester<HeapVector<Member<SimpleObject>>>* m_vec = | 5903 TraceIfNeededTester<HeapVector<Member<SimpleObject>>>* m_vec = |
| 5904 TraceIfNeededTester<HeapVector<Member<SimpleObject>>>::create(); | 5904 TraceIfNeededTester<HeapVector<Member<SimpleObject>>>::create(); |
| 5905 m_vec->obj().append(SimpleObject::create()); | 5905 m_vec->obj().push_back(SimpleObject::create()); |
| 5906 visitor.reset(); | 5906 visitor.reset(); |
| 5907 m_vec->trace(&visitor); | 5907 m_vec->trace(&visitor); |
| 5908 EXPECT_EQ(2u, visitor.count()); | 5908 EXPECT_EQ(2u, visitor.count()); |
| 5909 } | 5909 } |
| 5910 } | 5910 } |
| 5911 | 5911 |
| 5912 class AllocatesOnAssignment { | 5912 class AllocatesOnAssignment { |
| 5913 public: | 5913 public: |
| 5914 AllocatesOnAssignment(std::nullptr_t) : m_value(nullptr) {} | 5914 AllocatesOnAssignment(std::nullptr_t) : m_value(nullptr) {} |
| 5915 AllocatesOnAssignment(int x) : m_value(new IntWrapper(x)) {} | 5915 AllocatesOnAssignment(int x) : m_value(new IntWrapper(x)) {} |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6301 EXPECT_EQ(i + 50, part.value()); | 6301 EXPECT_EQ(i + 50, part.value()); |
| 6302 i++; | 6302 i++; |
| 6303 } | 6303 } |
| 6304 } | 6304 } |
| 6305 | 6305 |
| 6306 TEST(HeapTest, HeapVectorPartObjects) { | 6306 TEST(HeapTest, HeapVectorPartObjects) { |
| 6307 HeapVector<PartObjectWithRef> vector1; | 6307 HeapVector<PartObjectWithRef> vector1; |
| 6308 HeapVector<PartObjectWithRef> vector2; | 6308 HeapVector<PartObjectWithRef> vector2; |
| 6309 | 6309 |
| 6310 for (int i = 0; i < 10; ++i) { | 6310 for (int i = 0; i < 10; ++i) { |
| 6311 vector1.append(PartObjectWithRef(i)); | 6311 vector1.push_back(PartObjectWithRef(i)); |
| 6312 vector2.append(PartObjectWithRef(i)); | 6312 vector2.push_back(PartObjectWithRef(i)); |
| 6313 } | 6313 } |
| 6314 | 6314 |
| 6315 vector1.reserveCapacity(150); | 6315 vector1.reserveCapacity(150); |
| 6316 EXPECT_LE(150u, vector1.capacity()); | 6316 EXPECT_LE(150u, vector1.capacity()); |
| 6317 EXPECT_EQ(10u, vector1.size()); | 6317 EXPECT_EQ(10u, vector1.size()); |
| 6318 | 6318 |
| 6319 vector2.reserveCapacity(100); | 6319 vector2.reserveCapacity(100); |
| 6320 EXPECT_LE(100u, vector2.capacity()); | 6320 EXPECT_LE(100u, vector2.capacity()); |
| 6321 EXPECT_EQ(10u, vector2.size()); | 6321 EXPECT_EQ(10u, vector2.size()); |
| 6322 | 6322 |
| 6323 for (int i = 0; i < 4; ++i) { | 6323 for (int i = 0; i < 4; ++i) { |
| 6324 vector1.append(PartObjectWithRef(10 + i)); | 6324 vector1.push_back(PartObjectWithRef(10 + i)); |
| 6325 vector2.append(PartObjectWithRef(10 + i)); | 6325 vector2.push_back(PartObjectWithRef(10 + i)); |
| 6326 vector2.append(PartObjectWithRef(10 + i)); | 6326 vector2.push_back(PartObjectWithRef(10 + i)); |
| 6327 } | 6327 } |
| 6328 | 6328 |
| 6329 // Shrinking heap vector backing stores always succeeds, | 6329 // Shrinking heap vector backing stores always succeeds, |
| 6330 // so these two will not currently exercise the code path | 6330 // so these two will not currently exercise the code path |
| 6331 // where shrinking causes copying into a new, small buffer. | 6331 // where shrinking causes copying into a new, small buffer. |
| 6332 vector2.shrinkToReasonableCapacity(); | 6332 vector2.shrinkToReasonableCapacity(); |
| 6333 EXPECT_EQ(18u, vector2.size()); | 6333 EXPECT_EQ(18u, vector2.size()); |
| 6334 | 6334 |
| 6335 vector1.shrinkToReasonableCapacity(); | 6335 vector1.shrinkToReasonableCapacity(); |
| 6336 EXPECT_EQ(14u, vector1.size()); | 6336 EXPECT_EQ(14u, vector1.size()); |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6573 void checkUnused() { checkUnusedSlots(end(), end() + (capacity() - size())); } | 6573 void checkUnused() { checkUnusedSlots(end(), end() + (capacity() - size())); } |
| 6574 }; | 6574 }; |
| 6575 | 6575 |
| 6576 TEST(HeapTest, TestPersistentHeapVectorWithUnusedSlots) { | 6576 TEST(HeapTest, TestPersistentHeapVectorWithUnusedSlots) { |
| 6577 TestPersistentHeapVectorWithUnusedSlots vector1; | 6577 TestPersistentHeapVectorWithUnusedSlots vector1; |
| 6578 TestPersistentHeapVectorWithUnusedSlots vector2(vector1); | 6578 TestPersistentHeapVectorWithUnusedSlots vector2(vector1); |
| 6579 | 6579 |
| 6580 vector1.checkUnused(); | 6580 vector1.checkUnused(); |
| 6581 vector2.checkUnused(); | 6581 vector2.checkUnused(); |
| 6582 | 6582 |
| 6583 vector2.append(VectorObject()); | 6583 vector2.push_back(VectorObject()); |
| 6584 vector2.checkUnused(); | 6584 vector2.checkUnused(); |
| 6585 | 6585 |
| 6586 EXPECT_EQ(0u, vector1.size()); | 6586 EXPECT_EQ(0u, vector1.size()); |
| 6587 | 6587 |
| 6588 EXPECT_EQ(1u, vector2.size()); | 6588 EXPECT_EQ(1u, vector2.size()); |
| 6589 // TODO(Oilpan): when Vector.h's contiguous container support no longer disables | 6589 // TODO(Oilpan): when Vector.h's contiguous container support no longer disables |
| 6590 // Vector<>s with inline capacity, remove. | 6590 // Vector<>s with inline capacity, remove. |
| 6591 #if !defined(ANNOTATE_CONTIGUOUS_CONTAINER) | 6591 #if !defined(ANNOTATE_CONTIGUOUS_CONTAINER) |
| 6592 EXPECT_EQ(16u, vector1.capacity()); | 6592 EXPECT_EQ(16u, vector1.capacity()); |
| 6593 EXPECT_EQ(16u, vector2.capacity()); | 6593 EXPECT_EQ(16u, vector2.capacity()); |
| 6594 #endif | 6594 #endif |
| 6595 } | 6595 } |
| 6596 | 6596 |
| 6597 TEST(HeapTest, TestStaticLocals) { | 6597 TEST(HeapTest, TestStaticLocals) { |
| 6598 // Sanity check DEFINE_STATIC_LOCAL()s over heap allocated objects and | 6598 // Sanity check DEFINE_STATIC_LOCAL()s over heap allocated objects and |
| 6599 // collections. | 6599 // collections. |
| 6600 | 6600 |
| 6601 DEFINE_STATIC_LOCAL(IntWrapper, intWrapper, (new IntWrapper(33))); | 6601 DEFINE_STATIC_LOCAL(IntWrapper, intWrapper, (new IntWrapper(33))); |
| 6602 DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<IntWrapper>>, | 6602 DEFINE_STATIC_LOCAL(PersistentHeapVector<Member<IntWrapper>>, |
| 6603 persistentHeapVectorIntWrapper, ()); | 6603 persistentHeapVectorIntWrapper, ()); |
| 6604 DEFINE_STATIC_LOCAL(HeapVector<Member<IntWrapper>>, heapVectorIntWrapper, | 6604 DEFINE_STATIC_LOCAL(HeapVector<Member<IntWrapper>>, heapVectorIntWrapper, |
| 6605 (new HeapVector<Member<IntWrapper>>)); | 6605 (new HeapVector<Member<IntWrapper>>)); |
| 6606 | 6606 |
| 6607 EXPECT_EQ(33, intWrapper.value()); | 6607 EXPECT_EQ(33, intWrapper.value()); |
| 6608 EXPECT_EQ(0u, persistentHeapVectorIntWrapper.size()); | 6608 EXPECT_EQ(0u, persistentHeapVectorIntWrapper.size()); |
| 6609 EXPECT_EQ(0u, heapVectorIntWrapper.size()); | 6609 EXPECT_EQ(0u, heapVectorIntWrapper.size()); |
| 6610 | 6610 |
| 6611 persistentHeapVectorIntWrapper.append(&intWrapper); | 6611 persistentHeapVectorIntWrapper.push_back(&intWrapper); |
| 6612 heapVectorIntWrapper.append(&intWrapper); | 6612 heapVectorIntWrapper.push_back(&intWrapper); |
| 6613 EXPECT_EQ(1u, persistentHeapVectorIntWrapper.size()); | 6613 EXPECT_EQ(1u, persistentHeapVectorIntWrapper.size()); |
| 6614 EXPECT_EQ(1u, heapVectorIntWrapper.size()); | 6614 EXPECT_EQ(1u, heapVectorIntWrapper.size()); |
| 6615 | 6615 |
| 6616 EXPECT_EQ(persistentHeapVectorIntWrapper[0], heapVectorIntWrapper[0]); | 6616 EXPECT_EQ(persistentHeapVectorIntWrapper[0], heapVectorIntWrapper[0]); |
| 6617 EXPECT_EQ(33, heapVectorIntWrapper[0]->value()); | 6617 EXPECT_EQ(33, heapVectorIntWrapper[0]->value()); |
| 6618 } | 6618 } |
| 6619 | 6619 |
| 6620 namespace { | 6620 namespace { |
| 6621 | 6621 |
| 6622 class ThreadedClearOnShutdownTester : public ThreadedTesterBase { | 6622 class ThreadedClearOnShutdownTester : public ThreadedTesterBase { |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6805 "HeapVector"); | 6805 "HeapVector"); |
| 6806 static_assert( | 6806 static_assert( |
| 6807 WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::value, | 6807 WTF::IsGarbageCollectedType<HeapDeque<Member<IntWrapper>>>::value, |
| 6808 "HeapDeque"); | 6808 "HeapDeque"); |
| 6809 static_assert(WTF::IsGarbageCollectedType< | 6809 static_assert(WTF::IsGarbageCollectedType< |
| 6810 HeapTerminatedArray<Member<IntWrapper>>>::value, | 6810 HeapTerminatedArray<Member<IntWrapper>>>::value, |
| 6811 "HeapTerminatedArray"); | 6811 "HeapTerminatedArray"); |
| 6812 } | 6812 } |
| 6813 | 6813 |
| 6814 } // namespace blink | 6814 } // namespace blink |
| OLD | NEW |