[ledger][benchmarks] Add delay between creating the page and inserting entries.
Test: trace record --spec-file=/pkgfs/packages/ledger_benchmarks/0/data/put.tspec doesn't have spikes
Change-Id: I56e185391e2fcae3c507445a4fe0fc20f28c6f65
diff --git a/bin/ledger/testing/get_page_ensure_initialized.cc b/bin/ledger/testing/get_page_ensure_initialized.cc
index aeec7c6..b31710c 100644
--- a/bin/ledger/testing/get_page_ensure_initialized.cc
+++ b/bin/ledger/testing/get_page_ensure_initialized.cc
@@ -10,15 +10,21 @@
#include "peridot/bin/ledger/fidl/include/types.h"
namespace ledger {
+namespace {
+// The delay before returning the page, after a successful initialization.
+constexpr zx::duration kDelay = zx::msec(500);
+} // namespace
+
void GetPageEnsureInitialized(
- LedgerPtr* ledger, PageIdPtr requested_id,
+ LedgerPtr* ledger, PageIdPtr requested_id, DelayCallback delay_callback,
fit::function<void()> error_handler,
fit::function<void(Status, PagePtr, PageId)> callback) {
auto page = std::make_unique<PagePtr>();
auto request = page->NewRequest();
(*ledger)->GetPage(
std::move(requested_id), std::move(request),
- [page = std::move(page), error_handler = std::move(error_handler),
+ [delay_callback, page = std::move(page),
+ error_handler = std::move(error_handler),
callback = std::move(callback)](Status status) mutable {
if (status != Status::OK) {
FXL_LOG(ERROR) << "Failure while getting a page.";
@@ -33,8 +39,11 @@
});
auto page_ptr = (*page).get();
- page_ptr->GetId([page = std::move(page),
+ page_ptr->GetId([delay_callback, page = std::move(page),
callback = std::move(callback)](PageId page_id) {
+ if (delay_callback == DelayCallback::YES) {
+ zx_nanosleep(zx_deadline_after(kDelay.get()));
+ }
callback(Status::OK, std::move(*page), page_id);
});
});
diff --git a/bin/ledger/testing/get_page_ensure_initialized.h b/bin/ledger/testing/get_page_ensure_initialized.h
index fb99014..f2e861d 100644
--- a/bin/ledger/testing/get_page_ensure_initialized.h
+++ b/bin/ledger/testing/get_page_ensure_initialized.h
@@ -10,12 +10,16 @@
#include "peridot/bin/ledger/fidl/include/types.h"
namespace ledger {
+// Determines whether calling the |GetPageEnsureInitialized| callback should be
+// done after some delay. This can be used in benchmarks, to make sure that all
+// backround I/O operations have finished before measurements start.
+enum DelayCallback : bool { NO, YES };
// Retrieves the requested page of the given Ledger instance amd returns after
// ensuring that it is initialized. If |id| is nullptr, a new page with a unique
// id is created.
void GetPageEnsureInitialized(
- LedgerPtr* ledger, PageIdPtr requested_id,
+ LedgerPtr* ledger, PageIdPtr requested_id, DelayCallback delay_callback,
fit::function<void()> error_handler,
fit::function<void(Status, PagePtr, PageId)> callback);
} // namespace ledger
diff --git a/bin/ledger/tests/benchmark/backlog/backlog.cc b/bin/ledger/tests/benchmark/backlog/backlog.cc
index 3c5dc63..1c0e2a8 100644
--- a/bin/ledger/tests/benchmark/backlog/backlog.cc
+++ b/bin/ledger/tests/benchmark/backlog/backlog.cc
@@ -210,7 +210,8 @@
}
GetPageEnsureInitialized(
- &writer_, nullptr, []() { FXL_LOG(INFO) << "Writer page closed."; },
+ &writer_, nullptr, DelayCallback::YES,
+ []() { FXL_LOG(INFO) << "Writer page closed."; },
[this](Status status, PagePtr writer_page, PageId page_id) {
if (QuitOnError(QuitLoopClosure(), status,
"Writer page initialization")) {
diff --git a/bin/ledger/tests/benchmark/delete_entry/delete_entry.cc b/bin/ledger/tests/benchmark/delete_entry/delete_entry.cc
index dc753b9..5f2fd02 100644
--- a/bin/ledger/tests/benchmark/delete_entry/delete_entry.cc
+++ b/bin/ledger/tests/benchmark/delete_entry/delete_entry.cc
@@ -126,7 +126,7 @@
}
GetPageEnsureInitialized(
- &ledger_, nullptr, QuitLoopClosure(),
+ &ledger_, nullptr, DelayCallback::YES, QuitLoopClosure(),
[this](Status status, PagePtr page, PageId id) {
if (QuitOnError(QuitLoopClosure(), status, "Page initialization")) {
return;
diff --git a/bin/ledger/tests/benchmark/disk_space/disk_space.cc b/bin/ledger/tests/benchmark/disk_space/disk_space.cc
index ce40c45..1ec6ecf 100644
--- a/bin/ledger/tests/benchmark/disk_space/disk_space.cc
+++ b/bin/ledger/tests/benchmark/disk_space/disk_space.cc
@@ -146,7 +146,8 @@
fxl::MakeRefCounted<callback::Waiter<Status, PagePtr>>(Status::OK);
for (size_t page_number = 0; page_number < page_count_; page_number++) {
- GetPageEnsureInitialized(&ledger_, nullptr, QuitLoopClosure(),
+ GetPageEnsureInitialized(&ledger_, nullptr, DelayCallback::YES,
+ QuitLoopClosure(),
[callback = waiter->NewCallback()](
Status status, PagePtr page, PageId id) {
callback(status, std::move(page));
diff --git a/bin/ledger/tests/benchmark/fetch/fetch.cc b/bin/ledger/tests/benchmark/fetch/fetch.cc
index 93ebb8c..81c2475 100644
--- a/bin/ledger/tests/benchmark/fetch/fetch.cc
+++ b/bin/ledger/tests/benchmark/fetch/fetch.cc
@@ -168,7 +168,8 @@
return;
}
- GetPageEnsureInitialized(&writer_, nullptr, QuitLoopClosure(),
+ GetPageEnsureInitialized(&writer_, nullptr, DelayCallback::YES,
+ QuitLoopClosure(),
[this](Status status, PagePtr page, PageId id) {
if (QuitOnError(QuitLoopClosure(), status,
"Writer page initialization")) {
diff --git a/bin/ledger/tests/benchmark/put/put.cc b/bin/ledger/tests/benchmark/put/put.cc
index 7535d79..f1516db 100644
--- a/bin/ledger/tests/benchmark/put/put.cc
+++ b/bin/ledger/tests/benchmark/put/put.cc
@@ -154,7 +154,7 @@
}
GetPageEnsureInitialized(
- &ledger_, nullptr, QuitLoopClosure(),
+ &ledger_, nullptr, DelayCallback::YES, QuitLoopClosure(),
[this](Status status, PagePtr page, PageId id) mutable {
if (QuitOnError(QuitLoopClosure(), status,
"GetPageEnsureInitialized")) {
diff --git a/bin/ledger/tests/benchmark/sync/sync.cc b/bin/ledger/tests/benchmark/sync/sync.cc
index 67f5a73..412da81 100644
--- a/bin/ledger/tests/benchmark/sync/sync.cc
+++ b/bin/ledger/tests/benchmark/sync/sync.cc
@@ -184,7 +184,7 @@
return;
}
GetPageEnsureInitialized(
- &alpha_, nullptr, QuitLoopClosure(),
+ &alpha_, nullptr, DelayCallback::YES, QuitLoopClosure(),
[this](Status status, PagePtr page, PageId id) {
if (QuitOnError(QuitLoopClosure(), status,
"alpha page initialization")) {
diff --git a/bin/ledger/tests/benchmark/update_entry/update_entry.cc b/bin/ledger/tests/benchmark/update_entry/update_entry.cc
index 54a8595..3505b55 100644
--- a/bin/ledger/tests/benchmark/update_entry/update_entry.cc
+++ b/bin/ledger/tests/benchmark/update_entry/update_entry.cc
@@ -123,7 +123,7 @@
return;
}
GetPageEnsureInitialized(
- &ledger_, nullptr, QuitLoopClosure(),
+ &ledger_, nullptr, DelayCallback::YES, QuitLoopClosure(),
[this](Status status, PagePtr page, PageId id) {
if (QuitOnError(QuitLoopClosure(), status,
"GetPageEnsureInitialized")) {
diff --git a/bin/ledger/tests/e2e_local/get_ledger_test.cc b/bin/ledger/tests/e2e_local/get_ledger_test.cc
index f4407dd..cfc7d6c 100644
--- a/bin/ledger/tests/e2e_local/get_ledger_test.cc
+++ b/bin/ledger/tests/e2e_local/get_ledger_test.cc
@@ -53,7 +53,7 @@
PageId page_id;
GetPageEnsureInitialized(
- &ledger, nullptr, [&] { loop.Quit(); },
+ &ledger, nullptr, DelayCallback::NO, [&] { loop.Quit(); },
callback::Capture([&] { loop.Quit(); }, &status, &page, &page_id));
loop.Run();
diff --git a/bin/ledger/tests/integration/sync/convergence.cc b/bin/ledger/tests/integration/sync/convergence.cc
index fa47915..d316d11 100644
--- a/bin/ledger/tests/integration/sync/convergence.cc
+++ b/bin/ledger/tests/integration/sync/convergence.cc
@@ -236,7 +236,7 @@
&ledger_ptr,
// The first ledger gets a random page id, the others use the
// same id for their pages.
- i == 0 ? nullptr : fidl::MakeOptional(page_id),
+ i == 0 ? nullptr : fidl::MakeOptional(page_id), DelayCallback::NO,
[&] {
ADD_FAILURE() << "Page should not be disconnected.";
StopLoop();