| // Copyright 2019 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_CODEGEN_PENDING_OPTIMIZATION_TABLE_H_ |
| #define V8_CODEGEN_PENDING_OPTIMIZATION_TABLE_H_ |
| |
| #include "src/common/globals.h" |
| |
| namespace v8 { |
| namespace internal { |
| |
| // This class adds the functionality to properly test the optimized code. This |
| // is only for use in tests. All these functions should only be called when |
| // testing_d8_flag_for_tests is set. |
| class PendingOptimizationTable { |
| public: |
| // This function should be called before we mark the function for |
| // optimization. Calling this function ensures that |function| is compiled and |
| // has a feedback vector allocated. This also holds on to the bytecode |
| // strongly in pending optimization table preventing the bytecode to be |
| // flushed. |
| static void PreparedForOptimization(Isolate* isolate, |
| Handle<JSFunction> function, |
| bool allow_heuristic_optimization); |
| |
| // This function should be called when the function is marked for optimization |
| // via the intrinsics. This will update the state of the bytecode array in the |
| // pending optimization table, so that the entry can be removed once the |
| // function is optimized. If the function is already optimized it removes the |
| // entry from the table. |
| static void MarkedForOptimization(Isolate* isolate, |
| Handle<JSFunction> function); |
| |
| // This function should be called once the function is optimized. If there is |
| // an entry in the pending optimization table and it is marked for removal |
| // then this function removes the entry from pending optimization table. |
| static void FunctionWasOptimized(Isolate* isolate, |
| Handle<JSFunction> function); |
| |
| // This function returns whether a heuristic is allowed to trigger |
| // optimization the function. This mechanism is used in tests to prevent |
| // heuristics from interfering with manually triggered optimization. |
| static bool IsHeuristicOptimizationAllowed(Isolate* isolate, |
| JSFunction function); |
| }; |
| |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_CODEGEN_PENDING_OPTIMIZATION_TABLE_H_ |