| Index: third_party/WebKit/Source/platform/heap/CallbackStack.cpp
|
| diff --git a/third_party/WebKit/Source/platform/heap/CallbackStack.cpp b/third_party/WebKit/Source/platform/heap/CallbackStack.cpp
|
| index 86657664cf84c69addcb60a8d4eddc757cf86b17..4cea26a788f93fad268fd6218c4144b341b75b51 100644
|
| --- a/third_party/WebKit/Source/platform/heap/CallbackStack.cpp
|
| +++ b/third_party/WebKit/Source/platform/heap/CallbackStack.cpp
|
| @@ -7,24 +7,26 @@
|
|
|
| namespace blink {
|
|
|
| -CallbackStack::Block::Block(Block* next)
|
| +CallbackStack::Block::Block(Block* next, size_t blockSize)
|
| + : m_blockSize(blockSize)
|
| {
|
| - static_assert((blockSize * sizeof(Item)) % WTF::kPageAllocationGranularity == 0, "CallbackStack::blockSize * sizeof(Item) must be a multiple of WTF::kPageAllocationGranularity");
|
| - m_buffer = static_cast<Item*>(WTF::allocPages(nullptr, blockSize * sizeof(Item), WTF::kPageAllocationGranularity, WTF::PageAccessible));
|
| + // Allocated block size must be a multiple of WTF::kPageAllocationGranularity.
|
| + ASSERT((m_blockSize * sizeof(Item)) % WTF::kPageAllocationGranularity == 0);
|
| + m_buffer = static_cast<Item*>(WTF::allocPages(nullptr, m_blockSize * sizeof(Item), WTF::kPageAllocationGranularity, WTF::PageAccessible));
|
| RELEASE_ASSERT(m_buffer);
|
|
|
| #if ENABLE(ASSERT)
|
| clear();
|
| #endif
|
|
|
| - m_limit = &(m_buffer[blockSize]);
|
| + m_limit = &(m_buffer[m_blockSize]);
|
| m_current = &(m_buffer[0]);
|
| m_next = next;
|
| }
|
|
|
| CallbackStack::Block::~Block()
|
| {
|
| - WTF::freePages(m_buffer, blockSize * sizeof(Item));
|
| + WTF::freePages(m_buffer, m_blockSize * sizeof(Item));
|
| m_buffer = nullptr;
|
| m_limit = nullptr;
|
| m_current = nullptr;
|
| @@ -34,7 +36,7 @@ CallbackStack::Block::~Block()
|
| #if ENABLE(ASSERT)
|
| void CallbackStack::Block::clear()
|
| {
|
| - for (size_t i = 0; i < blockSize; i++)
|
| + for (size_t i = 0; i < m_blockSize; i++)
|
| m_buffer[i] = Item(0, 0);
|
| }
|
| #endif
|
| @@ -44,7 +46,7 @@ void CallbackStack::Block::decommit()
|
| #if ENABLE(ASSERT)
|
| clear();
|
| #endif
|
| - WTF::discardSystemPages(m_buffer, blockSize * sizeof(Item));
|
| + WTF::discardSystemPages(m_buffer, m_blockSize * sizeof(Item));
|
|
|
| m_current = &m_buffer[0];
|
| m_next = nullptr;
|
| @@ -72,8 +74,8 @@ bool CallbackStack::Block::hasCallbackForObject(const void* object)
|
| }
|
| #endif
|
|
|
| -CallbackStack::CallbackStack()
|
| - : m_first(new Block(0))
|
| +CallbackStack::CallbackStack(size_t blockSize)
|
| + : m_first(new Block(nullptr, blockSize))
|
| , m_last(m_first)
|
| {
|
| }
|
| @@ -105,7 +107,7 @@ bool CallbackStack::isEmpty() const
|
| CallbackStack::Item* CallbackStack::allocateEntrySlow()
|
| {
|
| ASSERT(!m_first->allocateEntry());
|
| - m_first = new Block(m_first);
|
| + m_first = new Block(m_first, m_first->blockSize());
|
| return m_first->allocateEntry();
|
| }
|
|
|
| @@ -151,7 +153,7 @@ void CallbackStack::invokeOldestCallbacks(Block* from, Block* upto, Visitor* vis
|
| if (from == upto)
|
| return;
|
| ASSERT(from);
|
| - // Recurse first (blockSize at a time) so we get to the newly added entries last.
|
| + // Recurse first so we get to the newly added entries last.
|
| invokeOldestCallbacks(from->next(), upto, visitor);
|
| from->invokeEphemeronCallbacks(visitor);
|
| }
|
|
|