diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-28 21:10:38 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-28 21:10:38 +0000 |
commit | a46a98bc7fd21a076470c06d560f42b5c7862b88 (patch) | |
tree | caa66ecd38300065473412aa8ea5dc3cd1926402 /vespalib/src | |
parent | 4fa7d094dfba8affcf7a557ced76cc8ef74004cd (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/src')
-rw-r--r-- | vespalib/src/tests/time/time_test.cpp | 15 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/time.cpp | 10 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/time.h | 2 |
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); } |