Skip to content

Commit

Permalink
Fix builds
Browse files Browse the repository at this point in the history
  • Loading branch information
odygrd committed Feb 27, 2025
1 parent f019429 commit 6c19e82
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 40 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/bsd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ jobs:
run: |
cmake -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_CXX_STANDARD=17 -DQUILL_VERBOSE_MAKEFILE=ON -DQUILL_BUILD_TESTS=ON -DQUILL_BUILD_EXAMPLES=ON "$GITHUB_WORKSPACE"
cmake --build . --config ${{ matrix.build_type }} --parallel 4
ctest --build-config ${{ matrix.build_type }} --output-on-failure -R TEST_MultiFrontendThreads
OpenBSD:
runs-on: ubuntu-latest
Expand All @@ -86,6 +87,7 @@ jobs:
run: |
cmake -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_CXX_STANDARD=17 -DQUILL_VERBOSE_MAKEFILE=ON -DQUILL_BUILD_TESTS=ON -DQUILL_BUILD_EXAMPLES=ON "$GITHUB_WORKSPACE"
cmake --build . --config ${{ matrix.build_type }} --parallel 4
ctest --build-config ${{ matrix.build_type }} --output-on-failure -R TEST_MultiFrontendThreads
DragonFlyBSD:
runs-on: ubuntu-latest
Expand All @@ -108,3 +110,4 @@ jobs:
run: |
cmake -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_C_COMPILER=$(which gcc10) -DCMAKE_CXX_COMPILER=$(which g++10) -DCMAKE_CXX_STANDARD=17 -DQUILL_VERBOSE_MAKEFILE=ON -DQUILL_BUILD_TESTS=ON -DQUILL_BUILD_EXAMPLES=ON "$GITHUB_WORKSPACE"
cmake --build . --config ${{ matrix.build_type }} --parallel 4
ctest --build-config ${{ matrix.build_type }} --output-on-failure -R TEST_MultiFrontendThreads
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ set(HEADER_FILES

include/quill/core/Attributes.h
include/quill/core/BoundedSPSCQueue.h
include/quill/core/ChronoTimeUtils.h
include/quill/core/Common.h
include/quill/core/DynamicFormatArgStore.h
include/quill/core/Codec.h
Expand Down
5 changes: 2 additions & 3 deletions include/quill/Logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include "quill/UserClockSource.h"
#include "quill/core/Attributes.h"
#include "quill/core/ChronoTimeUtils.h"
#include "quill/core/Codec.h"
#include "quill/core/Common.h"
#include "quill/core/FrontendOptions.h"
Expand Down Expand Up @@ -108,9 +109,7 @@ class LoggerImpl : public detail::LoggerBase
}
else if (clock_source == ClockSourceType::System)
{
current_timestamp = static_cast<uint64_t>(std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::system_clock::now().time_since_epoch())
.count());
current_timestamp = detail::get_timestamp_ns<std::chrono::system_clock>();
}
else
{
Expand Down
14 changes: 6 additions & 8 deletions include/quill/StopWatch.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@

#pragma once

#include <chrono>
#include <cstdint>

#include "quill/DeferredFormatCodec.h"
#include "quill/backend/RdtscClock.h"
#include "quill/core/Attributes.h"
#include "quill/core/Common.h"
#include "quill/core/Rdtsc.h"
#include "quill/core/ChronoTimeUtils.h"

#include "quill/bundled/fmt/format.h"
#include "quill/std/Chrono.h"
Expand Down Expand Up @@ -58,9 +60,7 @@ class StopWatch
}
else
{
_start_tp = std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::steady_clock::now().time_since_epoch())
.count();
_start_tp = detail::get_timestamp_ns<std::chrono::steady_clock>();
}
}

Expand All @@ -78,7 +78,7 @@ class StopWatch
else
{
return std::chrono::duration<double>(std::chrono::nanoseconds{
std::chrono::steady_clock::now().time_since_epoch().count() - _start_tp});
detail::get_timestamp_ns<std::chrono::steady_clock>() - _start_tp});
}
}

Expand All @@ -97,7 +97,7 @@ class StopWatch
else
{
return std::chrono::duration_cast<T>(std::chrono::nanoseconds{
std::chrono::steady_clock::now().time_since_epoch().count() - _start_tp});
detail::get_timestamp_ns<std::chrono::steady_clock>() - _start_tp});
}
}

Expand All @@ -112,9 +112,7 @@ class StopWatch
}
else
{
_start_tp = std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::steady_clock::now().time_since_epoch())
.count();
_start_tp = detail::get_timestamp_ns<std::chrono::steady_clock>();
}
}

Expand Down
5 changes: 2 additions & 3 deletions include/quill/backend/BackendWorker.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

