mirror of
https://github.com/verilator/verilator.git
synced 2025-01-01 04:07:34 +00:00
Internals: Add VL_MT_SAFE flags
This commit is contained in:
parent
e390d6779d
commit
840970e8f7
@ -616,35 +616,35 @@ static inline double VL_ROUND(double n) {
|
||||
|
||||
namespace VlOs {
|
||||
|
||||
extern uint64_t memUsageBytes(); ///< Return memory usage in bytes, or 0 if not implemented
|
||||
extern uint64_t memUsageBytes() VL_MT_SAFE; ///< Return memory usage in bytes, or 0 if unknown
|
||||
|
||||
// Internal: Record CPU time, starting point on construction, and current delta from that
|
||||
class DeltaCpuTime final {
|
||||
double m_start{}; // Time constructed at
|
||||
static double gettime();
|
||||
static double gettime() VL_MT_SAFE;
|
||||
|
||||
public:
|
||||
// Construct, and if startit is true, start() timer
|
||||
explicit DeltaCpuTime(bool startit) {
|
||||
if (startit) start();
|
||||
}
|
||||
void start() { m_start = gettime(); } // Start timer; record current time
|
||||
double deltaTime() const { // Return time between now and start()
|
||||
void start() VL_MT_SAFE { m_start = gettime(); } // Start timer; record current time
|
||||
double deltaTime() const VL_MT_SAFE { // Return time between now and start()
|
||||
return (m_start == 0.0) ? 0.0 : gettime() - m_start;
|
||||
}
|
||||
};
|
||||
// Internal: Record wall time, starting point on construction, and current delta from that
|
||||
class DeltaWallTime final {
|
||||
double m_start{}; // Time constructed at
|
||||
static double gettime();
|
||||
static double gettime() VL_MT_SAFE;
|
||||
|
||||
public:
|
||||
// Construct, and if startit is true, start() timer
|
||||
explicit DeltaWallTime(bool startit) {
|
||||
if (startit) start();
|
||||
}
|
||||
void start() { m_start = gettime(); } // Start timer; record current time
|
||||
double deltaTime() const { // Return time between now and start()
|
||||
void start() VL_MT_SAFE { m_start = gettime(); } // Start timer; record current time
|
||||
double deltaTime() const VL_MT_SAFE { // Return time between now and start()
|
||||
return (m_start == 0.0) ? 0.0 : gettime() - m_start;
|
||||
}
|
||||
};
|
||||
|
@ -38,7 +38,7 @@ namespace VlOs {
|
||||
//=========================================================================
|
||||
// VlOs::VlGetCpuTime/VlGetWallTime implementation
|
||||
|
||||
double DeltaCpuTime::gettime() {
|
||||
double DeltaCpuTime::gettime() VL_MT_SAFE {
|
||||
#if defined(_WIN32) || defined(__MINGW32__)
|
||||
FILETIME lpCreationTime, lpExitTime, lpKernelTime, lpUserTime;
|
||||
if (0
|
||||
@ -51,11 +51,12 @@ double DeltaCpuTime::gettime() {
|
||||
#else
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
|
||||
timespec ts;
|
||||
if (0 != clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts)) return ts.tv_sec + ts.tv_nsec * 1e-9;
|
||||
if (0 != clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts)) // MT-Safe
|
||||
return ts.tv_sec + ts.tv_nsec * 1e-9;
|
||||
#endif
|
||||
return 0.0;
|
||||
}
|
||||
double DeltaWallTime::gettime() {
|
||||
double DeltaWallTime::gettime() VL_MT_SAFE {
|
||||
#if defined(_WIN32) || defined(__MINGW32__)
|
||||
FILETIME ft; // contains number of 0.1us intervals since the beginning of 1601 UTC.
|
||||
GetSystemTimeAsFileTime(&ft);
|
||||
@ -65,7 +66,8 @@ double DeltaWallTime::gettime() {
|
||||
#else
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
|
||||
timespec ts;
|
||||
if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) return ts.tv_sec + ts.tv_nsec * 1e-9;
|
||||
if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) // MT-Safe
|
||||
return ts.tv_sec + ts.tv_nsec * 1e-9;
|
||||
return 0.0;
|
||||
#endif
|
||||
}
|
||||
@ -73,7 +75,7 @@ double DeltaWallTime::gettime() {
|
||||
//=========================================================================
|
||||
// VlOs::memUsageBytes implementation
|
||||
|
||||
uint64_t memUsageBytes() {
|
||||
uint64_t memUsageBytes() VL_MT_SAFE {
|
||||
#if defined(_WIN32) || defined(__MINGW32__)
|
||||
const HANDLE process = GetCurrentProcess();
|
||||
PROCESS_MEMORY_COUNTERS pmc;
|
||||
|
Loading…
Reference in New Issue
Block a user