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 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 722 ensureCurrentAllocation(allocationSize, gcInfo); | 722 ensureCurrentAllocation(allocationSize, gcInfo); |
| 723 return allocate(size, gcInfo); | 723 return allocate(size, gcInfo); |
| 724 } | 724 } |
| 725 | 725 |
| 726 template<typename Header> | 726 template<typename Header> |
| 727 bool ThreadHeap<Header>::allocateFromFreeList(size_t minSize) | 727 bool ThreadHeap<Header>::allocateFromFreeList(size_t minSize) |
| 728 { | 728 { |
| 729 size_t bucketSize = 1 << m_freeList.m_biggestFreeListIndex; | 729 size_t bucketSize = 1 << m_freeList.m_biggestFreeListIndex; |
| 730 int i = m_freeList.m_biggestFreeListIndex; | 730 int i = m_freeList.m_biggestFreeListIndex; |
| 731 for (; i > 0; i--, bucketSize >>= 1) { | 731 for (; i > 0; i--, bucketSize >>= 1) { |
| 732 if (bucketSize < minSize) | 732 if (bucketSize < minSize) { |
| 733 break; | 733 // A FreeListEntry for bucketSize might be larger than minSize. |
| 734 // FIXME: We check only the first FreeListEntry because searching | |
| 735 // the entire list is costly. | |
| 736 if (!m_freeList.m_freeLists[i] || m_freeList.m_freeLists[i]->size() < minSize) | |
| 737 break; | |
| 738 } | |
| 734 FreeListEntry* entry = m_freeList.m_freeLists[i]; | 739 FreeListEntry* entry = m_freeList.m_freeLists[i]; |
| 735 if (entry) { | 740 if (entry) { |
| 736 m_freeList.m_biggestFreeListIndex = i; | 741 m_freeList.m_biggestFreeListIndex = i; |
| 737 entry->unlink(&m_freeList.m_freeLists[i]); | 742 entry->unlink(&m_freeList.m_freeLists[i]); |
| 738 setAllocationPoint(entry->address(), entry->size()); | 743 setAllocationPoint(entry->address(), entry->size()); |
| 739 ASSERT(currentAllocationPoint() && remainingAllocationSize() >= minS ize); | 744 ASSERT(currentAllocationPoint() && remainingAllocationSize() >= minS ize); |
| 740 return true; | 745 return true; |
| 741 } | 746 } |
| 742 } | 747 } |
| 743 m_freeList.m_biggestFreeListIndex = i; | 748 m_freeList.m_biggestFreeListIndex = i; |
|
sof
2014/11/11 08:29:36
I don't understand m_biggestFreeListIndex and this
tkent
2014/11/11 08:46:59
We always allocate from a FreeListEntry in the lar
| |
| 744 return false; | 749 return false; |
| 745 } | 750 } |
| 746 | 751 |
| 747 template<typename Header> | 752 template<typename Header> |
| 748 void ThreadHeap<Header>::ensureCurrentAllocation(size_t minSize, const GCInfo* g cInfo) | 753 void ThreadHeap<Header>::ensureCurrentAllocation(size_t minSize, const GCInfo* g cInfo) |
| 749 { | 754 { |
| 750 ASSERT(minSize >= allocationGranularity); | 755 ASSERT(minSize >= allocationGranularity); |
| 751 if (allocateFromFreeList(minSize)) | 756 if (allocateFromFreeList(minSize)) |
| 752 return; | 757 return; |
| 753 if (coalesce(minSize) && allocateFromFreeList(minSize)) | 758 if (coalesce(minSize) && allocateFromFreeList(minSize)) |
| (...skipping 2207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2961 CallbackStack* Heap::s_weakCallbackStack; | 2966 CallbackStack* Heap::s_weakCallbackStack; |
| 2962 CallbackStack* Heap::s_ephemeronStack; | 2967 CallbackStack* Heap::s_ephemeronStack; |
| 2963 HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache; | 2968 HeapDoesNotContainCache* Heap::s_heapDoesNotContainCache; |
| 2964 bool Heap::s_shutdownCalled = false; | 2969 bool Heap::s_shutdownCalled = false; |
| 2965 bool Heap::s_lastGCWasConservative = false; | 2970 bool Heap::s_lastGCWasConservative = false; |
| 2966 FreePagePool* Heap::s_freePagePool; | 2971 FreePagePool* Heap::s_freePagePool; |
| 2967 OrphanedPagePool* Heap::s_orphanedPagePool; | 2972 OrphanedPagePool* Heap::s_orphanedPagePool; |
| 2968 Heap::RegionTree* Heap::s_regionTree = 0; | 2973 Heap::RegionTree* Heap::s_regionTree = 0; |
| 2969 | 2974 |
| 2970 } // namespace blink | 2975 } // namespace blink |
| OLD | NEW |