1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- namespace ceres::internal {
- struct CallStatistics {
- CallStatistics() = default;
- double time{0.};
- int calls{0};
- };
- class ExecutionSummary {
- public:
- void IncrementTimeBy(const std::string& name, const double value) {
- std::lock_guard<std::mutex> l(mutex_);
- CallStatistics& call_stats = statistics_[name];
- call_stats.time += value;
- ++call_stats.calls;
- }
- const std::map<std::string, CallStatistics>& statistics() const {
- return statistics_;
- }
- private:
- std::mutex mutex_;
- std::map<std::string, CallStatistics> statistics_;
- };
- class ScopedExecutionTimer {
- public:
- ScopedExecutionTimer(std::string name, ExecutionSummary* summary)
- : start_time_(WallTimeInSeconds()),
- name_(std::move(name)),
- summary_(summary) {}
- ~ScopedExecutionTimer() {
- summary_->IncrementTimeBy(name_, WallTimeInSeconds() - start_time_);
- }
- private:
- const double start_time_;
- const std::string name_;
- ExecutionSummary* summary_;
- };
- }
|