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

Side by Side Diff: Source/core/html/parser/BackgroundHTMLParser.cpp

Issue 133273007: Revert "Moved text decoding to the parser thread" (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 11 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google, Inc. All Rights Reserved. 2 * Copyright (C) 2013 Google, Inc. All Rights Reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 10 matching lines...) Expand all
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #include "config.h" 26 #include "config.h"
27 #include "core/html/parser/BackgroundHTMLParser.h" 27 #include "core/html/parser/BackgroundHTMLParser.h"
28 28
29 #include "core/html/parser/HTMLDocumentParser.h" 29 #include "core/html/parser/HTMLDocumentParser.h"
30 #include "core/html/parser/HTMLParserThread.h" 30 #include "core/html/parser/HTMLParserThread.h"
31 #include "core/html/parser/TextResourceDecoder.h"
32 #include "core/html/parser/XSSAuditor.h" 31 #include "core/html/parser/XSSAuditor.h"
33 #include "wtf/MainThread.h" 32 #include "wtf/MainThread.h"
34 #include "wtf/text/TextPosition.h" 33 #include "wtf/text/TextPosition.h"
35 34
36 namespace WebCore { 35 namespace WebCore {
37 36
38 // On a network with high latency and high bandwidth, using a device 37 // On a network with high latency and high bandwidth, using a device
39 // with a fast CPU, we could end up speculatively tokenizing 38 // with a fast CPU, we could end up speculatively tokenizing
40 // the whole document, well ahead of when the main-thread actually needs it. 39 // the whole document, well ahead of when the main-thread actually needs it.
41 // This is a waste of memory (and potentially time if the speculation fails). 40 // This is a waste of memory (and potentially time if the speculation fails).
(...skipping 28 matching lines...) Expand all
70 } 69 }
71 70
72 static void checkThatXSSInfosAreSafeToSendToAnotherThread(const XSSInfoStream& i nfos) 71 static void checkThatXSSInfosAreSafeToSendToAnotherThread(const XSSInfoStream& i nfos)
73 { 72 {
74 for (size_t i = 0; i < infos.size(); ++i) 73 for (size_t i = 0; i < infos.size(); ++i)
75 ASSERT(infos[i]->isSafeToSendToAnotherThread()); 74 ASSERT(infos[i]->isSafeToSendToAnotherThread());
76 } 75 }
77 76
78 #endif 77 #endif
79 78
80 void BackgroundHTMLParser::start(PassRefPtr<WeakReference<BackgroundHTMLParser> > reference, PassOwnPtr<Configuration> config)
81 {
82 new BackgroundHTMLParser(reference, config);
83 // Caller must free by calling stop().
84 }
85
86 BackgroundHTMLParser::BackgroundHTMLParser(PassRefPtr<WeakReference<BackgroundHT MLParser> > reference, PassOwnPtr<Configuration> config) 79 BackgroundHTMLParser::BackgroundHTMLParser(PassRefPtr<WeakReference<BackgroundHT MLParser> > reference, PassOwnPtr<Configuration> config)
87 : m_weakFactory(reference, this) 80 : m_weakFactory(reference, this)
88 , m_token(adoptPtr(new HTMLToken)) 81 , m_token(adoptPtr(new HTMLToken))
89 , m_tokenizer(HTMLTokenizer::create(config->options)) 82 , m_tokenizer(HTMLTokenizer::create(config->options))
90 , m_treeBuilderSimulator(config->options) 83 , m_treeBuilderSimulator(config->options)
91 , m_options(config->options) 84 , m_options(config->options)
92 , m_parser(config->parser) 85 , m_parser(config->parser)
93 , m_pendingTokens(adoptPtr(new CompactHTMLTokenStream)) 86 , m_pendingTokens(adoptPtr(new CompactHTMLTokenStream))
94 , m_xssAuditor(config->xssAuditor.release()) 87 , m_xssAuditor(config->xssAuditor.release())
95 , m_preloadScanner(config->preloadScanner.release()) 88 , m_preloadScanner(config->preloadScanner.release())
96 , m_decoder(config->decoder.release())
97 { 89 {
98 } 90 }
99 91
100 BackgroundHTMLParser::~BackgroundHTMLParser()
101 {
102 }
103
104 void BackgroundHTMLParser::append(const String& input) 92 void BackgroundHTMLParser::append(const String& input)
105 { 93 {
106 ASSERT(!m_input.current().isClosed()); 94 ASSERT(!m_input.current().isClosed());
107 m_input.append(input); 95 m_input.append(input);
108 pumpTokenizer(); 96 pumpTokenizer();
109 } 97 }
110 98
111 void BackgroundHTMLParser::appendBytes(PassOwnPtr<Vector<char> > buffer)
112 {
113 updateDocument(m_decoder->decode(buffer->data(), buffer->size()));
114 }
115
116 void BackgroundHTMLParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder)
117 {
118 m_decoder = decoder;
119 }
120
121 void BackgroundHTMLParser::flush()
122 {
123 updateDocument(m_decoder->flush());
124 }
125
126 void BackgroundHTMLParser::updateDocument(const String& decodedData)
127 {
128 DocumentEncodingData encodingData(*m_decoder.get());
129
130 if (encodingData != m_lastSeenEncodingData) {
131 m_lastSeenEncodingData = encodingData;
132
133 m_xssAuditor->setEncoding(encodingData.encoding());
134 callOnMainThread(bind(&HTMLDocumentParser::didReceiveEncodingDataFromBac kgroundParser, m_parser, encodingData));
135 }
136
137 if (decodedData.isEmpty())
138 return;
139
140 append(decodedData);
141 }
142
143 void BackgroundHTMLParser::resumeFrom(PassOwnPtr<Checkpoint> checkpoint) 99 void BackgroundHTMLParser::resumeFrom(PassOwnPtr<Checkpoint> checkpoint)
144 { 100 {
145 m_parser = checkpoint->parser; 101 m_parser = checkpoint->parser;
146 m_token = checkpoint->token.release(); 102 m_token = checkpoint->token.release();
147 m_tokenizer = checkpoint->tokenizer.release(); 103 m_tokenizer = checkpoint->tokenizer.release();
148 m_treeBuilderSimulator.setState(checkpoint->treeBuilderState); 104 m_treeBuilderSimulator.setState(checkpoint->treeBuilderState);
149 m_input.rewindTo(checkpoint->inputCheckpoint, checkpoint->unparsedInput); 105 m_input.rewindTo(checkpoint->inputCheckpoint, checkpoint->unparsedInput);
150 m_preloadScanner->rewindTo(checkpoint->preloadScannerCheckpoint); 106 m_preloadScanner->rewindTo(checkpoint->preloadScannerCheckpoint);
151 pumpTokenizer(); 107 pumpTokenizer();
152 } 108 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 chunk->treeBuilderState = m_treeBuilderSimulator.state(); 200 chunk->treeBuilderState = m_treeBuilderSimulator.state();
245 chunk->inputCheckpoint = m_input.createCheckpoint(m_pendingTokens->size()); 201 chunk->inputCheckpoint = m_input.createCheckpoint(m_pendingTokens->size());
246 chunk->preloadScannerCheckpoint = m_preloadScanner->createCheckpoint(); 202 chunk->preloadScannerCheckpoint = m_preloadScanner->createCheckpoint();
247 chunk->tokens = m_pendingTokens.release(); 203 chunk->tokens = m_pendingTokens.release();
248 callOnMainThread(bind(&HTMLDocumentParser::didReceiveParsedChunkFromBackgrou ndParser, m_parser, chunk.release())); 204 callOnMainThread(bind(&HTMLDocumentParser::didReceiveParsedChunkFromBackgrou ndParser, m_parser, chunk.release()));
249 205
250 m_pendingTokens = adoptPtr(new CompactHTMLTokenStream); 206 m_pendingTokens = adoptPtr(new CompactHTMLTokenStream);
251 } 207 }
252 208
253 } 209 }
OLDNEW
« no previous file with comments | « Source/core/html/parser/BackgroundHTMLParser.h ('k') | Source/core/html/parser/CSSPreloadScanner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698