Browse Source

Introduce new header file for time-related utilities

Signed-off-by: falkTX <falktx@falktx.com>
pull/1780/head
falkTX 2 years ago
parent
commit
54cdc0b5e8
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
9 changed files with 172 additions and 42 deletions
  1. +2
    -0
      source/bridges-plugin/CarlaBridgePlugin.cpp
  2. +2
    -1
      source/bridges-ui/CarlaBridgeFormat.cpp
  3. +2
    -1
      source/bridges-ui/CarlaBridgeToolkitNative.cpp
  4. +3
    -1
      source/modules/water/files/TemporaryFile.cpp
  5. +2
    -1
      source/utils/CarlaBridgeUtils.cpp
  6. +1
    -1
      source/utils/CarlaRunner.hpp
  7. +1
    -0
      source/utils/CarlaThread.hpp
  8. +159
    -0
      source/utils/CarlaTimeUtils.hpp
  9. +0
    -37
      source/utils/CarlaUtils.hpp

+ 2
- 0
source/bridges-plugin/CarlaBridgePlugin.cpp View File

@@ -26,6 +26,8 @@
#include "CarlaBackendUtils.hpp" #include "CarlaBackendUtils.hpp"
#include "CarlaJuceUtils.hpp" #include "CarlaJuceUtils.hpp"
#include "CarlaMainLoop.hpp" #include "CarlaMainLoop.hpp"
#include "CarlaTimeUtils.hpp"

#include "CarlaMIDI.h" #include "CarlaMIDI.h"


#ifdef CARLA_OS_MAC #ifdef CARLA_OS_MAC


+ 2
- 1
source/bridges-ui/CarlaBridgeFormat.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Bridge UI * Carla Bridge UI
* Copyright (C) 2011-2021 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2011-2023 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -20,6 +20,7 @@


#include "CarlaBase64Utils.hpp" #include "CarlaBase64Utils.hpp"
#include "CarlaProcessUtils.hpp" #include "CarlaProcessUtils.hpp"
#include "CarlaTimeUtils.hpp"


#include "CarlaMIDI.h" #include "CarlaMIDI.h"




+ 2
- 1
source/bridges-ui/CarlaBridgeToolkitNative.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Bridge UI * Carla Bridge UI
* Copyright (C) 2014-2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2014-2023 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -20,6 +20,7 @@


#include "CarlaMainLoop.hpp" #include "CarlaMainLoop.hpp"
#include "CarlaPluginUI.hpp" #include "CarlaPluginUI.hpp"
#include "CarlaTimeUtils.hpp"
#include "CarlaUtils.h" #include "CarlaUtils.h"


#if defined(CARLA_OS_MAC) && defined(BRIDGE_COCOA) #if defined(CARLA_OS_MAC) && defined(BRIDGE_COCOA)


+ 3
- 1
source/modules/water/files/TemporaryFile.cpp View File

