Skip to content
Bitcoin Roots

v30.3-roots.1 · Commit 2: [PATCH 02/68] feat(runtime): preserve Roots operator controls on Core 30.3

src/stats/stats.h

Before: /dev/null · After: src/stats/stats.h

File metadata
new file mode 100644
index 0000000000000000000000000000000000000000..7444da59f301e96065a27d6e584cfad436667edc

Download original patch · Release notes

Diff rows 1–77 of 77. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. Before is on the left; after is on the right. Unified view fits narrow screens more easily.

src/stats/stats.h ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Copyright (c) 2016 The Bitcoin Core developers
2
+ // Distributed under the MIT software license, see the accompanying
3
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
+
5
+ #ifndef BITCOIN_STATS_STATS_H
6
+ #define BITCOIN_STATS_STATS_H
7
+
8
+ #include <sync.h>
9
+
10
+ #include <atomic>
11
+ #include <stdlib.h>
12
+ #include <vector>
13
+
14
+ #include <boost/signals2/signal.hpp>
15
+
16
+ struct CStatsMempoolSample {
17
+ uint32_t m_time_delta; //use 32bit time delta to save memory
18
+ int64_t m_tx_count; //transaction count
19
+ int64_t m_dyn_mem_usage; //dynamic mempool usage
20
+ int64_t m_min_fee_per_k; //min fee per Kb
21
+ };
22
+
23
+ typedef std::vector<struct CStatsMempoolSample> mempoolSamples_t;
24
+
25
+ // simple mempool stats container
26
+ class CStatsMempool
27
+ {
28
+ public:
29
+ uint64_t m_start_time; //start time of the container
30
+ mempoolSamples_t m_samples;
31
+ uint64_t m_cleanup_counter; //internal counter to trogger cleanups
32
+
33
+ CStatsMempool()
34
+ {
35
+ m_start_time = 0;
36
+ m_cleanup_counter = 0;
37
+ }
38
+ };
39
+
40
+ // Class that manages various types of statistics and its memory consumption
41
+ class CStats
42
+ {
43
+ private:
44
+ static size_t maxStatsMemory; //maximum amount of memory to use for the stats
45
+
46
+ static CStats* m_shared_instance;
47
+ mutable RecursiveMutex cs_stats;
48
+
49
+ CStatsMempool m_mempool_stats; //mempool stats container
50
+
51
+ public:
52
+ static const size_t DEFAULT_MAX_STATS_MEMORY; //default maximum of memory to use
53
+ static const bool DEFAULT_STATISTICS_ENABLED; //default value for enabling statistics
54
+
55
+ static std::atomic<bool> m_stats_enabled; //if enabled, stats will be collected
56
+ static CStats* DefaultStats(); //shared instance
57
+
58
+ /* signals */
59
+ boost::signals2::signal<void(void)> MempoolStatsDidChange; //mempool stats update signal
60
+
61
+ /* add a mempool stats sample */
62
+ void addMempoolSample(int64_t txcount, int64_t dynUsage, int64_t currentMinRelayFee);
63
+
64
+ /* get all mempool samples in range */
65
+ mempoolSamples_t mempoolGetValuesInRange(uint64_t& fromTime, uint64_t& toTime);
66
+
67
+ /* set the target for the maximum memory consumption (in bytes) */
68
+ void setMaxMemoryUsageTarget(size_t maxMem);
69
+
70
+ /* register the statistics module help strings */
71
+ static void AddStatsOptions();
72
+
73
+ /* access the parameters and map it to the internal model */
74
+ static bool parameterInteraction();
75
+ };
76
+
77
+ #endif // BITCOIN_STATS_STATS_H