summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/html/parser/HTMLParserScheduler.h
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-24 11:24:40 +0100
committerBen Murdoch <benm@google.com>2011-06-02 09:53:15 +0100
commit81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch)
tree7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebCore/html/parser/HTMLParserScheduler.h
parent94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff)
downloadexternal_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz
external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebCore/html/parser/HTMLParserScheduler.h')
-rw-r--r--Source/WebCore/html/parser/HTMLParserScheduler.h39
1 files changed, 20 insertions, 19 deletions
diff --git a/Source/WebCore/html/parser/HTMLParserScheduler.h b/Source/WebCore/html/parser/HTMLParserScheduler.h
index c415c62..9aa12eb 100644
--- a/Source/WebCore/html/parser/HTMLParserScheduler.h
+++ b/Source/WebCore/html/parser/HTMLParserScheduler.h
@@ -26,6 +26,7 @@
#ifndef HTMLParserScheduler_h
#define HTMLParserScheduler_h
+#include "NestingLevelIncrementer.h"
#include "Timer.h"
#include <wtf/CurrentTime.h>
#include <wtf/PassOwnPtr.h>
@@ -34,6 +35,21 @@ namespace WebCore {
class HTMLDocumentParser;
+class PumpSession : public NestingLevelIncrementer {
+public:
+ PumpSession(unsigned& nestingLevel)
+ : NestingLevelIncrementer(nestingLevel)
+ , processedTokens(0)
+ , startTime(currentTime())
+ , needsYield(false)
+ {
+ }
+
+ int processedTokens;
+ double startTime;
+ bool needsYield;
+};
+
class HTMLParserScheduler {
WTF_MAKE_NONCOPYABLE(HTMLParserScheduler); WTF_MAKE_FAST_ALLOCATED;
public:
@@ -43,34 +59,19 @@ public:
}
~HTMLParserScheduler();
- struct PumpSession {
- PumpSession()
- : processedTokens(0)
- , startTime(currentTime())
- {
- }
-
- int processedTokens;
- double startTime;
- };
-
// Inline as this is called after every token in the parser.
- bool shouldContinueParsing(PumpSession& session)
+ void checkForYieldBeforeToken(PumpSession& session)
{
if (session.processedTokens > m_parserChunkSize) {
session.processedTokens = 0;
double elapsedTime = currentTime() - session.startTime;
- if (elapsedTime > m_parserTimeLimit) {
- // Schedule the parser to continue and yield from the parser.
- m_continueNextChunkTimer.startOneShot(0);
- return false;
- }
+ if (elapsedTime > m_parserTimeLimit)
+ session.needsYield = true;
}
-
++session.processedTokens;
- return true;
}
+ void scheduleForResume();
bool isScheduledForResume() const { return m_isSuspendedWithActiveTimer || m_continueNextChunkTimer.isActive(); }
void suspend();