| 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 1885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1896 Persistent<SimpleFinalizedObject> finalized = SimpleFinalizedObject::cre
ate(); | 1896 Persistent<SimpleFinalizedObject> finalized = SimpleFinalizedObject::cre
ate(); |
| 1897 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); | 1897 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); |
| 1898 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GC
WithSweep, Heap::ForcedGC); | 1898 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GC
WithSweep, Heap::ForcedGC); |
| 1899 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); | 1899 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); |
| 1900 } | 1900 } |
| 1901 | 1901 |
| 1902 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); | 1902 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); |
| 1903 EXPECT_EQ(1, SimpleFinalizedObject::s_destructorCalls); | 1903 EXPECT_EQ(1, SimpleFinalizedObject::s_destructorCalls); |
| 1904 } | 1904 } |
| 1905 | 1905 |
| 1906 #if ENABLE(ASSERT) || defined(LEAK_SANITIZER) || defined(ADDRESS_SANITIZER) |
| 1907 TEST(HeapTest, FreelistReuse) |
| 1908 { |
| 1909 clearOutOldGarbage(); |
| 1910 |
| 1911 for (int i = 0; i < 100; i++) |
| 1912 new IntWrapper(i); |
| 1913 IntWrapper* p1 = new IntWrapper(100); |
| 1914 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); |
| 1915 // In non-production builds, we delay reusing freed memory for at least |
| 1916 // one GC cycle. |
| 1917 for (int i = 0; i < 100; i++) { |
| 1918 IntWrapper* p2 = new IntWrapper(i); |
| 1919 EXPECT_NE(p1, p2); |
| 1920 } |
| 1921 |
| 1922 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); |
| 1923 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); |
| 1924 // Now the freed memory in the first GC should be reused. |
| 1925 bool reusedMemoryFound = false; |
| 1926 for (int i = 0; i < 10000; i++) { |
| 1927 IntWrapper* p2 = new IntWrapper(i); |
| 1928 if (p1 == p2) { |
| 1929 reusedMemoryFound = true; |
| 1930 break; |
| 1931 } |
| 1932 } |
| 1933 EXPECT_TRUE(reusedMemoryFound); |
| 1934 } |
| 1935 #endif |
| 1936 |
| 1906 #if ENABLE(LAZY_SWEEPING) | 1937 #if ENABLE(LAZY_SWEEPING) |
| 1907 TEST(HeapTest, LazySweepingPages) | 1938 TEST(HeapTest, LazySweepingPages) |
| 1908 { | 1939 { |
| 1909 clearOutOldGarbage(); | 1940 clearOutOldGarbage(); |
| 1910 | 1941 |
| 1911 SimpleFinalizedObject::s_destructorCalls = 0; | 1942 SimpleFinalizedObject::s_destructorCalls = 0; |
| 1912 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); | 1943 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); |
| 1913 for (int i = 0; i < 1000; i++) | 1944 for (int i = 0; i < 1000; i++) |
| 1914 SimpleFinalizedObject::create(); | 1945 SimpleFinalizedObject::create(); |
| 1915 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep, Heap::ForcedGC); | 1946 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep, Heap::ForcedGC); |
| 1916 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); | 1947 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); |
| 1917 for (int i = 0; i < 10000; i++) | 1948 for (int i = 0; i < 10000; i++) |
| 1918 SimpleFinalizedObject::create(); | 1949 SimpleFinalizedObject::create(); |
| 1919 EXPECT_EQ(1000, SimpleFinalizedObject::s_destructorCalls); | 1950 EXPECT_EQ(1000, SimpleFinalizedObject::s_destructorCalls); |
| 1920 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); | 1951 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); |
| 1921 EXPECT_EQ(11000, SimpleFinalizedObject::s_destructorCalls); | 1952 EXPECT_EQ(11000, SimpleFinalizedObject::s_destructorCalls); |
| 1922 } | 1953 } |
| 1923 | 1954 |
| 1924 TEST(HeapTest, LazySweepingLargeObjectPages) | 1955 TEST(HeapTest, LazySweepingLargeObjectPages) |
| 1925 { | 1956 { |
| 1926 clearOutOldGarbage(); | 1957 clearOutOldGarbage(); |
| 1927 | 1958 |
| 1959 // Create free lists that can be reused for IntWrappers created in |
| 1960 // LargeHeapObject::create(). |
| 1961 Persistent<IntWrapper> p1 = new IntWrapper(1); |
| 1962 for (int i = 0; i < 100; i++) { |
| 1963 new IntWrapper(i); |
| 1964 } |
| 1965 Persistent<IntWrapper> p2 = new IntWrapper(2); |
| 1966 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); |
| 1967 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); |
| 1968 |
| 1928 LargeHeapObject::s_destructorCalls = 0; | 1969 LargeHeapObject::s_destructorCalls = 0; |
| 1929 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); | 1970 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); |
| 1930 for (int i = 0; i < 10; i++) | 1971 for (int i = 0; i < 10; i++) |
| 1931 LargeHeapObject::create(); | 1972 LargeHeapObject::create(); |
| 1932 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep, Heap::ForcedGC); | 1973 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep, Heap::ForcedGC); |
| 1974 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); |
| 1933 for (int i = 0; i < 10; i++) { | 1975 for (int i = 0; i < 10; i++) { |
| 1934 LargeHeapObject::create(); | 1976 LargeHeapObject::create(); |
| 1935 EXPECT_EQ(i + 1, LargeHeapObject::s_destructorCalls); | 1977 EXPECT_EQ(i + 1, LargeHeapObject::s_destructorCalls); |
| 1936 } | 1978 } |
| 1937 LargeHeapObject::create(); | 1979 LargeHeapObject::create(); |
| 1938 LargeHeapObject::create(); | 1980 LargeHeapObject::create(); |
| 1939 EXPECT_EQ(10, LargeHeapObject::s_destructorCalls); | 1981 EXPECT_EQ(10, LargeHeapObject::s_destructorCalls); |
| 1940 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep, Heap::ForcedGC); | 1982 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep, Heap::ForcedGC); |
| 1941 EXPECT_EQ(10, LargeHeapObject::s_destructorCalls); | 1983 EXPECT_EQ(10, LargeHeapObject::s_destructorCalls); |
| 1942 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); | 1984 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep, Heap::ForcedGC); |
| (...skipping 4286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6229 { | 6271 { |
| 6230 Persistent<ClassWithMember> object = ClassWithMember::create(); | 6272 Persistent<ClassWithMember> object = ClassWithMember::create(); |
| 6231 EXPECT_EQ(0, object->traceCount()); | 6273 EXPECT_EQ(0, object->traceCount()); |
| 6232 TestMixinAllocatingObject* mixin = TestMixinAllocatingObject::create(object.
get()); | 6274 TestMixinAllocatingObject* mixin = TestMixinAllocatingObject::create(object.
get()); |
| 6233 EXPECT_TRUE(mixin); | 6275 EXPECT_TRUE(mixin); |
| 6234 EXPECT_GT(object->traceCount(), 0); | 6276 EXPECT_GT(object->traceCount(), 0); |
| 6235 EXPECT_GT(mixin->traceCount(), 0); | 6277 EXPECT_GT(mixin->traceCount(), 0); |
| 6236 } | 6278 } |
| 6237 | 6279 |
| 6238 } // namespace blink | 6280 } // namespace blink |
| OLD | NEW |