From 9b32450c877cb0b75fabeb47753d2e131044f1d4 Mon Sep 17 00:00:00 2001 From: Ed Hennis Date: Mon, 12 Aug 2024 11:26:46 -0400 Subject: [PATCH] Log timing of the FindOversizeCross test * Allows some analysis of offer operations --- include/xrpl/protocol/Protocol.h | 2 +- src/test/app/OversizeMeta_test.cpp | 39 ++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/include/xrpl/protocol/Protocol.h b/include/xrpl/protocol/Protocol.h index 8d8a71dfef8..d5dff4b733e 100644 --- a/include/xrpl/protocol/Protocol.h +++ b/include/xrpl/protocol/Protocol.h @@ -49,7 +49,7 @@ std::size_t constexpr unfundedOfferRemoveLimit = 1000; std::size_t constexpr expiredOfferRemoveLimit = 256; /** The maximum number of metadata entries allowed in one transaction */ -std::size_t constexpr oversizeMetaDataCap = 5200; +std::size_t constexpr oversizeMetaDataCap = 1000; // 5200; /** The maximum number of entries per directory page */ std::size_t constexpr dirNodeMaxEntries = 32; diff --git a/src/test/app/OversizeMeta_test.cpp b/src/test/app/OversizeMeta_test.cpp index 0a7f42e1801..c368172373f 100644 --- a/src/test/app/OversizeMeta_test.cpp +++ b/src/test/app/OversizeMeta_test.cpp @@ -20,6 +20,7 @@ #include #include #include +#include namespace ripple { namespace test { @@ -162,6 +163,7 @@ class FindOversizeCross_test : public beast::unit_test::suite oversize(std::size_t n) { using namespace jtx; + using clock = std::chrono::high_resolution_clock; auto const billion = 1000000000ul; Env env(*this); env.disable_sigs(); @@ -170,9 +172,42 @@ class FindOversizeCross_test : public beast::unit_test::suite env.fund(XRP(billion), gw, "alice"); env.trust(USD(billion), "alice"); env(pay(gw, "alice", USD(billion))); - createOffers(env, USD, n); + { + auto const start = clock::now(); + createOffers(env, USD, n); + std::chrono::nanoseconds duration = clock::now() - start; + auto const count = duration.count(); + + std::cout << "Created " << n + << " offers (including ledger close) in " << count + << "ns. Average time per offer: " << (count / n) + << "ns\n"; + } env(pay("alice", gw, USD(billion))); - env(offer("alice", USD(1), XRP(1)), ter(std::ignore)); + { + auto const start = clock::now(); + env(offer("alice", USD(1), XRP(1)), ter(std::ignore)); + std::chrono::nanoseconds duration = clock::now() - start; + auto const count = duration.count(); + + auto const meta = env.meta(); + auto const affected = + meta->getJson(JsonOptions::none)[sfAffectedNodes.fieldName]; + std::size_t numDeleted = 0; + for (auto const& obj : affected) + { + if (obj.isMember(sfDeletedNode.fieldName)) + ++numDeleted; + } + + std::cout << "Offer crossing result: " << transToken(env.ter()) + << ". Touched " << affected.size() + << " ledger objects, and deleted " << numDeleted << " in " + << count << "ns. Average time per deleted offer: " + << (numDeleted > 0 ? to_string(count / numDeleted) : "-") + << "ns\n"; + std::cout << "\n"; + } return env.ter() == tecOVERSIZE; }