5#ifndef V8_MAGLEV_MAGLEV_CONCURRENT_DISPATCHER_H_
6#define V8_MAGLEV_MAGLEV_CONCURRENT_DISPATCHER_H_
23class MaglevCompilationInfo;
33class ExportedMaglevCompilationInfo final {
35 explicit ExportedMaglevCompilationInfo(MaglevCompilationInfo* info)
39 void set_canonical_handles(
40 std::unique_ptr<CanonicalHandlesMap>&& canonical_handles);
43 MaglevCompilationInfo*
const info_;
47class MaglevCompilationJob final :
public OptimizedCompilationJob {
49 static std::unique_ptr<MaglevCompilationJob> New(Isolate* isolate,
50 Handle<JSFunction> function,
51 BytecodeOffset osr_offset);
52 ~MaglevCompilationJob()
override;
54 Status PrepareJobImpl(Isolate* isolate)
override;
55 Status ExecuteJobImpl(RuntimeCallStats* stats,
56 LocalIsolate* local_isolate)
override;
57 Status FinalizeJobImpl(Isolate* isolate)
override;
59 IndirectHandle<JSFunction> function()
const;
60 MaybeIndirectHandle<Code>
code()
const;
61 BytecodeOffset osr_offset()
const;
64 bool specialize_to_function_context()
const;
66 base::TimeDelta time_taken_to_prepare() {
return time_taken_to_prepare_; }
67 base::TimeDelta time_taken_to_execute() {
return time_taken_to_execute_; }
68 base::TimeDelta time_taken_to_finalize() {
return time_taken_to_finalize_; }
70 void RecordCompilationStats(Isolate* isolate)
const;
72 void DisposeOnMainThread(Isolate* isolate);
75 uint64_t trace_id()
const;
80 explicit MaglevCompilationJob(Isolate* isolate,
81 std::unique_ptr<MaglevCompilationInfo>&& info);
82 void BeginPhaseKind(
const char* name);
84 GlobalHandleVector<Map> CollectRetainedMaps(Isolate* isolate,
85 DirectHandle<Code> code);
87 MaglevCompilationInfo*
info()
const {
return info_.get(); }
89 const std::unique_ptr<MaglevCompilationInfo>
info_;
92 compiler::ZoneStats zone_stats_;
93 std::unique_ptr<MaglevPipelineStatistics> pipeline_statistics_;
103 using QueueT = LockedQueue<std::unique_ptr<MaglevCompilationJob>>;
106 explicit MaglevConcurrentDispatcher(Isolate* isolate);
107 ~MaglevConcurrentDispatcher();
110 void EnqueueJob(std::unique_ptr<MaglevCompilationJob>&& job);
113 void FinalizeFinishedJobs();
115 void AwaitCompileJobs();
117 void Flush(BlockingBehavior blocking_behavior);
119 bool is_enabled()
const {
return static_cast<bool>(job_handle_); }
123 std::unique_ptr<JobHandle> job_handle_;
124 QueueT incoming_queue_;
125 QueueT outgoing_queue_;
126 QueueT destruction_queue_;
Handle< SharedFunctionInfo > info
LiftoffBailoutReason bailout_reason_
OptimizedCompilationInfo * info_
#define V8_EXPORT_PRIVATE