| // Copyright 2016 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ |
| #define V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ |
| |
| #include "src/contexts.h" |
| #include "src/handles.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| class SharedFunctionInfo; |
| |
| class UnoptimizedCompileJob; |
| |
| class V8_EXPORT_PRIVATE CompilerDispatcherJob { |
| public: |
| enum class Type { kUnoptimizedCompile }; |
| |
| enum class Status { |
| kInitial, |
| kPrepared, |
| kCompiled, |
| kHasErrorsToReport, |
| kDone, |
| kFailed, |
| }; |
| |
| CompilerDispatcherJob(Type type) : type_(type), status_(Status::kInitial) {} |
| |
| virtual ~CompilerDispatcherJob() {} |
| |
| Type type() const { return type_; } |
| |
| // Returns the current status of the compile |
| Status status() const { return status_; } |
| |
| // Returns true if this CompilerDispatcherJob has finished (either with a |
| // success or a failure). |
| bool IsFinished() const { |
| return status() == Status::kDone || status() == Status::kFailed; |
| } |
| |
| // Returns true if this CompilerDispatcherJob has failed. |
| bool IsFailed() const { return status() == Status::kFailed; } |
| |
| // Return true if the next step can be run on any thread. |
| bool NextStepCanRunOnAnyThread() const { |
| return status() == Status::kPrepared; |
| } |
| |
| // Casts to implementations. |
| const UnoptimizedCompileJob* AsUnoptimizedCompileJob() const; |
| |
| // Transition from kInitial to kPrepared. Must only be invoked on the |
| // main thread. |
| virtual void PrepareOnMainThread(Isolate* isolate) = 0; |
| |
| // Transition from kPrepared to kCompiled (or kReportErrors). |
| virtual void Compile(bool on_background_thread) = 0; |
| |
| // Transition from kCompiled to kDone (or kFailed). Must only be invoked on |
| // the main thread. |
| virtual void FinalizeOnMainThread(Isolate* isolate) = 0; |
| |
| // Transition from kReportErrors to kFailed. Must only be invoked on the main |
| // thread. |
| virtual void ReportErrorsOnMainThread(Isolate* isolate) = 0; |
| |
| // Free all resources. Must only be invoked on the main thread. |
| virtual void ResetOnMainThread(Isolate* isolate) = 0; |
| |
| // Estimate how long the next step will take using the tracer. |
| virtual double EstimateRuntimeOfNextStepInMs() const = 0; |
| |
| // Print short description of job. Must only be invoked on the main thread. |
| virtual void ShortPrintOnMainThread() = 0; |
| |
| protected: |
| void set_status(Status status) { status_ = status; } |
| |
| private: |
| Type type_; |
| Status status_; |
| }; |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_COMPILER_DISPATCHER_COMPILER_DISPATCHER_JOB_H_ |