1// Copyright 2021 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef V8_BASELINE_BASELINE_BATCH_COMPILER_H_ 6#define V8_BASELINE_BASELINE_BATCH_COMPILER_H_ 7 8#include <atomic> 9 10#include "src/handles/global-handles.h" 11#include "src/handles/handles.h" 12 13namespace v8 { 14namespace internal { 15namespace baseline { 16 17class BaselineCompiler; 18class ConcurrentBaselineCompiler; 19 20class BaselineBatchCompiler { 21 public: 22 static const int kInitialQueueSize = 32; 23 24 explicit BaselineBatchCompiler(Isolate* isolate); 25 ~BaselineBatchCompiler(); 26 // Enqueues SharedFunctionInfo of |function| for compilation. 27 void EnqueueFunction(Handle<JSFunction> function); 28 29 void set_enabled(bool enabled) { enabled_ = enabled; } 30 bool is_enabled() { return enabled_; } 31 32 void InstallBatch(); 33 34 private: 35 // Ensure there is enough space in the compilation queue to enqueue another 36 // function, growing the queue if necessary. 37 void EnsureQueueCapacity(); 38 39 // Enqueues SharedFunctionInfo. 40 void Enqueue(Handle<SharedFunctionInfo> shared); 41 42 // Returns true if the current batch exceeds the threshold and should be 43 // compiled. 44 bool ShouldCompileBatch() const; 45 46 // Compiles the current batch. 47 void CompileBatch(Handle<JSFunction> function); 48 49 // Resets the current batch. 50 void ClearBatch(); 51 52 // Tries to compile |maybe_sfi|. Returns false if compilation was not possible 53 // (e.g. bytecode was fushed, weak handle no longer valid, ...). 54 bool MaybeCompileFunction(MaybeObject maybe_sfi); 55 56 Isolate* isolate_; 57 58 // Global handle to shared function infos enqueued for compilation in the 59 // current batch. 60 Handle<WeakFixedArray> compilation_queue_; 61 62 // Last index set in compilation_queue_; 63 int last_index_; 64 65 // Estimated insturction size of current batch. 66 int estimated_instruction_size_; 67 68 // Flag indicating whether batch compilation is enabled. 69 // Batch compilation can be dynamically disabled e.g. when creating snapshots. 70 bool enabled_; 71 72 // Handle to the background compilation jobs. 73 std::unique_ptr<ConcurrentBaselineCompiler> concurrent_compiler_; 74}; 75 76} // namespace baseline 77} // namespace internal 78} // namespace v8 79 80#endif // V8_BASELINE_BASELINE_BATCH_COMPILER_H_ 81