OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ | 5 #ifndef V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ |
6 #define V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ | 6 #define V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 | 9 |
10 #include "src/base/macros.h" | 10 #include "src/base/macros.h" |
11 #include "src/globals.h" | 11 #include "src/globals.h" |
12 #include "src/handles.h" | 12 #include "src/handles.h" |
13 #include "testing/gtest/include/gtest/gtest_prod.h" | 13 #include "testing/gtest/include/gtest/gtest_prod.h" |
14 | 14 |
15 namespace v8 { | 15 namespace v8 { |
16 namespace internal { | 16 namespace internal { |
17 | 17 |
| 18 class AstValueFactory; |
18 class CompilerDispatcherTracer; | 19 class CompilerDispatcherTracer; |
19 class CompilationInfo; | 20 class CompilationInfo; |
20 class CompilationJob; | 21 class CompilationJob; |
| 22 class FunctionLiteral; |
21 class Isolate; | 23 class Isolate; |
22 class ParseInfo; | 24 class ParseInfo; |
23 class Parser; | 25 class Parser; |
24 class SharedFunctionInfo; | 26 class SharedFunctionInfo; |
25 class String; | 27 class String; |
26 class UnicodeCache; | 28 class UnicodeCache; |
27 class Utf16CharacterStream; | 29 class Utf16CharacterStream; |
28 class Zone; | 30 class Zone; |
29 | 31 |
30 enum class CompileJobStatus { | 32 enum class CompileJobStatus { |
31 kInitial, | 33 kInitial, |
32 kReadyToParse, | 34 kReadyToParse, |
33 kParsed, | 35 kParsed, |
34 kReadyToAnalyse, | 36 kReadyToAnalyze, |
| 37 kAnalyzed, |
35 kReadyToCompile, | 38 kReadyToCompile, |
36 kCompiled, | 39 kCompiled, |
37 kFailed, | 40 kFailed, |
38 kDone, | 41 kDone, |
39 }; | 42 }; |
40 | 43 |
41 class V8_EXPORT_PRIVATE CompilerDispatcherJob { | 44 class V8_EXPORT_PRIVATE CompilerDispatcherJob { |
42 public: | 45 public: |
| 46 // Creates a CompilerDispatcherJob in the initial state. |
43 CompilerDispatcherJob(Isolate* isolate, CompilerDispatcherTracer* tracer, | 47 CompilerDispatcherJob(Isolate* isolate, CompilerDispatcherTracer* tracer, |
44 Handle<SharedFunctionInfo> shared, | 48 Handle<SharedFunctionInfo> shared, |
45 size_t max_stack_size); | 49 size_t max_stack_size); |
| 50 // Creates a CompilerDispatcherJob in the analyzed state. |
| 51 CompilerDispatcherJob(Isolate* isolate, CompilerDispatcherTracer* tracer, |
| 52 Handle<SharedFunctionInfo> shared, |
| 53 FunctionLiteral* literal, |
| 54 AstValueFactory* ast_value_factory, |
| 55 size_t max_stack_size); |
46 ~CompilerDispatcherJob(); | 56 ~CompilerDispatcherJob(); |
47 | 57 |
48 CompileJobStatus status() const { return status_; } | 58 CompileJobStatus status() const { return status_; } |
49 bool can_parse_on_background_thread() const { | 59 bool can_parse_on_background_thread() const { |
50 return can_parse_on_background_thread_; | 60 return can_parse_on_background_thread_; |
51 } | 61 } |
52 // Should only be called after kReadyToCompile. | 62 // Should only be called after kReadyToCompile. |
53 bool can_compile_on_background_thread() const { | 63 bool can_compile_on_background_thread() const { |
54 DCHECK(compile_job_.get()); | 64 DCHECK(compile_job_.get()); |
55 return can_compile_on_background_thread_; | 65 return can_compile_on_background_thread_; |
56 } | 66 } |
57 | 67 |
58 // Returns true if this CompilerDispatcherJob was created for the given | 68 // Returns true if this CompilerDispatcherJob was created for the given |
59 // function. | 69 // function. |
60 bool IsAssociatedWith(Handle<SharedFunctionInfo> shared) const; | 70 bool IsAssociatedWith(Handle<SharedFunctionInfo> shared) const; |
61 | 71 |
62 // Transition from kInitial to kReadyToParse. | 72 // Transition from kInitial to kReadyToParse. |
63 void PrepareToParseOnMainThread(); | 73 void PrepareToParseOnMainThread(); |
64 | 74 |
65 // Transition from kReadyToParse to kParsed. | 75 // Transition from kReadyToParse to kParsed. |
66 void Parse(); | 76 void Parse(); |
67 | 77 |
68 // Transition from kParsed to kReadyToAnalyse (or kFailed). Returns false | 78 // Transition from kParsed to kReadyToAnalyze (or kFailed). Returns false |
69 // when transitioning to kFailed. In that case, an exception is pending. | 79 // when transitioning to kFailed. In that case, an exception is pending. |
70 bool FinalizeParsingOnMainThread(); | 80 bool FinalizeParsingOnMainThread(); |
71 | 81 |
72 // Transition from kReadyToAnalyse to kReadyToCompile (or kFailed). Returns | 82 // Transition from kReadyToAnalyze to kAnalyzed (or kFailed). Returns |
| 83 // false when transitioning to kFailed. In that case, an exception is pending. |
| 84 bool AnalyzeOnMainThread(); |
| 85 |
| 86 // Transition from kAnalyzed to kReadyToCompile (or kFailed). Returns |
73 // false when transitioning to kFailed. In that case, an exception is pending. | 87 // false when transitioning to kFailed. In that case, an exception is pending. |
74 bool PrepareToCompileOnMainThread(); | 88 bool PrepareToCompileOnMainThread(); |
75 | 89 |
76 // Transition from kReadyToCompile to kCompiled. | 90 // Transition from kReadyToCompile to kCompiled. |
77 void Compile(); | 91 void Compile(); |
78 | 92 |
79 // Transition from kCompiled to kDone (or kFailed). Returns false when | 93 // Transition from kCompiled to kDone (or kFailed). Returns false when |
80 // transitioning to kFailed. In that case, an exception is pending. | 94 // transitioning to kFailed. In that case, an exception is pending. |
81 bool FinalizeCompilingOnMainThread(); | 95 bool FinalizeCompilingOnMainThread(); |
82 | 96 |
83 // Transition from any state to kInitial and free all resources. | 97 // Transition from any state to kInitial and free all resources. |
84 void ResetOnMainThread(); | 98 void ResetOnMainThread(); |
85 | 99 |
86 // Estimate how long the next step will take using the tracer. | 100 // Estimate how long the next step will take using the tracer. |
87 double EstimateRuntimeOfNextStepInMs() const; | 101 double EstimateRuntimeOfNextStepInMs() const; |
88 | 102 |
89 // Even though the name does not imply this, ShortPrint() must only be invoked | 103 // Even though the name does not imply this, ShortPrint() must only be invoked |
90 // on the main thread. | 104 // on the main thread. |
91 void ShortPrint(); | 105 void ShortPrint(); |
92 | 106 |
93 private: | 107 private: |
94 FRIEND_TEST(CompilerDispatcherJobTest, ScopeChain); | 108 FRIEND_TEST(CompilerDispatcherJobTest, ScopeChain); |
95 | 109 |
96 CompileJobStatus status_ = CompileJobStatus::kInitial; | 110 CompileJobStatus status_; |
97 Isolate* isolate_; | 111 Isolate* isolate_; |
98 CompilerDispatcherTracer* tracer_; | 112 CompilerDispatcherTracer* tracer_; |
99 Handle<SharedFunctionInfo> shared_; // Global handle. | 113 Handle<SharedFunctionInfo> shared_; // Global handle. |
100 Handle<String> source_; // Global handle. | 114 Handle<String> source_; // Global handle. |
101 size_t max_stack_size_; | 115 size_t max_stack_size_; |
102 | 116 |
103 // Members required for parsing. | 117 // Members required for parsing. |
104 std::unique_ptr<UnicodeCache> unicode_cache_; | 118 std::unique_ptr<UnicodeCache> unicode_cache_; |
105 std::unique_ptr<Zone> zone_; | 119 std::unique_ptr<Zone> zone_; |
106 std::unique_ptr<Utf16CharacterStream> character_stream_; | 120 std::unique_ptr<Utf16CharacterStream> character_stream_; |
(...skipping 10 matching lines...) Loading... |
117 | 131 |
118 bool trace_compiler_dispatcher_jobs_; | 132 bool trace_compiler_dispatcher_jobs_; |
119 | 133 |
120 DISALLOW_COPY_AND_ASSIGN(CompilerDispatcherJob); | 134 DISALLOW_COPY_AND_ASSIGN(CompilerDispatcherJob); |
121 }; | 135 }; |
122 | 136 |
123 } // namespace internal | 137 } // namespace internal |
124 } // namespace v8 | 138 } // namespace v8 |
125 | 139 |
126 #endif // V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ | 140 #endif // V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ |
OLD | NEW |