Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(568)

Unified Diff: third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp

Issue 2134323002: Remove threading primitives from ParseHTMLOnMainThread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove crossThreadBind from BackgroundHTMLParser Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
index 61170c3f92f950b69419e723d5824542fba9798a..84a1b7f011b5a67d57a2ced5a9a179e3fb78ae6c 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
@@ -403,7 +403,7 @@ void HTMLDocumentParser::discardSpeculationsAndResumeFrom(std::unique_ptr<Parsed
m_input.current().clear(); // FIXME: This should be passed in instead of cleared.
ASSERT(checkpoint->unparsedInput.isSafeToSendToAnotherThread());
- postTaskToLookaheadParser(crossThreadBind(&BackgroundHTMLParser::resumeFrom, m_backgroundParser, passed(std::move(checkpoint))));
+ postTaskToLookaheadParser(Asynchronous, &BackgroundHTMLParser::resumeFrom, m_backgroundParser, passed(std::move(checkpoint)));
}
size_t HTMLDocumentParser::processParsedChunkFromBackgroundParser(std::unique_ptr<ParsedChunk> popChunk)
@@ -425,7 +425,7 @@ size_t HTMLDocumentParser::processParsedChunkFromBackgroundParser(std::unique_pt
std::unique_ptr<CompactHTMLTokenStream> tokens = std::move(chunk->tokens);
size_t elementTokenCount = 0;
- postTaskToLookaheadParser(crossThreadBind(&BackgroundHTMLParser::startedChunkWithCheckpoint, m_backgroundParser, chunk->inputCheckpoint));
+ postTaskToLookaheadParser(Asynchronous, &BackgroundHTMLParser::startedChunkWithCheckpoint, m_backgroundParser, chunk->inputCheckpoint);
for (const auto& xssInfo : chunk->xssInfos) {
m_textPosition = xssInfo->m_textPosition;
@@ -556,7 +556,7 @@ void HTMLDocumentParser::forcePlaintextForTextDocument()
if (!m_haveBackgroundParser)
startBackgroundParser();
- postTaskToLookaheadParser(crossThreadBind(&BackgroundHTMLParser::forcePlaintextForTextDocument, m_backgroundParser));
+ postTaskToLookaheadParser(Asynchronous, &BackgroundHTMLParser::forcePlaintextForTextDocument, m_backgroundParser);
} else
m_tokenizer->setState(HTMLTokenizer::PLAINTEXTState);
}
@@ -732,14 +732,15 @@ void HTMLDocumentParser::startBackgroundParser()
}
ASSERT(config->xssAuditor->isSafeToSendToAnotherThread());
- postTaskToLookaheadParser(crossThreadBind(
+ postTaskToLookaheadParser(
+ Synchronous,
&BackgroundHTMLParser::start,
reference.release(),
passed(std::move(config)),
document()->url(),
passed(CachedDocumentParameters::create(document())),
MediaValuesCached::MediaValuesCachedData(*document()),
- passed(wrapUnique(m_loadingTaskRunner->clone()))), Synchronous);
+ passed(wrapUnique(m_loadingTaskRunner->clone())));
}
void HTMLDocumentParser::stopBackgroundParser()
@@ -751,7 +752,7 @@ void HTMLDocumentParser::stopBackgroundParser()
// Make this sync, as lsan triggers on some unittests if the task runner is
// used. Note that these lifetimes will be much more concrete if
// ParseHTMLOnMainThread lands (the lookahead parser will be a member).
- postTaskToLookaheadParser(crossThreadBind(&BackgroundHTMLParser::stop, m_backgroundParser), Synchronous);
+ postTaskToLookaheadParser(Synchronous, &BackgroundHTMLParser::stop, m_backgroundParser);
m_weakFactory.revokeAll();
}
@@ -859,7 +860,7 @@ void HTMLDocumentParser::finish()
if (m_haveBackgroundParser) {
if (!m_input.haveSeenEndOfFile())
m_input.closeWithoutMarkingEndOfFile();
- postTaskToLookaheadParser(crossThreadBind(&BackgroundHTMLParser::finish, m_backgroundParser));
+ postTaskToLookaheadParser(Asynchronous, &BackgroundHTMLParser::finish, m_backgroundParser);
return;
}
@@ -1025,7 +1026,7 @@ void HTMLDocumentParser::appendBytes(const char* data, size_t length)
memcpy(buffer->data(), data, length);
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.debug"), "HTMLDocumentParser::appendBytes", "size", (unsigned)length);
- postTaskToLookaheadParser(crossThreadBind(&BackgroundHTMLParser::appendRawBytesFromMainThread, m_backgroundParser, passed(std::move(buffer)), bytesReceivedTime));
+ postTaskToLookaheadParser(Asynchronous, &BackgroundHTMLParser::appendRawBytesFromMainThread, m_backgroundParser, passed(std::move(buffer)), bytesReceivedTime);
return;
}
@@ -1049,7 +1050,7 @@ void HTMLDocumentParser::flush()
return;
}
- postTaskToLookaheadParser(crossThreadBind(&BackgroundHTMLParser::flush, m_backgroundParser));
+ postTaskToLookaheadParser(Asynchronous, &BackgroundHTMLParser::flush, m_backgroundParser);
} else {
DecodedDataDocumentParser::flush();
}
@@ -1061,7 +1062,7 @@ void HTMLDocumentParser::setDecoder(std::unique_ptr<TextResourceDecoder> decoder
DecodedDataDocumentParser::setDecoder(std::move(decoder));
if (m_haveBackgroundParser)
- postTaskToLookaheadParser(crossThreadBind(&BackgroundHTMLParser::setDecoder, m_backgroundParser, passed(takeDecoder())));
+ postTaskToLookaheadParser(Asynchronous, &BackgroundHTMLParser::setDecoder, m_backgroundParser, passed(takeDecoder()));
}
void HTMLDocumentParser::documentElementAvailable()
@@ -1125,10 +1126,11 @@ void HTMLDocumentParser::evaluateAndPreloadScriptForDocumentWrite(const String&
}
}
-void HTMLDocumentParser::postTaskToLookaheadParser(std::unique_ptr<CrossThreadClosure> closure, LookaheadParserTaskSynchrony synchronyPolicy)
+template <typename FunctionType, typename... Ps>
+void HTMLDocumentParser::postTaskToLookaheadParser(LookaheadParserTaskSynchrony synchronyPolicy, FunctionType function, Ps&&... parameters)
{
if (!RuntimeEnabledFeatures::parseHTMLOnMainThreadEnabled()) {
- HTMLParserThread::shared()->postTask(std::move(closure));
+ HTMLParserThread::shared()->postTask(crossThreadBind(function, std::forward<Ps>(parameters)...));
return;
}
@@ -1136,10 +1138,10 @@ void HTMLDocumentParser::postTaskToLookaheadParser(std::unique_ptr<CrossThreadCl
// just post to the loading task runner.
switch (synchronyPolicy) {
case Synchronous:
- (*closure)();
+ (*WTF::bind(function, std::forward<Ps>(parameters)...))();
hiroshige 2016/07/12 05:33:12 Is this statement covered by tests?
Charlie Harrison 2016/07/12 12:18:36 Yes, ditto.
return;
case Asynchronous:
- m_loadingTaskRunner->postTask(BLINK_FROM_HERE, std::move(closure));
+ m_loadingTaskRunner->postTask(BLINK_FROM_HERE, WTF::bind(function, std::forward<Ps>(parameters)...));
return;
}
NOTREACHED();

Powered by Google App Engine
This is Rietveld 408576698