LCOV - code coverage report
Current view: top level - src/node - caches.cpp (source / functions) Coverage Total Hit
Test: total_coverage.info Lines: 78.6 % 14 11
Test Date: 2025-01-19 05:08:01 Functions: 100.0 % 1 1
Branches: 50.0 % 20 10

             Branch data     Line data    Source code
       1                 :             : // Copyright (c) 2021-2022 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 <common/args.h>
       8                 :             : #include <index/txindex.h>
       9                 :             : #include <kernel/caches.h>
      10                 :             : #include <logging.h>
      11                 :             : #include <util/byte_units.h>
      12                 :             : 
      13                 :             : #include <algorithm>
      14                 :             : #include <string>
      15                 :             : 
      16                 :             : // Unlike for the UTXO database, for the txindex scenario the leveldb cache make
      17                 :             : // a meaningful difference: https://github.com/bitcoin/bitcoin/pull/8273#issuecomment-229601991
      18                 :             : //! Max memory allocated to tx index DB specific cache in bytes.
      19                 :             : static constexpr size_t MAX_TX_INDEX_CACHE{1024_MiB};
      20                 :             : //! Max memory allocated to all block filter index caches combined in bytes.
      21                 :             : static constexpr size_t MAX_FILTER_INDEX_CACHE{1024_MiB};
      22                 :             : 
      23                 :             : namespace node {
      24                 :        1112 : CacheSizes CalculateCacheSizes(const ArgsManager& args, size_t n_indexes)
      25                 :             : {
      26                 :             :     // Convert -dbcache from MiB units to bytes. The total cache is floored by MIN_DB_CACHE and capped by max size_t value.
      27                 :        1112 :     size_t total_cache{DEFAULT_DB_CACHE};
      28   [ +  -  -  + ]:        2224 :     if (std::optional<int64_t> db_cache = args.GetIntArg("-dbcache")) {
      29         [ #  # ]:           0 :         if (*db_cache < 0) db_cache = 0;
      30         [ #  # ]:           0 :         uint64_t db_cache_bytes = SaturatingLeftShift<uint64_t>(*db_cache, 20);
      31         [ #  # ]:           0 :         total_cache = std::max<size_t>(MIN_DB_CACHE, std::min<uint64_t>(db_cache_bytes, std::numeric_limits<size_t>::max()));
      32                 :             :     }
      33                 :             : 
      34                 :        1112 :     IndexCacheSizes index_sizes;
      35   [ +  -  +  +  :        2224 :     index_sizes.tx_index = std::min(total_cache / 8, args.GetBoolArg("-txindex", DEFAULT_TXINDEX) ? MAX_TX_INDEX_CACHE : 0);
                   +  + ]
      36                 :        1112 :     total_cache -= index_sizes.tx_index;
      37         [ +  + ]:        1112 :     if (n_indexes > 0) {
      38         [ +  - ]:          58 :         size_t max_cache = std::min(total_cache / 8, MAX_FILTER_INDEX_CACHE);
      39                 :          58 :         index_sizes.filter_index = max_cache / n_indexes;
      40                 :          58 :         total_cache -= index_sizes.filter_index * n_indexes;
      41                 :             :     }
      42                 :        1112 :     return {index_sizes, kernel::CacheSizes{total_cache}};
      43                 :             : }
      44                 :             : } // namespace node
        

Generated by: LCOV version 2.0-1