1 // Copyright 2014 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_DIAGNOSTICS_COMPILATION_STATISTICS_H_ 6 #define V8_DIAGNOSTICS_COMPILATION_STATISTICS_H_ 7 8 #include <map> 9 #include <string> 10 11 #include "src/base/platform/time.h" 12 #include "src/utils/allocation.h" 13 14 namespace v8 { 15 namespace internal { 16 17 class OptimizedCompilationInfo; 18 class CompilationStatistics; 19 20 struct AsPrintableStatistics { 21 const CompilationStatistics& s; 22 const bool machine_output; 23 }; 24 25 class CompilationStatistics final : public Malloced { 26 public: 27 CompilationStatistics() = default; 28 29 class BasicStats { 30 public: BasicStats()31 BasicStats() 32 : total_allocated_bytes_(0), 33 max_allocated_bytes_(0), 34 absolute_max_allocated_bytes_(0) {} 35 36 void Accumulate(const BasicStats& stats); 37 38 base::TimeDelta delta_; 39 size_t total_allocated_bytes_; 40 size_t max_allocated_bytes_; 41 size_t absolute_max_allocated_bytes_; 42 std::string function_name_; 43 }; 44 45 void RecordPhaseStats(const char* phase_kind_name, const char* phase_name, 46 const BasicStats& stats); 47 48 void RecordPhaseKindStats(const char* phase_kind_name, 49 const BasicStats& stats); 50 51 void RecordTotalStats(const BasicStats& stats); 52 53 private: 54 class TotalStats : public BasicStats { 55 public: TotalStats()56 TotalStats() : source_size_(0) {} 57 uint64_t source_size_; 58 }; 59 60 class OrderedStats : public BasicStats { 61 public: OrderedStats(size_t insert_order)62 explicit OrderedStats(size_t insert_order) : insert_order_(insert_order) {} 63 size_t insert_order_; 64 }; 65 66 class PhaseStats : public OrderedStats { 67 public: PhaseStats(size_t insert_order,const char * phase_kind_name)68 PhaseStats(size_t insert_order, const char* phase_kind_name) 69 : OrderedStats(insert_order), phase_kind_name_(phase_kind_name) {} 70 std::string phase_kind_name_; 71 }; 72 73 friend std::ostream& operator<<(std::ostream& os, 74 const AsPrintableStatistics& s); 75 76 using PhaseKindStats = OrderedStats; 77 using PhaseKindMap = std::map<std::string, PhaseKindStats>; 78 using PhaseMap = std::map<std::string, PhaseStats>; 79 80 TotalStats total_stats_; 81 PhaseKindMap phase_kind_map_; 82 PhaseMap phase_map_; 83 base::Mutex record_mutex_; 84 85 DISALLOW_COPY_AND_ASSIGN(CompilationStatistics); 86 }; 87 88 std::ostream& operator<<(std::ostream& os, const AsPrintableStatistics& s); 89 90 } // namespace internal 91 } // namespace v8 92 93 #endif // V8_DIAGNOSTICS_COMPILATION_STATISTICS_H_ 94