5#ifndef V8_CODEGEN_COMPILER_H_
6#define V8_CODEGEN_COMPILER_H_
39class AlignedCachedData;
40class BackgroundCompileTask;
42class OptimizedCompilationInfo;
44class RuntimeCallStats;
46class TurbofanCompilationJob;
47class UnoptimizedCompilationInfo;
48class UnoptimizedCompilationJob;
49class UnoptimizedJSFrame;
50class WorkerThreadRuntimeCallStats;
52struct ScriptStreamingData;
55class MaglevCompilationJob;
86 ClearExceptionFlag flag,
89 CreateSourcePositions::kNo);
91 ClearExceptionFlag flag,
97 static bool CompileSharedWithBaseline(
Isolate* isolate,
99 ClearExceptionFlag flag,
101 static bool CompileBaseline(
Isolate* isolate,
103 ClearExceptionFlag flag,
106 static void CompileOptimized(
Isolate* isolate,
125 static bool CollectSourcePositions(
Isolate* isolate,
131 ClearExceptionFlag flag);
134 static void DisposeTurbofanCompilationJob(
Isolate* isolate,
142 static void FinalizeMaglevCompilationJob(maglev::MaglevCompilationJob* job,
146 static void DisposeMaglevCompilationJob(maglev::MaglevCompilationJob* job,
152 static void PostInstantiation(
Isolate* isolate,
173 ParsingWhileDebugging::kNo);
192 ValidateDynamicCompilationSource(
Isolate* isolate,
195 bool is_code_like =
false);
200 int parameters_end_pos);
213 GetSharedFunctionInfoForScriptWithExtension(
224 GetSharedFunctionInfoForScriptWithCachedData(
237 GetSharedFunctionInfoForScriptWithDeserializeTask(
247 GetSharedFunctionInfoForScriptWithCompileHints(
251 void* compile_hint_callback_data,
263 GetSharedFunctionInfoForStreamedScript(
270 template <
typename IsolateT>
274 static void LogFunctionCompilation(
Isolate* isolate,
282 static void InstallInterpreterTrampolineCopy(
314 case RETRY_ON_MAIN_THREAD:
467 State initial_state);
543 std::vector<FinalizeUnoptimizedCompilationData>;
549 std::unique_ptr<UnoptimizedCompilationJob>
job) {
554 std::unique_ptr<UnoptimizedCompilationJob>
job);
564 std::unique_ptr<UnoptimizedCompilationJob>
job_;
583 std::vector<DeferredFinalizationJobData>;
595 void* compile_hint_callback_data =
nullptr);
605 std::unique_ptr<Utf16CharacterStream> character_stream,
610 void RunOnMainThread(
Isolate* isolate);
621 void AbortFunction();
626 void ReportStatistics(
Isolate* isolate);
630 bool is_streaming_compilation()
const;
651 int total_preparse_skipped_ = 0;
660 void* compile_hint_callback_data_ =
nullptr;
667 std::unique_ptr<ScriptCompiler::ExternalSourceStream> source_stream,
680 std::unique_ptr<BackgroundCompileTask>
task;
686 std::unique_ptr<ScriptCompiler::CachedData> data);
701 bool ShouldMergeWithExistingScript()
const;
707 void MergeWithExistingScript();
716 return background_time_in_microseconds_;
725 int64_t background_time_in_microseconds_ = 0;
TimeDelta Elapsed() const
double InMillisecondsF() const
WorkerThreadRuntimeCallStats * worker_thread_runtime_call_stats_
IsCompiledScope is_compiled_scope_
std::unique_ptr< Utf16CharacterStream > character_stream_
void ClearFunctionJobPointer()
MaybeIndirectHandle< SharedFunctionInfo > outer_function_sfi_
ScriptCompiler::CompilationDetails * compilation_details_
UnoptimizedCompileFlags flags_
BackgroundCompileTask & operator=(const BackgroundCompileTask &)=delete
Isolate * isolate_for_local_isolate_
DeferredFinalizationJobDataList jobs_to_retry_finalization_on_main_thread_
UnoptimizedCompileState compile_state_
FinalizeUnoptimizedCompilationDataList finalize_unoptimized_compilation_data_
BackgroundCompileTask(const BackgroundCompileTask &)=delete
UnoptimizedCompileFlags flags() const
std::unique_ptr< PersistentHandles > persistent_handles_
IndirectHandle< Script > script_
base::SmallVector< v8::Isolate::UseCounterFeature, 8 > use_counts_
MaybeIndirectHandle< SharedFunctionInfo > input_shared_info_
CodeSerializer::OffThreadDeserializeData off_thread_data_
int64_t background_time_in_microseconds() const
BackgroundMergeTask background_merge_task_
AlignedCachedData cached_data_
Isolate * isolate_for_local_isolate_
CompilationHandleScope(Isolate *isolate, OptimizedCompilationInfo *info)
PersistentHandlesScope persistent_
OptimizedCompilationInfo * info_
V8_WARN_UNUSED_RESULT Status UpdateState(Status status, State next_state)
virtual ~CompilationJob()=default
CompilationJob(State initial_state)
DeferredFinalizationJobData(Isolate *isolate, DirectHandle< SharedFunctionInfo > function_handle, std::unique_ptr< UnoptimizedCompilationJob > job)
std::unique_ptr< UnoptimizedCompilationJob > job_
Handle< SharedFunctionInfo > function_handle_
UnoptimizedCompilationJob * job() const
Handle< SharedFunctionInfo > function_handle() const
base::TimeDelta time_taken_to_finalize() const
MaybeHandle< CoverageInfo > coverage_info_
MaybeDirectHandle< CoverageInfo > coverage_info() const
Handle< SharedFunctionInfo > function_handle_
Handle< SharedFunctionInfo > function_handle() const
FinalizeUnoptimizedCompilationData(Isolate *isolate, Handle< SharedFunctionInfo > function_handle, MaybeHandle< CoverageInfo > coverage_info, base::TimeDelta time_taken_to_execute, base::TimeDelta time_taken_to_finalize)
base::TimeDelta time_taken_to_finalize_
base::TimeDelta time_taken_to_execute() const
base::TimeDelta time_taken_to_execute_
const char * compiler_name() const
base::ElapsedTimer timer_
double prepare_in_ms() const
void RegisterWeakObjectsInOptimizedCode(Isolate *isolate, DirectHandle< NativeContext > context, DirectHandle< Code > code, GlobalHandleVector< Map > maps)
OptimizedCompilationJob(const char *compiler_name, State initial_state)
V8_WARN_UNUSED_RESULT base::TimeDelta ElapsedTime() const
base::TimeDelta time_taken_to_prepare_
GlobalHandleVector< Map > CollectRetainedMaps(Isolate *isolate, DirectHandle< Code > code)
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT Status FinalizeJob(Isolate *isolate)
double execute_in_ms() const
const char *const compiler_name_
virtual Status PrepareJobImpl(Isolate *isolate)=0
virtual Status FinalizeJobImpl(Isolate *isolate)=0
double finalize_in_ms() const
virtual Status ExecuteJobImpl(RuntimeCallStats *stats, LocalIsolate *local_heap)=0
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT Status PrepareJob(Isolate *isolate)
base::TimeDelta time_taken_to_execute_
V8_EXPORT_PRIVATE V8_WARN_UNUSED_RESULT Status ExecuteJob(RuntimeCallStats *stats, LocalIsolate *local_isolate=nullptr)
base::TimeDelta time_taken_to_finalize_
virtual int FinalizeOrder() const
OptimizedCompilationInfo *const compilation_info_
uint64_t trace_id() const
Status RetryOptimization(BailoutReason reason)
Status AbortOptimization(BailoutReason reason)
V8_EXPORT_PRIVATE TurbofanCompilationJob(Isolate *isolate, OptimizedCompilationInfo *compilation_info, State initial_state)
void RecordFunctionCompilation(LogEventListener::CodeTag code_type, Isolate *isolate) const
OptimizedCompilationInfo * compilation_info() const
void RecordCompilationStats(ConcurrencyMode mode, Isolate *isolate) const
Isolate * isolate() const
void RecordFunctionCompilation(LogEventListener::CodeTag code_type, Handle< SharedFunctionInfo > shared, Isolate *isolate) const
UnoptimizedCompilationInfo * compilation_info_
virtual Status FinalizeJobImpl(DirectHandle< SharedFunctionInfo > shared_info, LocalIsolate *isolate)=0
base::TimeDelta time_taken_to_execute() const
virtual Status ExecuteJobImpl()=0
ParseInfo * parse_info() const
base::TimeDelta time_taken_to_execute_
uintptr_t stack_limit() const
UnoptimizedCompilationJob(uintptr_t stack_limit, ParseInfo *parse_info, UnoptimizedCompilationInfo *compilation_info)
V8_WARN_UNUSED_RESULT Status FinalizeJob(DirectHandle< SharedFunctionInfo > shared_info, Isolate *isolate)
void RecordCompilationStats(Isolate *isolate) const
base::TimeDelta time_taken_to_finalize_
base::TimeDelta time_taken_to_finalize() const
UnoptimizedCompilationInfo * compilation_info() const
V8_WARN_UNUSED_RESULT Status ExecuteJob()
virtual Status FinalizeJobImpl(DirectHandle< SharedFunctionInfo > shared_info, Isolate *isolate)=0
AlignedCachedData * cached_data_
enum v8::internal::@1270::DeoptimizableCodeIterator::@67 state_
PersistentHandlesScope persistent_
static bool IsMaglevOsrEnabled()
static bool IsMaglevEnabled()
std::vector< DeferredFinalizationJobData > DeferredFinalizationJobDataList
V8_EXPORT_PRIVATE FlagValues v8_flags
std::vector< FinalizeUnoptimizedCompilationData > FinalizeUnoptimizedCompilationDataList
bool(*)(int, void *) CompileHintCallback
OptimizedCompilationInfo * info_
#define DCHECK_NOT_NULL(val)
#define V8_EXPORT_PRIVATE
ScriptStreamingData & operator=(const ScriptStreamingData &)=delete
std::unique_ptr< ScriptCompiler::ExternalSourceStream > source_stream
std::unique_ptr< BackgroundCompileTask > task
ScriptCompiler::StreamedSource::Encoding encoding
ScriptStreamingData(const ScriptStreamingData &)=delete
#define V8_WARN_UNUSED_RESULT