#include "quill/core/Attributes.h"
#include "quill/core/BoundedSPSCQueue.h"
#include "quill/core/ChronoTimeUtils.h"
#include "quill/core/Codec.h"
#include "quill/core/Common.h"
#include "quill/core/DynamicFormatArgStore.h"
Expand Down Expand Up @@ -416,9 +417,7 @@ class BackendWorker
QUILL_ATTRIBUTE_HOT size_t _populate_transit_events_from_frontend_queues()
{
uint64_t const ts_now = _options.log_timestamp_ordering_grace_period.count()
? static_cast<uint64_t>((std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::system_clock::now().time_since_epoch()) -
_options.log_timestamp_ordering_grace_period)
? static_cast<uint64_t>((detail::get_timestamp<std::chrono::system_clock>() - _options.log_timestamp_ordering_grace_period)
.count())
: std::numeric_limits<uint64_t>::max();

Expand Down
18 changes: 7 additions & 11 deletions include/quill/backend/RdtscClock.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#pragma once

#include "quill/core/Attributes.h"
#include "quill/core/ChronoTimeUtils.h"
#include "quill/core/Common.h"
#include "quill/core/Rdtsc.h"

Expand Down Expand Up @@ -59,19 +60,16 @@ class RdtscClock

for (size_t i = 0; i < trials; ++i)
{
auto const beg_ts = std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::system_clock::now().time_since_epoch());
auto const beg_ts = detail::get_timestamp<std::chrono::steady_clock>();
uint64_t const beg_tsc = rdtsc();

std::chrono::nanoseconds elapsed_ns;
uint64_t end_tsc;
std::chrono::nanoseconds elapsed_ns;

do
{
auto const end_ts = std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::system_clock::now().time_since_epoch());
auto const end_ts = detail::get_timestamp<std::chrono::steady_clock>();
end_tsc = rdtsc();

elapsed_ns = end_ts - beg_ts; // calculates ns between two timespecs
elapsed_ns = end_ts - beg_ts;
} while (elapsed_ns < spin_duration); // busy spin for 10ms

rates[i] = static_cast<double>(end_tsc - beg_tsc) / static_cast<double>(elapsed_ns.count());
Expand Down Expand Up @@ -163,9 +161,7 @@ class RdtscClock
{
uint64_t const beg = rdtsc();
// we force convert to nanoseconds because the precision of system_clock::time-point is not portable across platforms.
int64_t const wall_time = std::chrono::duration_cast<std::chrono::nanoseconds>(
std::chrono::system_clock::now().time_since_epoch())
.count();
auto const wall_time = static_cast<int64_t>(detail::get_timestamp_ns<std::chrono::system_clock>());
uint64_t const end = rdtsc();

if (QUILL_LIKELY(end - beg <= lag))
Expand Down
31 changes: 31 additions & 0 deletions include/quill/core/ChronoTimeUtils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* @page copyright
* Copyright(c) 2020-present, Odysseas Georgoudis & quill contributors.
* Distributed under the MIT License (http://opensource.org/licenses/MIT)
*/

#pragma once

#include "quill/core/Attributes.h"

#include <chrono>
#include <cstdint>

QUILL_BEGIN_NAMESPACE

namespace detail
{
template <typename TClock>
QUILL_NODISCARD QUILL_ATTRIBUTE_HOT std::chrono::nanoseconds get_timestamp() noexcept
{
return std::chrono::duration_cast<std::chrono::nanoseconds>(TClock::now().time_since_epoch());
}

template <typename TClock>
QUILL_NODISCARD QUILL_ATTRIBUTE_HOT uint64_t get_timestamp_ns() noexcept
{
return static_cast<uint64_t>(get_timestamp<TClock>().count());
}
} // namespace detail

QUILL_END_NAMESPACE
18 changes: 4 additions & 14 deletions include/quill/core/Rdtsc.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,11 @@
#pragma once

#include "quill/core/Attributes.h"

#include <cstdint>

#if defined(__aarch64__)
#include <chrono>
#include <cstdint>
#elif defined(__ARM_ARCH)
#include <chrono>
#include <cstdint>
#elif (defined(_M_ARM) || defined(_M_ARM64))
#include <chrono>
#include <cstdint>
#elif (defined(__PPC64__))
#if (defined(__ARM_ARCH) || defined(_M_ARM) || defined(_M_ARM64) || defined(__PPC64__))
#include "quill/core/ChronoTimeUtils.h"
#include <chrono>
#include <cstdint>
#else
// assume x86-64 ..
#if defined(_WIN32)
Expand Down Expand Up @@ -70,13 +60,13 @@ QUILL_NODISCARD QUILL_ATTRIBUTE_HOT inline uint64_t rdtsc() noexcept
#endif

// soft failover
return static_cast<uint64_t>(std::chrono::system_clock::now().time_since_epoch().count());
return detail::get_timestamp_ns<std::chrono::steady_clock>();
}
#elif (defined(_M_ARM) || defined(_M_ARM64) || defined(__PPC64__))
QUILL_NODISCARD QUILL_ATTRIBUTE_HOT inline uint64_t rdtsc() noexcept
{
// soft failover
return static_cast<uint64_t>(std::chrono::system_clock::now().time_since_epoch().count());
return detail::get_timestamp_ns<std::chrono::steady_clock>();
}
#else
/**
Expand Down
2 changes: 1 addition & 1 deletion test/unit_tests/RdtscClockTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ void check_wall_time_now(quill::detail::RdtscClock const& tsc_clock, size_t& fai
{
std::chrono::milliseconds constexpr offset{10};

auto const wall_time_chrono = std::chrono::system_clock::now().time_since_epoch();
auto const wall_time_chrono = quill::detail::get_timestamp<std::chrono::system_clock>();
auto const wall_time_tsc = std::chrono::nanoseconds{tsc_clock.time_since_epoch(quill::detail::rdtsc())};

auto const lower_bound = wall_time_chrono - offset;
Expand Down

0 comments on commit 6c19e82

Please sign in to comment.