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