LCOV - code coverage report
Current view: top level - src/node - caches.cpp (source / functions) Hit Total Coverage
Test: test_dash_coverage.info Lines: 21 26 80.8 %
Date: 2026-06-25 07:23:51 Functions: 1 1 100.0 %

          Line data    Source code
       1             : // Copyright (c) 2021 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             : #include <node/caches.h>
       6             : 
       7             : #include <index/addressindex.h>
       8             : #include <index/spentindex.h>
       9             : #include <index/timestampindex.h>
      10             : #include <index/txindex.h>
      11             : #include <txdb.h>
      12             : #include <util/system.h>
      13             : 
      14             : namespace node {
      15         184 : CacheSizes CalculateCacheSizes(const ArgsManager& args, size_t n_indexes)
      16             : {
      17         184 :     int64_t nTotalCache = (args.GetIntArg("-dbcache", nDefaultDbCache) << 20);
      18         184 :     nTotalCache = std::max(nTotalCache, nMinDbCache << 20); // total cache cannot be less than nMinDbCache
      19         184 :     nTotalCache = std::min(nTotalCache, nMaxDbCache << 20); // total cache cannot be greater than nMaxDbcache
      20             :     CacheSizes sizes;
      21         184 :     sizes.block_tree_db = std::min(nTotalCache / 8, nMaxBlockDBCache << 20);
      22         184 :     nTotalCache -= sizes.block_tree_db;
      23         184 :     sizes.tx_index = std::min(nTotalCache / 8, args.GetBoolArg("-txindex", DEFAULT_TXINDEX) ? nMaxTxIndexCache << 20 : 0);
      24         184 :     nTotalCache -= sizes.tx_index;
      25         184 :     sizes.address_index = std::min(nTotalCache / 8, args.GetBoolArg("-addressindex", DEFAULT_ADDRESSINDEX) ? int64_t(256 << 20) : int64_t(0));
      26         184 :     nTotalCache -= sizes.address_index;
      27         184 :     sizes.timestamp_index = std::min(nTotalCache / 64, args.GetBoolArg("-timestampindex", DEFAULT_TIMESTAMPINDEX) ? int64_t(8 << 20) : int64_t(0));
      28         184 :     nTotalCache -= sizes.timestamp_index;
      29         184 :     sizes.spent_index = std::min(nTotalCache / 8, args.GetBoolArg("-spentindex", DEFAULT_SPENTINDEX) ? int64_t(128 << 20) : int64_t(0));
      30         184 :     nTotalCache -= sizes.spent_index;
      31         184 :     sizes.filter_index = 0;
      32         184 :     if (n_indexes > 0) {
      33           0 :         int64_t max_cache = std::min(nTotalCache / 8, max_filter_index_cache << 20);
      34           0 :         sizes.filter_index = max_cache / n_indexes;
      35           0 :         nTotalCache -= sizes.filter_index * n_indexes;
      36           0 :     }
      37         184 :     sizes.coins_db = std::min(nTotalCache / 2, (nTotalCache / 4) + (1 << 23)); // use 25%-50% of the remainder for disk cache
      38         184 :     sizes.coins_db = std::min(sizes.coins_db, nMaxCoinsDBCache << 20); // cap total coins db cache
      39         184 :     nTotalCache -= sizes.coins_db;
      40         184 :     sizes.coins = nTotalCache; // the rest goes to in-memory cache
      41         184 :     return sizes;
      42           0 : }
      43             : } // namespace node

Generated by: LCOV version 1.16