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 48823846abdabb8d8e30471327d1629f12560ac8..ad04cd74563d1eac6403ed8b8eed319ad53a5da7 100644 |
--- a/third_party/WebKit/Source/platform/heap/CallbackStack.cpp |
+++ b/third_party/WebKit/Source/platform/heap/CallbackStack.cpp |
@@ -3,9 +3,29 @@ |
// found in the LICENSE file. |
#include "platform/heap/CallbackStack.h" |
+#include "wtf/Partitions.h" |
namespace blink { |
+CallbackStack::Block::Block(Block* next, size_t blockSize) |
+ : m_blockSize(blockSize) |
+{ |
+ m_buffer = static_cast<Item*>(WTF::Partitions::fastMalloc(blockSize * sizeof(Item), "CallbackStack::Block")); |
+ m_limit = &(m_buffer[m_blockSize]); |
+ m_current = &(m_buffer[0]); |
+ m_next = next; |
+ clearUnused(); |
+} |
+ |
+CallbackStack::Block::~Block() |
+{ |
+ clearUnused(); |
+ m_limit = nullptr; |
+ m_current = nullptr; |
+ m_next = nullptr; |
+ WTF::Partitions::fastFree(m_buffer); |
+} |
+ |
void CallbackStack::Block::clear() |
{ |
m_current = &m_buffer[0]; |
@@ -38,12 +58,14 @@ bool CallbackStack::Block::hasCallbackForObject(const void* object) |
void CallbackStack::Block::clearUnused() |
{ |
#if ENABLE(ASSERT) |
- for (size_t i = 0; i < blockSize; i++) |
+ for (size_t i = 0; i < m_blockSize; i++) |
m_buffer[i] = Item(0, 0); |
#endif |
} |
-CallbackStack::CallbackStack() : m_first(new Block(0)), m_last(m_first) |
+CallbackStack::CallbackStack(size_t reservedStackSize) |
+ : m_first(new Block(nullptr, reservedStackSize)) |
+ , m_last(m_first) |
{ |
} |
@@ -74,7 +96,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() * 2); |
return m_first->allocateEntry(); |
} |