Skip to content

Commit

Permalink
rpc: speed up the common get_output_distribution case while syncing
Browse files Browse the repository at this point in the history
  • Loading branch information
moneromooo-monero committed Nov 27, 2018
1 parent 58ce16d commit 5ca4994
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions src/rpc/rpc_handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,25 @@ namespace rpc

std::vector<std::uint64_t> distribution;
std::uint64_t start_height, base;
if (!f(amount, from_height, to_height, start_height, distribution, base))
return boost::none;

// see if we can extend the cache - a common case
if (d.cached && amount == 0 && d.cached_from == from_height && to_height > d.cached_to)
{
std::vector<std::uint64_t> new_distribution;
if (!f(amount, d.cached_to + 1, to_height, start_height, new_distribution, base))
return boost::none;
distribution = d.cached_distribution;
distribution.reserve(distribution.size() + new_distribution.size());
for (const auto &e: new_distribution)
distribution.push_back(e);
start_height = d.cached_start_height;
base = d.cached_base;
}
else
{
if (!f(amount, from_height, to_height, start_height, distribution, base))
return boost::none;
}

if (to_height > 0 && to_height >= from_height)
{
Expand Down

0 comments on commit 5ca4994

Please sign in to comment.