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 |