Line data Source code
1 : // Copyright 2014 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #ifndef V8_BACKGROUND_PARSING_TASK_H_
6 : #define V8_BACKGROUND_PARSING_TASK_H_
7 :
8 : #include <memory>
9 :
10 : #include "include/v8.h"
11 : #include "src/base/platform/platform.h"
12 : #include "src/base/platform/semaphore.h"
13 : #include "src/parsing/parse-info.h"
14 : #include "src/unicode-cache.h"
15 :
16 : namespace v8 {
17 : namespace internal {
18 :
19 : class Parser;
20 : class ScriptData;
21 :
22 : // Internal representation of v8::ScriptCompiler::StreamedSource. Contains all
23 : // data which needs to be transmitted between threads for background parsing,
24 : // finalizing it on the main thread, and compiling on the main thread.
25 264 : struct StreamedSource {
26 : StreamedSource(ScriptCompiler::ExternalSourceStream* source_stream,
27 : ScriptCompiler::StreamedSource::Encoding encoding)
28 132 : : source_stream(source_stream), encoding(encoding) {}
29 :
30 : void Release();
31 :
32 : // Internal implementation of v8::ScriptCompiler::StreamedSource.
33 : std::unique_ptr<ScriptCompiler::ExternalSourceStream> source_stream;
34 : ScriptCompiler::StreamedSource::Encoding encoding;
35 : std::unique_ptr<ScriptCompiler::CachedData> cached_data;
36 :
37 : // Data needed for parsing, and data needed to to be passed between thread
38 : // between parsing and compilation. These need to be initialized before the
39 : // compilation starts.
40 : UnicodeCache unicode_cache;
41 : std::unique_ptr<ParseInfo> info;
42 : std::unique_ptr<Parser> parser;
43 :
44 : // Prevent copying.
45 : StreamedSource(const StreamedSource&) = delete;
46 : StreamedSource& operator=(const StreamedSource&) = delete;
47 : };
48 :
49 :
50 264 : class BackgroundParsingTask : public ScriptCompiler::ScriptStreamingTask {
51 : public:
52 : BackgroundParsingTask(StreamedSource* source,
53 : ScriptCompiler::CompileOptions options, int stack_size,
54 : Isolate* isolate);
55 :
56 : virtual void Run();
57 :
58 : private:
59 : StreamedSource* source_; // Not owned.
60 : int stack_size_;
61 : ScriptData* script_data_;
62 : };
63 : } // namespace internal
64 : } // namespace v8
65 :
66 : #endif // V8_BACKGROUND_PARSING_TASK_H_
|