Branch data Line data Source code
1 : : // Copyright (c) 2015-present 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_CORE_MEMUSAGE_H
6 : : #define BITCOIN_CORE_MEMUSAGE_H
7 : :
8 : : #include <primitives/transaction.h>
9 : : #include <primitives/block.h>
10 : : #include <memusage.h>
11 : :
12 : 24189806 : static inline size_t RecursiveDynamicUsage(const CScript& script) {
13 [ + + + - ]: 48378966 : return memusage::DynamicUsage(script);
14 : : }
15 : :
16 : : static inline size_t RecursiveDynamicUsage(const COutPoint& out) {
17 : : return 0;
18 : : }
19 : :
20 : 10730626 : static inline size_t RecursiveDynamicUsage(const CTxIn& in) {
21 [ + + - + ]: 11297227 : size_t mem = RecursiveDynamicUsage(in.scriptSig) + RecursiveDynamicUsage(in.prevout) + memusage::DynamicUsage(in.scriptWitness.stack);
22 [ + + ]: 33471696 : for (std::vector<std::vector<unsigned char> >::const_iterator it = in.scriptWitness.stack.begin(); it != in.scriptWitness.stack.end(); it++) {
23 [ - + ]: 45482140 : mem += memusage::DynamicUsage(*it);
24 : : }
25 : 10730626 : return mem;
26 : : }
27 : :
28 : 13456801 : static inline size_t RecursiveDynamicUsage(const CTxOut& out) {
29 [ + + + - ]: 26913585 : return RecursiveDynamicUsage(out.scriptPubKey);
30 : : }
31 : :
32 : 7613275 : static inline size_t RecursiveDynamicUsage(const CTransaction& tx) {
33 [ - + - + ]: 15226550 : size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout);
34 [ + + ]: 18343843 : for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) {
35 : 10730568 : mem += RecursiveDynamicUsage(*it);
36 : : }
37 [ + + ]: 21070047 : for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) {
38 [ + + ]: 13924285 : mem += RecursiveDynamicUsage(*it);
39 : : }
40 : 7613275 : return mem;
41 : : }
42 : :
43 : : static inline size_t RecursiveDynamicUsage(const CMutableTransaction& tx) {
44 : : size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout);
45 : : for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) {
46 : : mem += RecursiveDynamicUsage(*it);
47 : : }
48 : : for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) {
49 : : mem += RecursiveDynamicUsage(*it);
50 : : }
51 : : return mem;
52 : : }
53 : :
54 : 1768 : static inline size_t RecursiveDynamicUsage(const CBlock& block) {
55 [ - + ]: 1768 : size_t mem = memusage::DynamicUsage(block.vtx);
56 [ + + ]: 2319556 : for (const auto& tx : block.vtx) {
57 [ - + ]: 2317788 : mem += memusage::DynamicUsage(tx) + RecursiveDynamicUsage(*tx);
58 : : }
59 : 1768 : return mem;
60 : : }
61 : :
62 : : static inline size_t RecursiveDynamicUsage(const CBlockLocator& locator) {
63 : : return memusage::DynamicUsage(locator.vHave);
64 : : }
65 : :
66 : : template<typename X>
67 : 5282057 : static inline size_t RecursiveDynamicUsage(const std::shared_ptr<X>& p) {
68 [ + - ]: 5282057 : return p ? memusage::DynamicUsage(p) + RecursiveDynamicUsage(*p) : 0;
69 : : }
70 : :
71 : : #endif // BITCOIN_CORE_MEMUSAGE_H
|