Branch data Line data Source code
1 : : // Copyright (c) 2015-2018 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 : 20044843 : static inline size_t RecursiveDynamicUsage(const CScript& script) {
13 : 20044843 : return memusage::DynamicUsage(script);
14 : : }
15 : :
16 : 6734041 : static inline size_t RecursiveDynamicUsage(const COutPoint& out) {
17 : 6734041 : return 0;
18 : : }
19 : :
20 : 6734041 : static inline size_t RecursiveDynamicUsage(const CTxIn& in) {
21 : 6734041 : size_t mem = RecursiveDynamicUsage(in.scriptSig) + RecursiveDynamicUsage(in.prevout) + memusage::DynamicUsage(in.scriptWitness.stack);
22 [ + + ]: 24810010 : for (std::vector<std::vector<unsigned char> >::const_iterator it = in.scriptWitness.stack.begin(); it != in.scriptWitness.stack.end(); it++) {
23 : 18075969 : mem += memusage::DynamicUsage(*it);
24 : 18075969 : }
25 : 13468082 : return mem;
26 : 6734041 : }
27 : :
28 : 13309095 : static inline size_t RecursiveDynamicUsage(const CTxOut& out) {
29 : 13309095 : return RecursiveDynamicUsage(out.scriptPubKey);
30 : : }
31 : :
32 : 3633024 : static inline size_t RecursiveDynamicUsage(const CTransaction& tx) {
33 : 3633024 : size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout);
34 [ + + ]: 10366936 : for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) {
35 : 6733912 : mem += RecursiveDynamicUsage(*it);
36 : 6733912 : }
37 [ + + ]: 16942059 : for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) {
38 : 13309035 : mem += RecursiveDynamicUsage(*it);
39 : 13309035 : }
40 : 7266048 : return mem;
41 : 3633024 : }
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 : 1276 : static inline size_t RecursiveDynamicUsage(const CBlock& block) {
55 : 1276 : size_t mem = memusage::DynamicUsage(block.vtx);
56 [ + + ]: 1533704 : for (const auto& tx : block.vtx) {
57 : 1532428 : mem += memusage::DynamicUsage(tx) + RecursiveDynamicUsage(*tx);
58 : 1532428 : }
59 : 2552 : return mem;
60 : 1276 : }
61 : :
62 : : static inline size_t RecursiveDynamicUsage(const CBlockLocator& locator) {
63 : : return memusage::DynamicUsage(locator.vHave);
64 : : }
65 : :
66 : : template<typename X>
67 : 2098258 : static inline size_t RecursiveDynamicUsage(const std::shared_ptr<X>& p) {
68 [ + - ]: 2098258 : return p ? memusage::DynamicUsage(p) + RecursiveDynamicUsage(*p) : 0;
69 : : }
70 : :
71 : : #endif // BITCOIN_CORE_MEMUSAGE_H
|