diff --git a/a8/perfmonitor.cc b/a8/perfmonitor.cc index ef74c3a..a292a60 100644 --- a/a8/perfmonitor.cc +++ b/a8/perfmonitor.cc @@ -1,6 +1,8 @@ #include #include +#include + namespace a8 { @@ -10,10 +12,57 @@ namespace a8 void PerfMonitor::Init() { + mutex_ = std::make_shared(); } void PerfMonitor::UnInit() { } + long long PerfMonitor::AddV(const std::string key, long long val) + { + long long result = 0; + mutex_->lock(); + auto itr = dyn_hash_.find(key); + if (itr == dyn_hash_.end()) { + dyn_hash_[key] = val; + result = val; + } else { + itr->second = itr->second + val; + result = itr->second; + } + mutex_->unlock(); + return result; + } + + long long PerfMonitor::SubV(const std::string key, long long val) + { + return AddV(key, -val); + } + + void PerfMonitor::SetV(const std::string key, long long val) + { + mutex_->lock(); + dyn_hash_[key] = val; + mutex_->unlock(); + } + + long long PerfMonitor::GetV(const std::string key) + { + long long result = 0; + mutex_->lock(); + auto itr = dyn_hash_.find(key); + if (itr != dyn_hash_.end()) { + result = itr->second; + } + mutex_->unlock(); + return result; + } + + void PerfMonitor::Dump() + { + mutex_->lock(); + mutex_->unlock(); + } + } diff --git a/a8/perfmonitor.h b/a8/perfmonitor.h index 9d2db44..86ae61f 100644 --- a/a8/perfmonitor.h +++ b/a8/perfmonitor.h @@ -15,12 +15,21 @@ namespace a8 void Init(); void UnInit(); + long long AddV(const std::string key, long long val); + long long SubV(const std::string key, long long val); + void SetV(const std::string key, long long val); + long long GetV(const std::string key); + void Dump(); + public: long long send_eagain_times = 0; long long recv_eagain_times = 0; long long max_send_time = 0; long long max_recv_time = 0; + private: + std::shared_ptr mutex_; + std::map dyn_hash_; }; }