[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();