From 4634ac484a03f88f716429712504e7c354441c0b Mon Sep 17 00:00:00 2001
From: Tyler Neely <tylerneely@gmail.com>
Date: Wed, 12 Oct 2022 18:19:06 +0200
Subject: [PATCH] Optimize simulator RNG usage (#590)

This causes instructions for `basic_request.cpp` to drop from 281 million to 28 million
---
 src/io/simulator/simulator_handle.cpp | 6 ++----
 src/io/simulator/simulator_handle.hpp | 2 ++
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/io/simulator/simulator_handle.cpp b/src/io/simulator/simulator_handle.cpp
index fe4bc8c1f..9fa16fae3 100644
--- a/src/io/simulator/simulator_handle.cpp
+++ b/src/io/simulator/simulator_handle.cpp
@@ -73,8 +73,7 @@ bool SimulatorHandle::MaybeTickSimulator() {
 
     // We tick the clock forward when all servers are blocked but
     // there are no in-flight messages to schedule delivery of.
-    std::poisson_distribution<> time_distrib(50);
-    Duration clock_advance = std::chrono::microseconds{time_distrib(rng_)};
+    const Duration clock_advance = std::chrono::microseconds{time_distrib_(rng_)};
     cluster_wide_time_microseconds_ += clock_advance;
 
     MG_ASSERT(cluster_wide_time_microseconds_ < config_.abort_time,
@@ -93,8 +92,7 @@ bool SimulatorHandle::MaybeTickSimulator() {
   auto [to_address, opaque_message] = std::move(in_flight_.back());
   in_flight_.pop_back();
 
-  std::uniform_int_distribution<int> drop_distrib(0, 99);
-  const int drop_threshold = drop_distrib(rng_);
+  const int drop_threshold = drop_distrib_(rng_);
   const bool should_drop = drop_threshold < config_.drop_percent;
 
   if (should_drop) {
diff --git a/src/io/simulator/simulator_handle.hpp b/src/io/simulator/simulator_handle.hpp
index 7ad1d795a..3adf2b7b0 100644
--- a/src/io/simulator/simulator_handle.hpp
+++ b/src/io/simulator/simulator_handle.hpp
@@ -51,6 +51,8 @@ class SimulatorHandle {
   std::set<Address> blocked_on_receive_;
   std::set<Address> server_addresses_;
   std::mt19937 rng_;
+  std::uniform_int_distribution<int> time_distrib_{5, 50};
+  std::uniform_int_distribution<int> drop_distrib_{0, 99};
   SimulatorConfig config_;
 
   void TimeoutPromisesPastDeadline() {