Chromium Code Reviews| 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 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 692 { | 692 { |
| 693 // It's possible that Vector requests a smaller expanded size because | 693 // It's possible that Vector requests a smaller expanded size because |
| 694 // Vector::shrinkCapacity can set a capacity smaller than the actual payload | 694 // Vector::shrinkCapacity can set a capacity smaller than the actual payload |
| 695 // size. | 695 // size. |
| 696 ASSERT(header->checkHeader()); | 696 ASSERT(header->checkHeader()); |
| 697 if (header->payloadSize() >= newSize) | 697 if (header->payloadSize() >= newSize) |
| 698 return true; | 698 return true; |
| 699 size_t allocationSize = Heap::allocationSizeFromSize(newSize); | 699 size_t allocationSize = Heap::allocationSizeFromSize(newSize); |
| 700 ASSERT(allocationSize > header->size()); | 700 ASSERT(allocationSize > header->size()); |
| 701 size_t expandSize = allocationSize - header->size(); | 701 size_t expandSize = allocationSize - header->size(); |
| 702 if (header->payloadEnd() == m_currentAllocationPoint && expandSize <= m_rema iningAllocationSize) { | 702 if (isObjectAllocatedLast(header) && expandSize <= m_remainingAllocationSize ) { |
|
haraken
2015/10/09 14:21:41
isObjectAllocatedAtAllocationPoint ?
sof
2015/10/09 14:26:40
A bit long, but why not; done.
| |
| 703 m_currentAllocationPoint += expandSize; | 703 m_currentAllocationPoint += expandSize; |
| 704 m_remainingAllocationSize -= expandSize; | 704 m_remainingAllocationSize -= expandSize; |
| 705 | 705 |
| 706 // Unpoison the memory used for the object (payload). | 706 // Unpoison the memory used for the object (payload). |
| 707 SET_MEMORY_ACCESSIBLE(header->payloadEnd(), expandSize); | 707 SET_MEMORY_ACCESSIBLE(header->payloadEnd(), expandSize); |
| 708 header->setSize(allocationSize); | 708 header->setSize(allocationSize); |
| 709 ASSERT(findPageFromAddress(header->payloadEnd() - 1)); | 709 ASSERT(findPageFromAddress(header->payloadEnd() - 1)); |
| 710 return true; | 710 return true; |
| 711 } | 711 } |
| 712 return false; | 712 return false; |
| 713 } | 713 } |
| 714 | 714 |
| 715 bool NormalPageHeap::shrinkObject(HeapObjectHeader* header, size_t newSize) | 715 bool NormalPageHeap::shrinkObject(HeapObjectHeader* header, size_t newSize) |
| 716 { | 716 { |
| 717 ASSERT(header->checkHeader()); | 717 ASSERT(header->checkHeader()); |
| 718 ASSERT(header->payloadSize() > newSize); | 718 ASSERT(header->payloadSize() > newSize); |
| 719 size_t allocationSize = Heap::allocationSizeFromSize(newSize); | 719 size_t allocationSize = Heap::allocationSizeFromSize(newSize); |
| 720 ASSERT(header->size() > allocationSize); | 720 ASSERT(header->size() > allocationSize); |
| 721 size_t shrinkSize = header->size() - allocationSize; | 721 size_t shrinkSize = header->size() - allocationSize; |
| 722 if (header->payloadEnd() == m_currentAllocationPoint) { | 722 if (isObjectAllocatedLast(header)) { |
| 723 m_currentAllocationPoint -= shrinkSize; | 723 m_currentAllocationPoint -= shrinkSize; |
| 724 m_remainingAllocationSize += shrinkSize; | 724 m_remainingAllocationSize += shrinkSize; |
| 725 SET_MEMORY_INACCESSIBLE(m_currentAllocationPoint, shrinkSize); | 725 SET_MEMORY_INACCESSIBLE(m_currentAllocationPoint, shrinkSize); |
| 726 header->setSize(allocationSize); | 726 header->setSize(allocationSize); |
| 727 return true; | 727 return true; |
| 728 } | 728 } |
| 729 ASSERT(shrinkSize >= sizeof(HeapObjectHeader)); | 729 ASSERT(shrinkSize >= sizeof(HeapObjectHeader)); |
| 730 ASSERT(header->gcInfoIndex() > 0); | 730 ASSERT(header->gcInfoIndex() > 0); |
| 731 Address shrinkAddress = header->payloadEnd() - shrinkSize; | 731 Address shrinkAddress = header->payloadEnd() - shrinkSize; |
| 732 HeapObjectHeader* freedHeader = new (NotNull, shrinkAddress) HeapObjectHeade r(shrinkSize, header->gcInfoIndex()); | 732 HeapObjectHeader* freedHeader = new (NotNull, shrinkAddress) HeapObjectHeade r(shrinkSize, header->gcInfoIndex()); |
| (...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1840 | 1840 |
| 1841 m_hasEntries = true; | 1841 m_hasEntries = true; |
| 1842 size_t index = hash(address); | 1842 size_t index = hash(address); |
| 1843 ASSERT(!(index & 1)); | 1843 ASSERT(!(index & 1)); |
| 1844 Address cachePage = roundToBlinkPageStart(address); | 1844 Address cachePage = roundToBlinkPageStart(address); |
| 1845 m_entries[index + 1] = m_entries[index]; | 1845 m_entries[index + 1] = m_entries[index]; |
| 1846 m_entries[index] = cachePage; | 1846 m_entries[index] = cachePage; |
| 1847 } | 1847 } |
| 1848 | 1848 |
| 1849 } // namespace blink | 1849 } // namespace blink |
| OLD | NEW |