20 #ifndef BUILDCACHE_CACHE_STATS_HPP_
21 #define BUILDCACHE_CACHE_STATS_HPP_
30 int m_direct_miss_count{0};
31 int m_direct_hit_count{0};
32 int m_local_miss_count{0};
33 int m_local_hit_count{0};
34 int m_remote_hit_count{0};
35 int m_remote_miss_count{0};
38 bool from_file(
const std::string& path) noexcept;
39 bool from_json(cJSON
const* obj) noexcept;
40 bool to_json(cJSON* obj)
const noexcept;
41 bool to_file(
const std::string& path)
const noexcept;
44 m_direct_hit_count += other.m_direct_hit_count;
45 m_direct_miss_count += other.m_direct_miss_count;
46 m_local_hit_count += other.m_local_hit_count;
47 m_local_miss_count += other.m_local_miss_count;
48 m_remote_hit_count += other.m_remote_hit_count;
49 m_remote_miss_count += other.m_remote_miss_count;
53 double direct_hit_ratio()
const noexcept {
54 int total = m_direct_hit_count + m_direct_miss_count;
56 return (100.0 * m_direct_hit_count) / total;
62 double local_hit_ratio()
const noexcept {
63 int total = m_local_hit_count + m_local_miss_count;
65 return (100.0 * m_local_hit_count) / total;
71 double remote_hit_ratio()
const noexcept {
72 int total = m_remote_hit_count + m_remote_miss_count;
74 return (100.0 * m_remote_hit_count) / total;
83 return m_local_hit_count + m_remote_hit_count;
89 return m_local_miss_count - m_remote_hit_count;
92 double global_hit_ratio() const noexcept {
101 static cache_stats_t direct_hit() noexcept {
103 st.m_direct_hit_count = 1;
106 static cache_stats_t direct_miss() noexcept {
108 st.m_direct_miss_count = 1;
111 static cache_stats_t local_hit() noexcept {
113 st.m_local_hit_count = 1;
116 static cache_stats_t local_miss() noexcept {
118 st.m_local_miss_count = 1;
121 static cache_stats_t remote_miss() noexcept {
123 st.m_remote_miss_count = 1;
126 static cache_stats_t remote_hit() noexcept {
128 st.m_remote_hit_count = 1;
129 st.m_remote_miss_count = 0;
133 void dump(std::ostream& os,
const std::string& prefix)
const;