@@ -3,7 +3,7 @@
This file is part of the Water library. This file is part of the Water library.
Copyright (c) 2016 ROLI Ltd. Copyright (c) 2016 ROLI Ltd.
Copyright (C) 2017 Filipe Coelho <falktx@falktx.com>
Copyright (C) 2017-2023 Filipe Coelho <falktx@falktx.com>
Permission is granted to use this software under the terms of the ISC license Permission is granted to use this software under the terms of the ISC license
http://www.isc.org/downloads/software-support-policy/isc-license/ http://www.isc.org/downloads/software-support-policy/isc-license/
@@ -26,6 +26,8 @@
#include "TemporaryFile.h" #include "TemporaryFile.h"
#include "../maths/Random.h" #include "../maths/Random.h"
#include "CarlaTimeUtils.hpp"
namespace water { namespace water {
static File createTempFile (const File& parentDirectory, String name, static File createTempFile (const File& parentDirectory, String name,


+ 2
- 1
source/utils/CarlaBridgeUtils.cpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Bridge utils * Carla Bridge utils
* Copyright (C) 2013-2020 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2013-2023 Filipe Coelho <falktx@falktx.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
@@ -17,6 +17,7 @@


#include "CarlaBridgeUtils.hpp" #include "CarlaBridgeUtils.hpp"
#include "CarlaShmUtils.hpp" #include "CarlaShmUtils.hpp"
#include "CarlaTimeUtils.hpp"


// must be last // must be last
#include "jackbridge/JackBridge.hpp" #include "jackbridge/JackBridge.hpp"


+ 1
- 1
source/utils/CarlaRunner.hpp View File

@@ -1,6 +1,6 @@
/* /*
* Carla Runner * Carla Runner
* Copyright (C) 2022 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2022-2023 Filipe Coelho <falktx@falktx.com>
* *
* Permission to use, copy, modify, and/or distribute this software for any purpose with * Permission to use, copy, modify, and/or distribute this software for any purpose with
* or without fee is hereby granted, provided that the above copyright notice and this * or without fee is hereby granted, provided that the above copyright notice and this


+ 1
- 0
source/utils/CarlaThread.hpp View File

@@ -21,6 +21,7 @@
#include "CarlaMutex.hpp" #include "CarlaMutex.hpp"
#include "CarlaString.hpp" #include "CarlaString.hpp"
#include "CarlaProcessUtils.hpp" #include "CarlaProcessUtils.hpp"
#include "CarlaTimeUtils.hpp"


#ifdef CARLA_OS_WASM #ifdef CARLA_OS_WASM
# error Threads do not work under wasm! # error Threads do not work under wasm!


+ 159
- 0
source/utils/CarlaTimeUtils.hpp View File

@@ -0,0 +1,159 @@
/*
* Carla time utils
* Copyright (C) 2011-2023 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/

#ifndef CARLA_TIME_UTILS_HPP_INCLUDED
#define CARLA_TIME_UTILS_HPP_INCLUDED

#include "CarlaUtils.hpp"

#include <ctime>

#ifdef CARLA_OS_WIN
# include <mmsystem.h>
#endif

// --------------------------------------------------------------------------------------------------------------------
// carla_*sleep

/*
* Sleep for 'secs' seconds.
*/
static inline
void carla_sleep(const uint secs) noexcept
{
CARLA_SAFE_ASSERT_RETURN(secs > 0,);

try {
#ifdef CARLA_OS_WIN
::Sleep(secs * 1000);
#else
::sleep(secs);
#endif
} CARLA_SAFE_EXCEPTION("carla_sleep");
}

/*
* Sleep for 'msecs' milliseconds.
*/
static inline
void carla_msleep(const uint msecs) noexcept
{
CARLA_SAFE_ASSERT_RETURN(msecs > 0,);

try {
#ifdef CARLA_OS_WIN
::Sleep(msecs);
#else
::usleep(msecs * 1000);
#endif
} CARLA_SAFE_EXCEPTION("carla_msleep");
}

// --------------------------------------------------------------------------------------------------------------------
// carla_gettime_*

/*
* Get a monotonically-increasing time in milliseconds.
*/
static inline
time_t carla_gettime_ms() noexcept
{
#if defined(CARLA_OS_MAC)
static const time_t s = clock_gettime_nsec_np(CLOCK_UPTIME_RAW) / 1000000;
return (clock_gettime_nsec_np(CLOCK_UPTIME_RAW) / 1000000) - s;
#elif defined(CARLA_OS_WIN)
return static_cast<time_t>(timeGetTime());
#else
static struct {
timespec ts;
int r;
time_t ms;
} s = { {}, clock_gettime(CLOCK_MONOTONIC, &s.ts), s.ts.tv_sec * 1000 + s.ts.tv_nsec / 1000000 };

timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000) - s.ms;
#endif
}

/*
* Get a monotonically-increasing time in microseconds.
*/
static inline
uint64_t carla_gettime_us() noexcept
{
#if defined(CARLA_OS_MAC)
static const uint64_t s = clock_gettime_nsec_np(CLOCK_UPTIME_RAW) / 1000;
return (clock_gettime_nsec_np(CLOCK_UPTIME_RAW) / 1000) - s;
#elif defined(CARLA_OS_WIN)
static struct {
LARGE_INTEGER freq;
LARGE_INTEGER counter;
BOOL r1, r2;
} s = { {}, {}, QueryPerformanceFrequency(&s.freq), QueryPerformanceCounter(&s.counter) };

LARGE_INTEGER counter;
QueryPerformanceCounter(&counter);
return (counter.QuadPart - s.counter.QuadPart) * 1000000 / s.freq.QuadPart;
#else
static struct {
timespec ts;
int r;
uint64_t us;
} s = { {}, clock_gettime(CLOCK_MONOTONIC, &s.ts), s.ts.tv_sec * 1000000 + s.ts.tv_nsec / 1000 };

timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * 1000000 + ts.tv_nsec / 1000) - s.us;
#endif
}

/*
* Get a monotonically-increasing time in nanoseconds.
*/
static inline
uint64_t carla_gettime_ns() noexcept
{
#if defined(CARLA_OS_MAC)
static const uint64_t s = clock_gettime_nsec_np(CLOCK_UPTIME_RAW);
return clock_gettime_nsec_np(CLOCK_UPTIME_RAW) - s;
#elif defined(CARLA_OS_WIN)
static struct {
LARGE_INTEGER freq;
LARGE_INTEGER counter;
BOOL r1, r2;
} s = { {}, {}, QueryPerformanceFrequency(&s.freq), QueryPerformanceCounter(&s.counter) };

LARGE_INTEGER counter;
QueryPerformanceCounter(&counter);
return (counter.QuadPart - s.counter.QuadPart) * 1000000000ULL / s.freq.QuadPart;
#else
static struct {
timespec ts;
int r;
uint64_t ns;
} s = { {}, clock_gettime(CLOCK_MONOTONIC, &s.ts), s.ts.tv_sec * 1000000000ULL + s.ts.tv_nsec };

timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (ts.tv_sec * 1000000000ULL + ts.tv_nsec) - s.ns;
#endif
}

// --------------------------------------------------------------------------------------------------------------------

#endif // CARLA_TIME_UTILS_HPP_INCLUDED

+ 0
- 37
source/utils/CarlaUtils.hpp View File

@@ -290,43 +290,6 @@ void carla_safe_exception(const char* const exception, const char* const file, c
carla_stderr2("Carla exception caught: \"%s\" in file %s, line %i", exception, file, line); carla_stderr2("Carla exception caught: \"%s\" in file %s, line %i", exception, file, line);
} }


// --------------------------------------------------------------------------------------------------------------------
// carla_*sleep

/*
* Sleep for 'secs' seconds.
*/
static inline
void carla_sleep(const uint secs) noexcept
{
CARLA_SAFE_ASSERT_RETURN(secs > 0,);

try {
#ifdef CARLA_OS_WIN
::Sleep(secs * 1000);
#else
::sleep(secs);
#endif
} CARLA_SAFE_EXCEPTION("carla_sleep");
}

/*
* Sleep for 'msecs' milliseconds.
*/
static inline
void carla_msleep(const uint msecs) noexcept
{
CARLA_SAFE_ASSERT_RETURN(msecs > 0,);

try {
#ifdef CARLA_OS_WIN
::Sleep(msecs);
#else
::usleep(msecs * 1000);
#endif
} CARLA_SAFE_EXCEPTION("carla_msleep");
}

// -------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------
// carla_setenv // carla_setenv




Loading…
Cancel
Save