From a5522729aaebb8c3edb19f1008f4e19c13950477 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Wed, 11 Jun 2025 23:18:35 -0400 Subject: [PATCH] refactor: Unify ArchTime classes into one method Idea from https://github.com/input-leap/input-leap/pull/1464' --- src/lib/arch/Arch.cpp | 7 +++ src/lib/arch/Arch.h | 16 +++--- src/lib/arch/CMakeLists.txt | 5 -- src/lib/arch/IArchTime.h | 31 ----------- src/lib/arch/unix/ArchTimeUnix.cpp | 30 ----------- src/lib/arch/unix/ArchTimeUnix.h | 23 -------- src/lib/arch/win32/ArchTimeWindows.cpp | 73 -------------------------- src/lib/arch/win32/ArchTimeWindows.h | 23 -------- 8 files changed, 15 insertions(+), 193 deletions(-) delete mode 100644 src/lib/arch/IArchTime.h delete mode 100644 src/lib/arch/unix/ArchTimeUnix.cpp delete mode 100644 src/lib/arch/unix/ArchTimeUnix.h delete mode 100644 src/lib/arch/win32/ArchTimeWindows.cpp delete mode 100644 src/lib/arch/win32/ArchTimeWindows.h diff --git a/src/lib/arch/Arch.cpp b/src/lib/arch/Arch.cpp index 976858309..93c7ab4f3 100644 --- a/src/lib/arch/Arch.cpp +++ b/src/lib/arch/Arch.cpp @@ -52,3 +52,10 @@ void Arch::sleep(double timeout) const auto msec = static_cast(timeout * 1000); std::this_thread::sleep_for(std::chrono::milliseconds(msec)); } + +double Arch::time() +{ + auto sinceEpoch = std::chrono::steady_clock::now().time_since_epoch(); + auto uSecSinceEpoch = std::chrono::duration_cast(sinceEpoch).count(); + return uSecSinceEpoch / 1000000.0; +} diff --git a/src/lib/arch/Arch.h b/src/lib/arch/Arch.h index d7d174801..cb09a65f1 100644 --- a/src/lib/arch/Arch.h +++ b/src/lib/arch/Arch.h @@ -33,14 +33,12 @@ #include "arch/win32/ArchLogWindows.h" #include "arch/win32/ArchMultithreadWindows.h" #include "arch/win32/ArchNetworkWinsock.h" -#include "arch/win32/ArchTimeWindows.h" #elif SYSAPI_UNIX #include "arch/unix/ArchDaemonUnix.h" #include "arch/unix/ArchLogUnix.h" #include "arch/unix/ArchNetworkBSD.h" -#include "arch/unix/ArchTimeUnix.h" #if HAVE_PTHREAD #include "arch/unix/ArchMultithreadPosix.h" @@ -64,12 +62,7 @@ to each method to those implementations. Clients should use the exactly one of these objects before attempting to call any method, typically at the beginning of \c main(). */ -class Arch : public ARCH_DAEMON, - public ARCH_LOG, - public ARCH_MULTITHREAD, - public ARCH_NETWORK, - public ArchString, - public ARCH_TIME +class Arch : public ARCH_DAEMON, public ARCH_LOG, public ARCH_MULTITHREAD, public ARCH_NETWORK, public ArchString { public: Arch(); @@ -105,6 +98,13 @@ public: */ static void sleep(double timeout); + /** + * @brief time + * @return Returns the number of seconds since some arbitrary starting time. + * This should return as high a precision as reasonable. + */ + static double time(); + private: static Arch *s_instance; }; diff --git a/src/lib/arch/CMakeLists.txt b/src/lib/arch/CMakeLists.txt index 9bcf7ac3e..0edb5df93 100644 --- a/src/lib/arch/CMakeLists.txt +++ b/src/lib/arch/CMakeLists.txt @@ -16,8 +16,6 @@ if(WIN32) win32/ArchMultithreadWindows.h win32/ArchNetworkWinsock.cpp win32/ArchNetworkWinsock.h - win32/ArchTimeWindows.cpp - win32/ArchTimeWindows.h win32/XArchWindows.cpp win32/XArchWindows.h ) @@ -32,8 +30,6 @@ elseif(UNIX) unix/ArchMultithreadPosix.h unix/ArchNetworkBSD.cpp unix/ArchNetworkBSD.h - unix/ArchTimeUnix.cpp - unix/ArchTimeUnix.h unix/XArchUnix.cpp unix/XArchUnix.h ) @@ -50,7 +46,6 @@ add_library(arch STATIC ${PLATFORM_CODE} IArchNetwork.h ArchString.cpp ArchString.h - IArchTime.h XArch.h ) diff --git a/src/lib/arch/IArchTime.h b/src/lib/arch/IArchTime.h deleted file mode 100644 index 1ca5695ff..000000000 --- a/src/lib/arch/IArchTime.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#include "common/IInterface.h" - -//! Interface for architecture dependent time operations -/*! -This interface defines the time operations required by -deskflow. Each architecture must implement this interface. -*/ -class IArchTime : public IInterface -{ -public: - //! @name manipulators - //@{ - - //! Get the current time - /*! - Returns the number of seconds since some arbitrary starting time. - This should return as high a precision as reasonable. - */ - virtual double time() = 0; - - //@} -}; diff --git a/src/lib/arch/unix/ArchTimeUnix.cpp b/src/lib/arch/unix/ArchTimeUnix.cpp deleted file mode 100644 index 6e4af55d2..000000000 --- a/src/lib/arch/unix/ArchTimeUnix.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "arch/unix/ArchTimeUnix.h" - -#if TIME_WITH_SYS_TIME -#include -#include -#else -#if HAVE_SYS_TIME_H -#include -#else -#include -#endif -#endif - -// -// ArchTimeUnix -// - -double ArchTimeUnix::time() -{ - struct timeval t; - gettimeofday(&t, nullptr); - return (double)t.tv_sec + 1.0e-6 * (double)t.tv_usec; -} diff --git a/src/lib/arch/unix/ArchTimeUnix.h b/src/lib/arch/unix/ArchTimeUnix.h deleted file mode 100644 index 0d8c8d99c..000000000 --- a/src/lib/arch/unix/ArchTimeUnix.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#include "arch/IArchTime.h" - -#define ARCH_TIME ArchTimeUnix - -//! Generic Unix implementation of IArchTime -class ArchTimeUnix : public IArchTime -{ -public: - ArchTimeUnix() = default; - ~ArchTimeUnix() override = default; - - // IArchTime overrides - double time() override; -}; diff --git a/src/lib/arch/win32/ArchTimeWindows.cpp b/src/lib/arch/win32/ArchTimeWindows.cpp deleted file mode 100644 index 71fa2558a..000000000 --- a/src/lib/arch/win32/ArchTimeWindows.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#include "arch/win32/ArchTimeWindows.h" - -#define WIN32_LEAN_AND_MEAN -#include - -#define MMNODRV // Disable: Installable driver support -#define MMNOSOUND // Disable: Sound support -#define MMNOWAVE // Disable: Waveform support -#define MMNOMIDI // Disable: MIDI support -#define MMNOAUX // Disable: Auxiliary audio support -#define MMNOMIXER // Disable: Mixer support -#define MMNOJOY // Disable: Joystick support -#define MMNOMCI // Disable: MCI support -#define MMNOMMIO // Disable: Multimedia file I/O support -#define MMNOMMSYSTEM // Disable: General MMSYSTEM functions -#include - -typedef WINMMAPI DWORD(WINAPI *PTimeGetTime)(void); - -static double s_freq = 0.0; -static HINSTANCE s_mmInstance = nullptr; -static PTimeGetTime s_tgt = nullptr; - -// -// ArchTimeWindows -// - -ArchTimeWindows::ArchTimeWindows() -{ - assert(s_freq == 0.0 || s_mmInstance == nullptr); - - LARGE_INTEGER freq; - if (QueryPerformanceFrequency(&freq) && freq.QuadPart != 0) { - s_freq = 1.0 / static_cast(freq.QuadPart); - } else { - // load winmm.dll and get timeGetTime - s_mmInstance = LoadLibrary("winmm"); - if (s_mmInstance != nullptr) { - s_tgt = (PTimeGetTime)GetProcAddress(s_mmInstance, "timeGetTime"); - } - } -} - -ArchTimeWindows::~ArchTimeWindows() -{ - s_freq = 0.0; - if (s_mmInstance == nullptr) { - FreeLibrary(static_cast(s_mmInstance)); - s_tgt = nullptr; - s_mmInstance = nullptr; - } -} - -double ArchTimeWindows::time() -{ - // get time. we try three ways, in order of descending precision - if (s_freq != 0.0) { - LARGE_INTEGER c; - QueryPerformanceCounter(&c); - return s_freq * static_cast(c.QuadPart); - } else if (s_tgt != nullptr) { - return 0.001 * static_cast(s_tgt()); - } else { - return 0.001 * static_cast(GetTickCount()); - } -} diff --git a/src/lib/arch/win32/ArchTimeWindows.h b/src/lib/arch/win32/ArchTimeWindows.h deleted file mode 100644 index b71670a3a..000000000 --- a/src/lib/arch/win32/ArchTimeWindows.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Deskflow -- mouse and keyboard sharing utility - * SPDX-FileCopyrightText: (C) 2012 - 2016 Symless Ltd. - * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman - * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception - */ - -#pragma once - -#include "arch/IArchTime.h" - -#define ARCH_TIME ArchTimeWindows - -//! Win32 implementation of IArchTime -class ArchTimeWindows : public IArchTime -{ -public: - ArchTimeWindows(); - ~ArchTimeWindows() override; - - // IArchTime overrides - double time() override; -};