cpu timer

v1
Brett 2023-09-13 16:49:56 -04:00
parent 9e4bfad087
commit e2d932ea78
5 changed files with 110 additions and 46 deletions

View File

@ -88,38 +88,38 @@ endif()
message("BLT ${CMAKE_PROJECT_VERSION} Successfully included!") message("BLT ${CMAKE_PROJECT_VERSION} Successfully included!")
if(${BUILD_TESTS}) #if(${BUILD_TESTS})
project(BLT_TESTS) # project(BLT_TESTS)
#
file(GLOB_RECURSE TESTS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/tests/*.cpp") # file(GLOB_RECURSE TESTS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/tests/*.cpp")
#
add_executable(BLT_TESTS ${TESTS_FILES}) # add_executable(BLT_TESTS ${TESTS_FILES})
#
target_link_libraries(BLT_TESTS PUBLIC BLT) # target_link_libraries(BLT_TESTS PUBLIC BLT)
#
if(MSVC) # if(MSVC)
#target_compile_options(BLT_TESTS PRIVATE /W4) # #target_compile_options(BLT_TESTS PRIVATE /W4)
if(${CMAKE_BUILD_TYPE} MATCHES Debug) # if(${CMAKE_BUILD_TYPE} MATCHES Debug)
target_link_options(BLT_TESTS PRIVATE /DEBUG) # target_link_options(BLT_TESTS PRIVATE /DEBUG)
endif() # endif()
else() # else()
target_compile_options(BLT_TESTS PRIVATE -Wall -Wextra -Wpedantic) # target_compile_options(BLT_TESTS PRIVATE -Wall -Wextra -Wpedantic)
endif() # endif()
#
if (${ENABLE_ADDRSAN} MATCHES ON) # if (${ENABLE_ADDRSAN} MATCHES ON)
target_compile_options(BLT_TESTS PRIVATE -fsanitize=address) # target_compile_options(BLT_TESTS PRIVATE -fsanitize=address)
target_link_options(BLT_TESTS PRIVATE -fsanitize=address) # target_link_options(BLT_TESTS PRIVATE -fsanitize=address)
endif () # endif ()
#
if (${ENABLE_UBSAN} MATCHES ON) # if (${ENABLE_UBSAN} MATCHES ON)
target_compile_options(BLT_TESTS PRIVATE -fsanitize=undefined) # target_compile_options(BLT_TESTS PRIVATE -fsanitize=undefined)
target_link_options(BLT_TESTS PRIVATE -fsanitize=undefined) # target_link_options(BLT_TESTS PRIVATE -fsanitize=undefined)
endif () # endif ()
#
if (${ENABLE_TSAN} MATCHES ON) # if (${ENABLE_TSAN} MATCHES ON)
target_compile_options(BLT_TESTS PRIVATE -fsanitize=thread) # target_compile_options(BLT_TESTS PRIVATE -fsanitize=thread)
target_link_options(BLT_TESTS PRIVATE -fsanitize=thread) # target_link_options(BLT_TESTS PRIVATE -fsanitize=thread)
endif () # endif ()
#
message("BLT tests included!") # message("BLT tests included!")
endif() #endif()

View File

@ -13,6 +13,13 @@
namespace blt::fs namespace blt::fs
{ {
class path
{
private:
std::vector<std::string> paths;
public:
};
/** /**
* A simple interface which provides a way of reading the next block of data from a resource. * A simple interface which provides a way of reading the next block of data from a resource.
@ -102,7 +109,8 @@ namespace blt::fs
int read(char* buffer, size_t bytes) override; int read(char* buffer, size_t bytes) override;
size_t gcount() final { size_t gcount() final
{
return m_stream.gcount(); return m_stream.gcount();
} }

View File

@ -7,6 +7,20 @@
#ifndef BLT_HASH_MAP_H #ifndef BLT_HASH_MAP_H
#define BLT_HASH_MAP_H #define BLT_HASH_MAP_H
namespace blt
{
// template<typename K, typename V, typename Hash = std::hash<K>, typename Eq = std::equal_to<K>>
// class hashmap
// {
// private:
//
// public:
//
// };
}
#ifndef HASHMAP #ifndef HASHMAP
#if defined __has_include && __has_include(<parallel_hashmap/phmap.h>) #if defined __has_include && __has_include(<parallel_hashmap/phmap.h>)

View File

@ -11,39 +11,79 @@
#ifndef BLT_TIME_H #ifndef BLT_TIME_H
#define BLT_TIME_H #define BLT_TIME_H
namespace blt::system { namespace blt::system
static inline std::string ensureHasDigits(int current, int digits) { {
static inline std::string ensureHasDigits(int current, int digits)
{
std::string asString = std::to_string(current); std::string asString = std::to_string(current);
auto length = digits - asString.length(); auto length = digits - asString.length();
if (length <= 0) if (length <= 0)
return asString; return asString;
std::string zeros; std::string zeros;
zeros.reserve(length); zeros.reserve(length);
for (unsigned int i = 0; i < length; i++){ for (unsigned int i = 0; i < length; i++)
{
zeros += '0'; zeros += '0';
} }
return zeros + asString; return zeros + asString;
} }
static inline auto getCurrentTimeNanoseconds() { static inline auto getCurrentTimeNanoseconds()
{
return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); return std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count();
} }
static inline auto nanoTime() { static inline auto nanoTime()
{
return getCurrentTimeNanoseconds(); return getCurrentTimeNanoseconds();
} }
static inline auto getCurrentTimeMilliseconds(){ static inline auto getCurrentTimeMilliseconds()
{
return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count();
} }
static inline auto getCPUThreadTime()
{
#ifdef unix
timespec time{};
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &time);
return time.tv_nsec;
#else
return std::clock();
#endif
}
static inline auto getCPUTime()
{
#ifdef unix
timespec time{};
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time);
return time.tv_nsec;
#else
return std::clock();
#endif
}
static inline auto getCPUTimerResolution()
{
#ifdef unix
timespec res{};
clock_getres(CLOCK_PROCESS_CPUTIME_ID, &res);
return res.tv_nsec;
#else
return CLOCKS_PER_SECOND;
#endif
}
/** /**
* Standard time string is formatted as follows: * Standard time string is formatted as follows:
* Year-Month-Date Hour:Min:Second * Year-Month-Date Hour:Min:Second
* If you do not want a space in the string use getTimeStringFS(); (Time String for easy filesystem) * If you do not want a space in the string use getTimeStringFS(); (Time String for easy filesystem)
* @return the BLT standard string of time.now * @return the BLT standard string of time.now
*/ */
static inline std::string getTimeString() { static inline std::string getTimeString()
{
auto t = std::time(nullptr); auto t = std::time(nullptr);
auto now = std::localtime(&t); auto now = std::localtime(&t);
std::stringstream timeString; std::stringstream timeString;
@ -66,7 +106,8 @@ namespace blt::system {
* Hour:Min:Second * Hour:Min:Second
* @return the BLT standard logging string of time.now * @return the BLT standard logging string of time.now
*/ */
static inline std::string getTimeStringLog() { static inline std::string getTimeStringLog()
{
auto t = std::time(nullptr); auto t = std::time(nullptr);
auto now = std::localtime(&t); auto now = std::localtime(&t);
std::string timeString = "["; std::string timeString = "[";
@ -82,7 +123,8 @@ namespace blt::system {
/** /**
* @return the BLT standard string of time.now (See getTimeString()) that is filesystem friendly (FAT compatible). * @return the BLT standard string of time.now (See getTimeString()) that is filesystem friendly (FAT compatible).
*/ */
static inline std::string getTimeStringFS() { static inline std::string getTimeStringFS()
{
auto t = std::time(nullptr); auto t = std::time(nullptr);
auto now = std::localtime(&t); auto now = std::localtime(&t);
std::stringstream timeString; std::stringstream timeString;

@ -1 +1 @@
Subproject commit 77cab8192a879e5d27188f97e8f2080dd7e36ca8 Subproject commit 93201da2ba5a6aba0a6e57ada64973555629b3e3