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 1785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1796 SimpleFinalizedObject::create(); | 1796 SimpleFinalizedObject::create(); |
1797 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep); | 1797 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep); |
1798 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); | 1798 EXPECT_EQ(0, SimpleFinalizedObject::s_destructorCalls); |
1799 for (int i = 0; i < 10000; i++) | 1799 for (int i = 0; i < 10000; i++) |
1800 SimpleFinalizedObject::create(); | 1800 SimpleFinalizedObject::create(); |
1801 EXPECT_EQ(1000, SimpleFinalizedObject::s_destructorCalls); | 1801 EXPECT_EQ(1000, SimpleFinalizedObject::s_destructorCalls); |
1802 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep); | 1802 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
Sweep); |
1803 EXPECT_EQ(11000, SimpleFinalizedObject::s_destructorCalls); | 1803 EXPECT_EQ(11000, SimpleFinalizedObject::s_destructorCalls); |
1804 } | 1804 } |
1805 | 1805 |
1806 TEST(HeapTest, LazySweepingLargeObjects) | 1806 TEST(HeapTest, LazySweepingLargeObjectPages) |
1807 { | 1807 { |
1808 clearOutOldGarbage(); | 1808 clearOutOldGarbage(); |
1809 | 1809 |
1810 LargeHeapObject::s_destructorCalls = 0; | 1810 LargeHeapObject::s_destructorCalls = 0; |
1811 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); | 1811 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); |
1812 for (int i = 0; i < 10; i++) | 1812 for (int i = 0; i < 10; i++) |
1813 LargeHeapObject::create(); | 1813 LargeHeapObject::create(); |
1814 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep); | 1814 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith
outSweep); |
1815 for (int i = 0; i < 10; i++) { | 1815 for (int i = 0; i < 10; i++) { |
1816 LargeHeapObject::create(); | 1816 LargeHeapObject::create(); |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2081 EXPECT_NE(info, ThreadState::current()->findGCInfo(reinterpret_cast<Addr
ess>(object.get()) + sizeof(LargeHeapObject))); | 2081 EXPECT_NE(info, ThreadState::current()->findGCInfo(reinterpret_cast<Addr
ess>(object.get()) + sizeof(LargeHeapObject))); |
2082 EXPECT_NE(info, ThreadState::current()->findGCInfo(reinterpret_cast<Addr
ess>(object.get()) - 1)); | 2082 EXPECT_NE(info, ThreadState::current()->findGCInfo(reinterpret_cast<Addr
ess>(object.get()) - 1)); |
2083 #endif | 2083 #endif |
2084 clearOutOldGarbage(); | 2084 clearOutOldGarbage(); |
2085 size_t afterAllocation = Heap::allocatedSpace(); | 2085 size_t afterAllocation = Heap::allocatedSpace(); |
2086 { | 2086 { |
2087 object->set(0, 'a'); | 2087 object->set(0, 'a'); |
2088 EXPECT_EQ('a', object->get(0)); | 2088 EXPECT_EQ('a', object->get(0)); |
2089 object->set(object->length() - 1, 'b'); | 2089 object->set(object->length() - 1, 'b'); |
2090 EXPECT_EQ('b', object->get(object->length() - 1)); | 2090 EXPECT_EQ('b', object->get(object->length() - 1)); |
2091 size_t expectedLargeHeapObjectPayloadSize = ThreadHeap::allocationSi
zeFromSize(sizeof(LargeHeapObject)); | 2091 size_t expectedLargeHeapObjectPayloadSize = BaseHeap::allocationSize
FromSize(sizeof(LargeHeapObject)); |
2092 size_t expectedObjectPayloadSize = expectedLargeHeapObjectPayloadSiz
e + sizeof(IntWrapper); | 2092 size_t expectedObjectPayloadSize = expectedLargeHeapObjectPayloadSiz
e + sizeof(IntWrapper); |
2093 size_t actualObjectPayloadSize = Heap::objectPayloadSizeForTesting()
- initialObjectPayloadSize; | 2093 size_t actualObjectPayloadSize = Heap::objectPayloadSizeForTesting()
- initialObjectPayloadSize; |
2094 CheckWithSlack(expectedObjectPayloadSize, actualObjectPayloadSize, s
lack); | 2094 CheckWithSlack(expectedObjectPayloadSize, actualObjectPayloadSize, s
lack); |
2095 // There is probably space for the IntWrapper in a heap page without | 2095 // There is probably space for the IntWrapper in a heap page without |
2096 // allocating extra pages. However, the IntWrapper allocation might
cause | 2096 // allocating extra pages. However, the IntWrapper allocation might
cause |
2097 // the addition of a heap page. | 2097 // the addition of a heap page. |
2098 size_t largeObjectAllocationSize = sizeof(LargeObject) + expectedLar
geHeapObjectPayloadSize; | 2098 size_t largeObjectAllocationSize = sizeof(LargeObjectPage) + expecte
dLargeHeapObjectPayloadSize; |
2099 size_t allocatedSpaceLowerBound = initialAllocatedSpace + largeObjec
tAllocationSize; | 2099 size_t allocatedSpaceLowerBound = initialAllocatedSpace + largeObjec
tAllocationSize; |
2100 size_t allocatedSpaceUpperBound = allocatedSpaceLowerBound + slack +
blinkPageSize; | 2100 size_t allocatedSpaceUpperBound = allocatedSpaceLowerBound + slack +
blinkPageSize; |
2101 EXPECT_LE(allocatedSpaceLowerBound, afterAllocation); | 2101 EXPECT_LE(allocatedSpaceLowerBound, afterAllocation); |
2102 EXPECT_LE(afterAllocation, allocatedSpaceUpperBound); | 2102 EXPECT_LE(afterAllocation, allocatedSpaceUpperBound); |
2103 EXPECT_EQ(0, IntWrapper::s_destructorCalls); | 2103 EXPECT_EQ(0, IntWrapper::s_destructorCalls); |
2104 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); | 2104 EXPECT_EQ(0, LargeHeapObject::s_destructorCalls); |
2105 for (int i = 0; i < 10; i++) | 2105 for (int i = 0; i < 10; i++) |
2106 object = LargeHeapObject::create(); | 2106 object = LargeHeapObject::create(); |
2107 } | 2107 } |
2108 clearOutOldGarbage(); | 2108 clearOutOldGarbage(); |
(...skipping 3456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5565 | 5565 |
5566 TEST(HeapTest, StackGrowthDirection) | 5566 TEST(HeapTest, StackGrowthDirection) |
5567 { | 5567 { |
5568 // The implementation of marking probes stack usage as it runs, | 5568 // The implementation of marking probes stack usage as it runs, |
5569 // and has a builtin assumption that the stack grows towards | 5569 // and has a builtin assumption that the stack grows towards |
5570 // lower addresses. | 5570 // lower addresses. |
5571 EXPECT_EQ(GrowsTowardsLower, stackGrowthDirection()); | 5571 EXPECT_EQ(GrowsTowardsLower, stackGrowthDirection()); |
5572 } | 5572 } |
5573 | 5573 |
5574 } // namespace blink | 5574 } // namespace blink |
OLD | NEW |