1 // Copyright 2020 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_BUILTINS_PROFILE_DATA_READER_H_ 6 #define V8_BUILTINS_PROFILE_DATA_READER_H_ 7 8 #include <cstddef> 9 #include <cstdint> 10 #include <vector> 11 12 namespace v8 { 13 namespace internal { 14 15 class ProfileDataFromFile { 16 public: 17 // A hash of the function's Graph before scheduling. Allows us to avoid using 18 // profiling data if the function has been changed. hash()19 int hash() const { return hash_; } 20 21 // Returns how many times the block with the given ID was executed during 22 // profiling. GetCounter(size_t block_id)23 uint32_t GetCounter(size_t block_id) const { 24 // The profile data is allowed to omit blocks which were never hit, so be 25 // careful to avoid out-of-bounds access. 26 return block_id < block_counts_by_id_.size() ? block_counts_by_id_[block_id] 27 : 0; 28 } 29 30 // Load basic block profiling data for the builtin with the given name, if 31 // such data exists. The returned vector is indexed by block ID, and its 32 // values are the number of times each block was executed while profiling. 33 static const ProfileDataFromFile* TryRead(const char* name); 34 35 protected: 36 int hash_ = 0; 37 38 // How many times each block was executed, indexed by block ID. This vector 39 // may be shorter than the total number of blocks; any omitted block should be 40 // treated as a zero. 41 std::vector<uint32_t> block_counts_by_id_; 42 }; 43 44 // The following strings can't be static members of ProfileDataFromFile until 45 // C++ 17; see https://stackoverflow.com/q/8016780/839379 . So for now we use a 46 // namespace. 47 namespace ProfileDataFromFileConstants { 48 49 // Any line in a v8.log beginning with this string represents a basic block 50 // counter. 51 static constexpr char kBlockCounterMarker[] = "block"; 52 53 // Any line in a v8.log beginning with this string represents the hash of the 54 // function Graph for a builtin. 55 static constexpr char kBuiltinHashMarker[] = "builtin_hash"; 56 57 } // namespace ProfileDataFromFileConstants 58 59 } // namespace internal 60 } // namespace v8 61 62 #endif // V8_BUILTINS_PROFILE_DATA_READER_H_ 63