| Index: third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp b/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp
|
| index 7adda766265691e9b4e2a725ed1e97bf9327faa6..77ac1d906a8710e3459074b6167e387535ea5d00 100644
|
| --- a/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp
|
| +++ b/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp
|
| @@ -4,12 +4,38 @@
|
|
|
| #include "core/html/parser/ParsedChunkQueue.h"
|
|
|
| +#include "platform/RuntimeEnabledFeatures.h"
|
| #include <algorithm>
|
| #include <memory>
|
|
|
| namespace blink {
|
|
|
| +namespace {
|
| +
|
| +// TODO(csharrison): Remove this temporary class when the ParseHTMLOnMainThread
|
| +// experiment ends.
|
| +class MaybeLocker {
|
| +public:
|
| + MaybeLocker(Mutex* mutex)
|
| + : m_mutex(mutex)
|
| + {
|
| + if (m_mutex)
|
| + m_mutex->lock();
|
| + }
|
| + ~MaybeLocker()
|
| + {
|
| + if (m_mutex)
|
| + m_mutex->unlock();
|
| + }
|
| +
|
| +private:
|
| + Mutex* m_mutex;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| ParsedChunkQueue::ParsedChunkQueue()
|
| + : m_mutex(RuntimeEnabledFeatures::parseHTMLOnMainThreadEnabled() ? nullptr : new Mutex)
|
| {
|
| }
|
|
|
| @@ -19,7 +45,7 @@ ParsedChunkQueue::~ParsedChunkQueue()
|
|
|
| bool ParsedChunkQueue::enqueue(std::unique_ptr<HTMLDocumentParser::ParsedChunk> chunk)
|
| {
|
| - MutexLocker locker(m_mutex);
|
| + MaybeLocker locker(m_mutex.get());
|
|
|
| m_pendingTokenCount += chunk->tokens->size();
|
| m_peakPendingTokenCount = std::max(m_peakPendingTokenCount, m_pendingTokenCount);
|
| @@ -33,7 +59,7 @@ bool ParsedChunkQueue::enqueue(std::unique_ptr<HTMLDocumentParser::ParsedChunk>
|
|
|
| void ParsedChunkQueue::clear()
|
| {
|
| - MutexLocker locker(m_mutex);
|
| + MaybeLocker locker(m_mutex.get());
|
|
|
| m_pendingTokenCount = 0;
|
| m_pendingChunks.clear();
|
| @@ -41,7 +67,7 @@ void ParsedChunkQueue::clear()
|
|
|
| void ParsedChunkQueue::takeAll(Vector<std::unique_ptr<HTMLDocumentParser::ParsedChunk>>& vector)
|
| {
|
| - MutexLocker locker(m_mutex);
|
| + MaybeLocker locker(m_mutex.get());
|
|
|
| ASSERT(vector.isEmpty());
|
| m_pendingChunks.swap(vector);
|
| @@ -49,13 +75,13 @@ void ParsedChunkQueue::takeAll(Vector<std::unique_ptr<HTMLDocumentParser::Parsed
|
|
|
| size_t ParsedChunkQueue::peakPendingChunkCount()
|
| {
|
| - MutexLocker locker(m_mutex);
|
| + MaybeLocker locker(m_mutex.get());
|
| return m_peakPendingChunkCount;
|
| }
|
|
|
| size_t ParsedChunkQueue::peakPendingTokenCount()
|
| {
|
| - MutexLocker locker(m_mutex);
|
| + MaybeLocker locker(m_mutex.get());
|
| return m_peakPendingTokenCount;
|
| }
|
|
|
|
|