Chromium Code Reviews| Index: Source/core/html/parser/HTMLParserScheduler.cpp |
| diff --git a/Source/core/html/parser/HTMLParserScheduler.cpp b/Source/core/html/parser/HTMLParserScheduler.cpp |
| index 68797fcc39e0e387c22f2ce6961b2d62e68c4eed..50f6ddd0ba73722bd7920317f2d595a8b2baeea5 100644 |
| --- a/Source/core/html/parser/HTMLParserScheduler.cpp |
| +++ b/Source/core/html/parser/HTMLParserScheduler.cpp |
| @@ -30,6 +30,8 @@ |
| #include "core/html/parser/HTMLDocumentParser.h" |
| #include "core/frame/FrameView.h" |
| #include "platform/scheduler/Scheduler.h" |
| +#include "public/platform/Platform.h" |
| +#include "public/platform/WebTraceLocation.h" |
| #include "wtf/CurrentTime.h" |
| namespace blink { |
| @@ -82,44 +84,36 @@ void SpeculationsPumpSession::addedElementTokens(size_t count) |
| HTMLParserScheduler::HTMLParserScheduler(HTMLDocumentParser* parser) |
| : m_parser(parser) |
| - , m_continueNextChunkTimer(this, &HTMLParserScheduler::continueNextChunkTimerFired) |
| + , m_cancelableContinueParse(WTF::bind(&HTMLDocumentParser::resumeParsingAfterYield, m_parser)) |
| , m_isSuspendedWithActiveTimer(false) |
| { |
| } |
| HTMLParserScheduler::~HTMLParserScheduler() |
| { |
| - m_continueNextChunkTimer.stop(); |
| -} |
| - |
| -void HTMLParserScheduler::continueNextChunkTimerFired(Timer<HTMLParserScheduler>* timer) |
| -{ |
| - ASSERT_UNUSED(timer, timer == &m_continueNextChunkTimer); |
| - m_parser->resumeParsingAfterYield(); |
| } |
| void HTMLParserScheduler::scheduleForResume() |
| { |
| - ASSERT(!m_isSuspendedWithActiveTimer); |
| - m_continueNextChunkTimer.startOneShot(0, FROM_HERE); |
| + Platform::current()->scheduler()->postLoadingTask(WebTraceLocation(FROM_HERE), m_cancelableContinueParse.task()); |
| } |
| void HTMLParserScheduler::suspend() |
| { |
| ASSERT(!m_isSuspendedWithActiveTimer); |
| - if (!m_continueNextChunkTimer.isActive()) |
| + if (!m_cancelableContinueParse.isPending()) |
| return; |
| m_isSuspendedWithActiveTimer = true; |
| - m_continueNextChunkTimer.stop(); |
| + m_cancelableContinueParse.cancel(); |
| } |
| void HTMLParserScheduler::resume() |
| { |
| - ASSERT(!m_continueNextChunkTimer.isActive()); |
| + ASSERT(!m_cancelableContinueParse.isPending()); |
| if (!m_isSuspendedWithActiveTimer) |
| return; |
| m_isSuspendedWithActiveTimer = false; |
| - m_continueNextChunkTimer.startOneShot(0, FROM_HERE); |
| + Platform::current()->scheduler()->postLoadingTask(WebTraceLocation(FROM_HERE), m_cancelableContinueParse.task()); |
|
Sami
2015/01/26 17:18:34
I think it's a little unfortunate that we need to
alex clarke (OOO till 29th)
2015/01/26 17:31:35
If we do that we'll have the following nested thin
|
| } |
| inline bool HTMLParserScheduler::shouldYield(const SpeculationsPumpSession& session, bool startingScript) const |
| @@ -158,7 +152,7 @@ bool HTMLParserScheduler::yieldIfNeeded(const SpeculationsPumpSession& session, |
| void HTMLParserScheduler::forceResumeAfterYield() |
| { |
| - ASSERT(!m_continueNextChunkTimer.isActive()); |
| + ASSERT(!m_cancelableContinueParse.isPending()); |
| m_isSuspendedWithActiveTimer = true; |
| } |