| 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 c76db50e0f336cdee4f18dd7155fc457cfe21f0a..48823846abdabb8d8e30471327d1629f12560ac8 100644
|
| --- a/third_party/WebKit/Source/platform/heap/CallbackStack.cpp
|
| +++ b/third_party/WebKit/Source/platform/heap/CallbackStack.cpp
|
| @@ -3,46 +3,14 @@
|
| // found in the LICENSE file.
|
|
|
| #include "platform/heap/CallbackStack.h"
|
| -#include "wtf/PageAllocator.h"
|
|
|
| namespace blink {
|
|
|
| -CallbackStack::Block::Block(Block* next)
|
| +void CallbackStack::Block::clear()
|
| {
|
| - 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));
|
| - RELEASE_ASSERT(m_buffer);
|
| -
|
| -#if ENABLE(ASSERT)
|
| - for (size_t i = 0; i < blockSize; i++)
|
| - m_buffer[i] = Item(0, 0);
|
| -#endif
|
| -
|
| - m_limit = &(m_buffer[blockSize]);
|
| - m_current = &(m_buffer[0]);
|
| - m_next = next;
|
| -}
|
| -
|
| -CallbackStack::Block::~Block()
|
| -{
|
| - WTF::freePages(m_buffer, blockSize * sizeof(Item));
|
| - m_buffer = nullptr;
|
| - m_limit = nullptr;
|
| - m_current = nullptr;
|
| - m_next = nullptr;
|
| -}
|
| -
|
| -void CallbackStack::Block::decommit()
|
| -{
|
| -#if ENABLE(ASSERT)
|
| - for (size_t i = 0; i < blockSize; i++)
|
| - m_buffer[i] = Item(0, 0);
|
| -#endif
|
| -
|
| - WTF::discardSystemPages(m_buffer, blockSize * sizeof(Item));
|
| -
|
| m_current = &m_buffer[0];
|
| m_next = nullptr;
|
| + clearUnused();
|
| }
|
|
|
| void CallbackStack::Block::invokeEphemeronCallbacks(Visitor* visitor)
|
| @@ -67,28 +35,34 @@
|
| }
|
| #endif
|
|
|
| -CallbackStack::CallbackStack()
|
| - : m_first(new Block(0))
|
| - , m_last(m_first)
|
| +void CallbackStack::Block::clearUnused()
|
| +{
|
| +#if ENABLE(ASSERT)
|
| + for (size_t i = 0; i < blockSize; i++)
|
| + m_buffer[i] = Item(0, 0);
|
| +#endif
|
| +}
|
| +
|
| +CallbackStack::CallbackStack() : m_first(new Block(0)), m_last(m_first)
|
| {
|
| }
|
|
|
| CallbackStack::~CallbackStack()
|
| {
|
| - RELEASE_ASSERT(isEmpty());
|
| + clear();
|
| delete m_first;
|
| m_first = nullptr;
|
| m_last = nullptr;
|
| }
|
|
|
| -void CallbackStack::decommit()
|
| +void CallbackStack::clear()
|
| {
|
| Block* next;
|
| for (Block* current = m_first->next(); current; current = next) {
|
| next = current->next();
|
| delete current;
|
| }
|
| - m_first->decommit();
|
| + m_first->clear();
|
| m_last = m_first;
|
| }
|
|
|
| @@ -112,7 +86,7 @@
|
| Block* next = m_first->next();
|
| if (!next) {
|
| #if ENABLE(ASSERT)
|
| - m_first->decommit();
|
| + m_first->clear();
|
| #endif
|
| return nullptr;
|
| }
|
|
|