From 9505ca7aa4ee0822ac080f18eef2b4aba7c3efc7 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Mon, 4 Dec 2017 11:01:07 +0000 Subject: move MockTick --- staging_vespalib/src/tests/metrics/CMakeLists.txt | 1 + staging_vespalib/src/tests/metrics/mock_tick.cpp | 71 ++++++++++++++++++++++ staging_vespalib/src/tests/metrics/mock_tick.h | 38 ++++++++++++ .../src/tests/metrics/simple_metrics_test.cpp | 2 +- .../src/vespa/vespalib/metrics/CMakeLists.txt | 1 - .../src/vespa/vespalib/metrics/clock.h | 7 --- .../src/vespa/vespalib/metrics/mock_tick.cpp | 71 ---------------------- .../src/vespa/vespalib/metrics/mock_tick.h | 32 ---------- 8 files changed, 111 insertions(+), 112 deletions(-) create mode 100644 staging_vespalib/src/tests/metrics/mock_tick.cpp create mode 100644 staging_vespalib/src/tests/metrics/mock_tick.h delete mode 100644 staging_vespalib/src/vespa/vespalib/metrics/mock_tick.cpp delete mode 100644 staging_vespalib/src/vespa/vespalib/metrics/mock_tick.h (limited to 'staging_vespalib') diff --git a/staging_vespalib/src/tests/metrics/CMakeLists.txt b/staging_vespalib/src/tests/metrics/CMakeLists.txt index fc9a496c972..a441631fd15 100644 --- a/staging_vespalib/src/tests/metrics/CMakeLists.txt +++ b/staging_vespalib/src/tests/metrics/CMakeLists.txt @@ -2,6 +2,7 @@ vespa_add_executable(staging_vespalib_metrics_test_app TEST SOURCES simple_metrics_test.cpp + mock_tick.cpp DEPENDS staging_vespalib ) diff --git a/staging_vespalib/src/tests/metrics/mock_tick.cpp b/staging_vespalib/src/tests/metrics/mock_tick.cpp new file mode 100644 index 00000000000..e78b7c4644f --- /dev/null +++ b/staging_vespalib/src/tests/metrics/mock_tick.cpp @@ -0,0 +1,71 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#include "mock_tick.h" + +namespace vespalib::metrics { + +const std::chrono::seconds oneSec{1}; + +TimeStamp +MockTick::next(TimeStamp prev) +{ + std::unique_lock locker(_lock); + _prevValue = prev; + while (_runFlag) { + if (_provided) { + _blocked.store(false); + _provided.store(false); + return _nextValue; + } + _blocked.store(true); + _blockedCond.notify_all(); + auto r = _providedCond.wait_for(locker, oneSec); + (void)r; + } + return TimeStamp(0); +} + +void +MockTick::kill() +{ + std::unique_lock locker(_lock); + _runFlag.store(false); + _blockedCond.notify_all(); + _providedCond.notify_all(); +} + +void +MockTick::provide(TimeStamp value) +{ + std::unique_lock locker(_lock); + _nextValue = value; + _blocked.store(false); + _provided.store(true); + _providedCond.notify_all(); +} + +TimeStamp +MockTick::waitUntilBlocked() +{ + std::unique_lock locker(_lock); + while (_runFlag) { + if (_blocked) { + return _prevValue; + } + auto r = _blockedCond.wait_for(locker, oneSec); + (void)r; + } + return TimeStamp(0); +} + +MockTick::MockTick() + : _lock(), + _runFlag(true), + _provided(false), + _blocked(false), + _providedCond(), + _blockedCond(), + _nextValue(0.0), + _prevValue(0.0) +{} + +} // namespace vespalib::metrics diff --git a/staging_vespalib/src/tests/metrics/mock_tick.h b/staging_vespalib/src/tests/metrics/mock_tick.h new file mode 100644 index 00000000000..2f69f69fc91 --- /dev/null +++ b/staging_vespalib/src/tests/metrics/mock_tick.h @@ -0,0 +1,38 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include +#include +#include +#include + +namespace vespalib::metrics { + +// share the MockTick between the tested and the tester. +class MockTick : public Tick { +private: + std::mutex _lock; + std::atomic _runFlag; + std::atomic _provided; + std::atomic _blocked; + std::condition_variable _providedCond; + std::condition_variable _blockedCond; + TimeStamp _nextValue; + TimeStamp _prevValue; +public: + MockTick(); + TimeStamp next(TimeStamp prev) override; + void kill() override; + + void provide(TimeStamp value); + TimeStamp waitUntilBlocked(); +}; + +struct TickProxy : Tick { + std::shared_ptr tick; + TickProxy(std::shared_ptr tick_in) : tick(std::move(tick_in)) {} + TimeStamp next(TimeStamp prev) override { return tick->next(prev); } + void kill() override { tick->kill(); } +}; + +} // namespace vespalib::metrics diff --git a/staging_vespalib/src/tests/metrics/simple_metrics_test.cpp b/staging_vespalib/src/tests/metrics/simple_metrics_test.cpp index 6af03177ed8..80030cb89b2 100644 --- a/staging_vespalib/src/tests/metrics/simple_metrics_test.cpp +++ b/staging_vespalib/src/tests/metrics/simple_metrics_test.cpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include "mock_tick.h" #include #include diff --git a/staging_vespalib/src/vespa/vespalib/metrics/CMakeLists.txt b/staging_vespalib/src/vespa/vespalib/metrics/CMakeLists.txt index 6fec0900b06..34cc5453304 100644 --- a/staging_vespalib/src/vespa/vespalib/metrics/CMakeLists.txt +++ b/staging_vespalib/src/vespa/vespalib/metrics/CMakeLists.txt @@ -17,7 +17,6 @@ vespa_add_library(staging_vespalib_vespalib_metrics OBJECT metric_name.cpp metrics_manager.cpp metric_types.cpp - mock_tick.cpp name_collection.cpp point_builder.cpp point.cpp diff --git a/staging_vespalib/src/vespa/vespalib/metrics/clock.h b/staging_vespalib/src/vespa/vespalib/metrics/clock.h index ae67b542fcd..d46c691b648 100644 --- a/staging_vespalib/src/vespa/vespalib/metrics/clock.h +++ b/staging_vespalib/src/vespa/vespalib/metrics/clock.h @@ -26,11 +26,4 @@ struct Tick { virtual ~Tick() {} }; -struct TickProxy : Tick { - std::shared_ptr tick; - TickProxy(std::shared_ptr tick_in) : tick(std::move(tick_in)) {} - TimeStamp next(TimeStamp prev) override { return tick->next(prev); } - void kill() override { tick->kill(); } -}; - } // namespace vespalib::metrics diff --git a/staging_vespalib/src/vespa/vespalib/metrics/mock_tick.cpp b/staging_vespalib/src/vespa/vespalib/metrics/mock_tick.cpp deleted file mode 100644 index e78b7c4644f..00000000000 --- a/staging_vespalib/src/vespa/vespalib/metrics/mock_tick.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include "mock_tick.h" - -namespace vespalib::metrics { - -const std::chrono::seconds oneSec{1}; - -TimeStamp -MockTick::next(TimeStamp prev) -{ - std::unique_lock locker(_lock); - _prevValue = prev; - while (_runFlag) { - if (_provided) { - _blocked.store(false); - _provided.store(false); - return _nextValue; - } - _blocked.store(true); - _blockedCond.notify_all(); - auto r = _providedCond.wait_for(locker, oneSec); - (void)r; - } - return TimeStamp(0); -} - -void -MockTick::kill() -{ - std::unique_lock locker(_lock); - _runFlag.store(false); - _blockedCond.notify_all(); - _providedCond.notify_all(); -} - -void -MockTick::provide(TimeStamp value) -{ - std::unique_lock locker(_lock); - _nextValue = value; - _blocked.store(false); - _provided.store(true); - _providedCond.notify_all(); -} - -TimeStamp -MockTick::waitUntilBlocked() -{ - std::unique_lock locker(_lock); - while (_runFlag) { - if (_blocked) { - return _prevValue; - } - auto r = _blockedCond.wait_for(locker, oneSec); - (void)r; - } - return TimeStamp(0); -} - -MockTick::MockTick() - : _lock(), - _runFlag(true), - _provided(false), - _blocked(false), - _providedCond(), - _blockedCond(), - _nextValue(0.0), - _prevValue(0.0) -{} - -} // namespace vespalib::metrics diff --git a/staging_vespalib/src/vespa/vespalib/metrics/mock_tick.h b/staging_vespalib/src/vespa/vespalib/metrics/mock_tick.h deleted file mode 100644 index d9338cfea23..00000000000 --- a/staging_vespalib/src/vespa/vespalib/metrics/mock_tick.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#pragma once - -#include "clock.h" - -#include -#include -#include - -namespace vespalib::metrics { - -// share the MockTick between the tested and the tester. -class MockTick : public Tick { -private: - std::mutex _lock; - std::atomic _runFlag; - std::atomic _provided; - std::atomic _blocked; - std::condition_variable _providedCond; - std::condition_variable _blockedCond; - TimeStamp _nextValue; - TimeStamp _prevValue; -public: - MockTick(); - TimeStamp next(TimeStamp prev) override; - void kill() override; - - void provide(TimeStamp value); - TimeStamp waitUntilBlocked(); -}; - -} // namespace vespalib::metrics -- cgit v1.2.3