mirror of
https://codeberg.org/anoncontributorxmr/monero.git
synced 2024-11-23 11:23:26 +01:00
Merge pull request #4270
29dea03
epee: resize vectors where possible in serialization (moneromooo-monero)76affd9
epee: some speedup in parsing (moneromooo-monero)dc6c069
db_lmdb: speedup the get_output_distribution common case (moneromooo-monero)76ac5a8
wallet2: ask for a binary output distribution, for speed (moneromooo-monero)
This commit is contained in:
commit
77ed11e627
@ -35,6 +35,11 @@
|
|||||||
|
|
||||||
namespace epee
|
namespace epee
|
||||||
{
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
template<class C> void hint_resize(C &container, size_t size) {}
|
||||||
|
template<class C> void hint_resize(std::vector<C> &container, size_t size) { container.reserve(size); }
|
||||||
|
}
|
||||||
namespace serialization
|
namespace serialization
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -158,6 +163,7 @@ namespace epee
|
|||||||
false,
|
false,
|
||||||
"size in blob " << loaded_size << " not have not zero modulo for sizeof(value_type) = " << sizeof(typename stl_container::value_type) << ", type " << typeid(typename stl_container::value_type).name());
|
"size in blob " << loaded_size << " not have not zero modulo for sizeof(value_type) = " << sizeof(typename stl_container::value_type) << ", type " << typeid(typename stl_container::value_type).name());
|
||||||
size_t count = (loaded_size/sizeof(typename stl_container::value_type));
|
size_t count = (loaded_size/sizeof(typename stl_container::value_type));
|
||||||
|
hint_resize(container, count);
|
||||||
for(size_t i = 0; i < count; i++)
|
for(size_t i = 0; i < count; i++)
|
||||||
container.insert(container.end(), *(pelem++));
|
container.insert(container.end(), *(pelem++));
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
namespace epee
|
namespace epee
|
||||||
{
|
{
|
||||||
namespace misc_utils
|
namespace misc_utils
|
||||||
@ -36,8 +38,12 @@ namespace misc_utils
|
|||||||
{
|
{
|
||||||
inline std::string transform_to_escape_sequence(const std::string& src)
|
inline std::string transform_to_escape_sequence(const std::string& src)
|
||||||
{
|
{
|
||||||
//std::stringstream res;
|
static const char escaped[] = "\b\f\n\r\t\v\"\\/";
|
||||||
|
if (std::find_first_of(src.begin(), src.end(), escaped, escaped + sizeof(escaped)) == src.end())
|
||||||
|
return src;
|
||||||
|
|
||||||
std::string res;
|
std::string res;
|
||||||
|
res.reserve(2 * src.size());
|
||||||
for(std::string::const_iterator it = src.begin(); it!=src.end(); ++it)
|
for(std::string::const_iterator it = src.begin(); it!=src.end(); ++it)
|
||||||
{
|
{
|
||||||
switch(*it)
|
switch(*it)
|
||||||
@ -84,6 +90,7 @@ namespace misc_utils
|
|||||||
inline void match_string2(std::string::const_iterator& star_end_string, std::string::const_iterator buf_end, std::string& val)
|
inline void match_string2(std::string::const_iterator& star_end_string, std::string::const_iterator buf_end, std::string& val)
|
||||||
{
|
{
|
||||||
val.clear();
|
val.clear();
|
||||||
|
val.reserve(std::distance(star_end_string, buf_end));
|
||||||
bool escape_mode = false;
|
bool escape_mode = false;
|
||||||
std::string::const_iterator it = star_end_string;
|
std::string::const_iterator it = star_end_string;
|
||||||
++it;
|
++it;
|
||||||
|
@ -1971,14 +1971,25 @@ std::vector<uint64_t> BlockchainLMDB::get_block_cumulative_rct_outputs(const std
|
|||||||
|
|
||||||
MDB_val v;
|
MDB_val v;
|
||||||
|
|
||||||
|
uint64_t prev_height = heights[0];
|
||||||
for (uint64_t height: heights)
|
for (uint64_t height: heights)
|
||||||
{
|
{
|
||||||
MDB_val_set(v, height);
|
if (height == prev_height + 1)
|
||||||
|
{
|
||||||
|
MDB_val k2;
|
||||||
|
result = mdb_cursor_get(m_cur_block_info, &k2, &v, MDB_NEXT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
v.mv_size = sizeof(uint64_t);
|
||||||
|
v.mv_data = (void*)&height;
|
||||||
result = mdb_cursor_get(m_cur_block_info, (MDB_val *)&zerokval, &v, MDB_GET_BOTH);
|
result = mdb_cursor_get(m_cur_block_info, (MDB_val *)&zerokval, &v, MDB_GET_BOTH);
|
||||||
|
}
|
||||||
if (result)
|
if (result)
|
||||||
throw0(DB_ERROR(lmdb_error("Error attempting to retrieve rct distribution from the db: ", result).c_str()));
|
throw0(DB_ERROR(lmdb_error("Error attempting to retrieve rct distribution from the db: ", result).c_str()));
|
||||||
const mdb_block_info *bi = (const mdb_block_info *)v.mv_data;
|
const mdb_block_info *bi = (const mdb_block_info *)v.mv_data;
|
||||||
res.push_back(bi->bi_cum_rct);
|
res.push_back(bi->bi_cum_rct);
|
||||||
|
prev_height = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
TXN_POSTFIX_RDONLY();
|
TXN_POSTFIX_RDONLY();
|
||||||
|
@ -2656,6 +2656,7 @@ bool wallet2::get_rct_distribution(uint64_t &start_height, std::vector<uint64_t>
|
|||||||
req.amounts.push_back(0);
|
req.amounts.push_back(0);
|
||||||
req.from_height = 0;
|
req.from_height = 0;
|
||||||
req.cumulative = true;
|
req.cumulative = true;
|
||||||
|
req.binary = true;
|
||||||
m_daemon_rpc_mutex.lock();
|
m_daemon_rpc_mutex.lock();
|
||||||
bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_distribution", req, res, m_http_client, rpc_timeout);
|
bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_distribution", req, res, m_http_client, rpc_timeout);
|
||||||
m_daemon_rpc_mutex.unlock();
|
m_daemon_rpc_mutex.unlock();
|
||||||
@ -6478,6 +6479,7 @@ void wallet2::get_outs(std::vector<std::vector<tools::wallet2::get_outs_entry>>
|
|||||||
req_t.from_height = std::max<uint64_t>(segregation_fork_height, RECENT_OUTPUT_BLOCKS) - RECENT_OUTPUT_BLOCKS;
|
req_t.from_height = std::max<uint64_t>(segregation_fork_height, RECENT_OUTPUT_BLOCKS) - RECENT_OUTPUT_BLOCKS;
|
||||||
req_t.to_height = segregation_fork_height + 1;
|
req_t.to_height = segregation_fork_height + 1;
|
||||||
req_t.cumulative = true;
|
req_t.cumulative = true;
|
||||||
|
req_t.binary = true;
|
||||||
m_daemon_rpc_mutex.lock();
|
m_daemon_rpc_mutex.lock();
|
||||||
bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_distribution", req_t, resp_t, m_http_client, rpc_timeout * 1000);
|
bool r = net_utils::invoke_http_json_rpc("/json_rpc", "get_output_distribution", req_t, resp_t, m_http_client, rpc_timeout * 1000);
|
||||||
m_daemon_rpc_mutex.unlock();
|
m_daemon_rpc_mutex.unlock();
|
||||||
|
Loading…
Reference in New Issue
Block a user