summaryrefslogtreecommitdiffstats
path: root/vespalib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-02-28 21:10:38 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2022-02-28 21:10:38 +0000
commita46a98bc7fd21a076470c06d560f42b5c7862b88 (patch)
treecaa66ecd38300065473412aa8ea5dc3cd1926402 /vespalib
parent4fa7d094dfba8affcf7a557ced76cc8ef74004cd (diff)
Add a simple adjustTimeoutByDetectedHz to compute a suitable timeout/naptime based on base VESPA_TIMER_HZ to use for random waiting
when doing a poll based appraoch.
Diffstat (limited to 'vespalib')
-rw-r--r--vespalib/src/tests/time/time_test.cpp15
-rw-r--r--vespalib/src/vespa/vespalib/util/time.cpp10
-rw-r--r--vespalib/src/vespa/vespalib/util/time.h2
3 files changed, 27 insertions, 0 deletions
diff --git a/vespalib/src/tests/time/time_test.cpp b/vespalib/src/tests/time/time_test.cpp
index c2858308006..0ca583c8326 100644
--- a/vespalib/src/tests/time/time_test.cpp
+++ b/vespalib/src/tests/time/time_test.cpp
@@ -68,4 +68,19 @@ TEST(TimeTest, default_timer_frequency_is_1000_hz) {
EXPECT_EQ(1000u, getVespaTimerHz());
}
+TEST(TimeTest, timeout_is_relative_to_frequency) {
+ EXPECT_EQ(1000u, getVespaTimerHz());
+
+ EXPECT_EQ(1ms, adjustTimeoutByDetectedHz(1ms));
+ EXPECT_EQ(20ms, adjustTimeoutByDetectedHz(20ms));
+
+ EXPECT_EQ(1ms, adjustTimeoutByHz(1ms, 1000));
+ EXPECT_EQ(10ms, adjustTimeoutByHz(1ms, 100));
+ EXPECT_EQ(100ms, adjustTimeoutByHz(1ms, 10));
+
+ EXPECT_EQ(20ms, adjustTimeoutByHz(20ms, 1000));
+ EXPECT_EQ(200ms, adjustTimeoutByHz(20ms, 100));
+ EXPECT_EQ(2000ms, adjustTimeoutByHz(20ms, 10));
+}
+
GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/vespalib/src/vespa/vespalib/util/time.cpp b/vespalib/src/vespa/vespalib/util/time.cpp
index bcc289489ea..3737a25f268 100644
--- a/vespalib/src/vespa/vespalib/util/time.cpp
+++ b/vespalib/src/vespa/vespalib/util/time.cpp
@@ -30,6 +30,16 @@ getVespaTimerHz() {
return 1000u;
}
+duration
+adjustTimeoutByHz(duration timeout, long hz) {
+ return (timeout * 1000) / hz;
+}
+
+duration
+adjustTimeoutByDetectedHz(duration timeout) {
+ return adjustTimeoutByHz(timeout, getVespaTimerHz());
+}
+
namespace {
string
diff --git a/vespalib/src/vespa/vespalib/util/time.h b/vespalib/src/vespa/vespalib/util/time.h
index dbbae862a8d..783831b5171 100644
--- a/vespalib/src/vespa/vespalib/util/time.h
+++ b/vespalib/src/vespa/vespalib/util/time.h
@@ -92,5 +92,7 @@ public:
* The default frequency (1000hz) for vespa timer, with environment override VESPA_TIMER_HZ capped to [1..1000]
*/
uint32_t getVespaTimerHz();
+duration adjustTimeoutByDetectedHz(duration timeout);
+duration adjustTimeoutByHz(duration timeout, long hz);
}