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 : 35922616 : static inline size_t RecursiveDynamicUsage(const CScript& script) {
13 [ + + + - ]: 71844580 : return memusage::DynamicUsage(script);
14 : : }
15 : :
16 : : static inline size_t RecursiveDynamicUsage(const COutPoint& out) {
17 : : return 0;
18 : : }
19 : :
20 : 13967562 : static inline size_t RecursiveDynamicUsage(const CTxIn& in) {
21 [ + + + + ]: 15404721 : size_t mem = RecursiveDynamicUsage(in.scriptSig) + RecursiveDynamicUsage(in.prevout) + memusage::DynamicUsage(in.scriptWitness.stack);
22 [ + + ]: 37339406 : for (std::vector<std::vector<unsigned char> >::const_iterator it = in.scriptWitness.stack.begin(); it != in.scriptWitness.stack.end(); it++) {
23 [ + + ]: 28487239 : mem += memusage::DynamicUsage(*it);
24 : : }
25 : 13967562 : return mem;
26 : : }
27 : :
28 : 21952403 : static inline size_t RecursiveDynamicUsage(const CTxOut& out) {
29 [ + + + - ]: 43904771 : return RecursiveDynamicUsage(out.scriptPubKey);
30 : : }
31 : :
32 : 6283317 : static inline size_t RecursiveDynamicUsage(const CTransaction& tx) {
33 [ + + + + ]: 10050855 : size_t mem = memusage::DynamicUsage(tx.vin) + memusage::DynamicUsage(tx.vout);
34 [ + + ]: 20250789 : for (std::vector<CTxIn>::const_iterator it = tx.vin.begin(); it != tx.vin.end(); it++) {
35 : 13967472 : mem += RecursiveDynamicUsage(*it);
36 : : }
37 [ + + ]: 28235659 : for (std::vector<CTxOut>::const_iterator it = tx.vout.begin(); it != tx.vout.end(); it++) {
38 [ + + ]: 39172101 : mem += RecursiveDynamicUsage(*it);
39 : : }
40 : 6283317 : 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 : 2074 : static inline size_t RecursiveDynamicUsage(const CBlock& block) {
55 [ + + ]: 2074 : size_t mem = memusage::DynamicUsage(block.vtx);
56 [ + + ]: 2525726 : for (const auto& tx : block.vtx) {
57 [ - + ]: 2523652 : mem += memusage::DynamicUsage(tx) + RecursiveDynamicUsage(*tx);
58 : : }
59 : 2074 : 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 : 3752651 : static inline size_t RecursiveDynamicUsage(const std::shared_ptr<X>& p) {
68 [ + - ]: 3752651 : return p ? memusage::DynamicUsage(p) + RecursiveDynamicUsage(*p) : 0;
69 : : }
70 : :
71 : : #endif // BITCOIN_CORE_MEMUSAGE_H
|