Overte C++ Documentation
StatTracker.h
1 //
2 // Created by Ryan Huffman on 2016-12-14
3 // Copyright 2013-2016 High Fidelity, Inc.
4 //
5 // Distributed under the Apache License, Version 2.0.
6 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
7 //
8 
9 #pragma once
10 
11 #include <QtCore/QString>
12 #include <QtCore/QVariant>
13 #include <QtCore/QSet>
14 #include <QtCore/QVariantMap>
15 
16 #include <mutex>
17 
18 #include "DependencyManager.h"
19 #include "Trace.h"
20 
21 using EditStatFunction = std::function<QVariant(QVariant currentValue)>;
22 
23 class StatTracker : public Dependency {
24 public:
25  StatTracker();
26  QVariant getStat(const QString& name);
27  void setStat(const QString& name, int64_t value);
28  void updateStat(const QString& name, int64_t mod);
29  void incrementStat(const QString& name);
30  void decrementStat(const QString& name);
31 private:
32  using Mutex = std::mutex;
33  using Lock = std::lock_guard<Mutex>;
34  Mutex _statsLock;
35  QHash<QString, int64_t> _stats;
36 };
37 
38 class CounterStat {
39 public:
40  CounterStat(QString name) : _name(name) {
41  DependencyManager::get<StatTracker>()->incrementStat(_name);
42  }
43  ~CounterStat() {
44  DependencyManager::get<StatTracker>()->decrementStat(_name);
45  }
46 private:
47  QString _name;
48 };