Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: third_party/WebKit/Source/platform/wtf/Vector.h

Issue 2816373003: Oilpan: Allow clearing a vector during pre finalizer to disallocate the backing buffer (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/platform/heap/HeapTest.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 1608 matching lines...) Expand 10 before | Expand all | Expand 10 after
1619 } 1619 }
1620 1620
1621 template <typename T, size_t inlineCapacity, typename Allocator> 1621 template <typename T, size_t inlineCapacity, typename Allocator>
1622 void Vector<T, inlineCapacity, Allocator>::ShrinkCapacity(size_t new_capacity) { 1622 void Vector<T, inlineCapacity, Allocator>::ShrinkCapacity(size_t new_capacity) {
1623 if (new_capacity >= Capacity()) 1623 if (new_capacity >= Capacity())
1624 return; 1624 return;
1625 1625
1626 if (new_capacity < size()) 1626 if (new_capacity < size())
1627 Shrink(new_capacity); 1627 Shrink(new_capacity);
1628 1628
1629 if (Allocator::IsObjectResurrectionForbidden())
1630 return;
1631
1632 T* old_buffer = begin(); 1629 T* old_buffer = begin();
1633 #ifdef ANNOTATE_CONTIGUOUS_CONTAINER 1630 #ifdef ANNOTATE_CONTIGUOUS_CONTAINER
1634 size_t old_capacity = Capacity(); 1631 size_t old_capacity = Capacity();
1635 #endif 1632 #endif
1636 if (new_capacity > 0) { 1633 if (new_capacity > 0) {
1637 if (Base::ShrinkBuffer(new_capacity)) { 1634 if (Base::ShrinkBuffer(new_capacity)) {
1638 ANNOTATE_CHANGE_CAPACITY(begin(), old_capacity, size_, Capacity()); 1635 ANNOTATE_CHANGE_CAPACITY(begin(), old_capacity, size_, Capacity());
1639 return; 1636 return;
1640 } 1637 }
1641 1638
1639 if (Allocator::IsObjectResurrectionForbidden())
1640 return;
1641
1642 T* old_end = end(); 1642 T* old_end = end();
1643 Base::AllocateBuffer(new_capacity); 1643 Base::AllocateBuffer(new_capacity);
1644 if (begin() != old_buffer) { 1644 if (begin() != old_buffer) {
1645 ANNOTATE_NEW_BUFFER(begin(), Capacity(), size_); 1645 ANNOTATE_NEW_BUFFER(begin(), Capacity(), size_);
1646 TypeOperations::Move(old_buffer, old_end, begin()); 1646 TypeOperations::Move(old_buffer, old_end, begin());
1647 ClearUnusedSlots(old_buffer, old_end); 1647 ClearUnusedSlots(old_buffer, old_end);
1648 ANNOTATE_DELETE_BUFFER(old_buffer, old_capacity, size_); 1648 ANNOTATE_DELETE_BUFFER(old_buffer, old_capacity, size_);
1649 } 1649 }
1650 } else { 1650 } else {
1651 Base::ResetBufferPointer(); 1651 Base::ResetBufferPointer();
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1913 visitor, *const_cast<T*>(buffer_entry)); 1913 visitor, *const_cast<T*>(buffer_entry));
1914 CheckUnusedSlots(Buffer() + size(), Buffer() + Capacity()); 1914 CheckUnusedSlots(Buffer() + size(), Buffer() + Capacity());
1915 } 1915 }
1916 } 1916 }
1917 1917
1918 } // namespace WTF 1918 } // namespace WTF
1919 1919
1920 using WTF::Vector; 1920 using WTF::Vector;
1921 1921
1922 #endif // WTF_Vector_h 1922 #endif // WTF_Vector_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/platform/heap/HeapTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698