yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
f65d756bf
master
1 2#include "record-utility.h" 3 4#include "../../core/slang-string-util.h" 5#include "../../core/slang-string.h" 6 7#include <mutex> 8#include <stdarg.h> 9#include <stdlib.h> 10#include <string.h> 11 12constexpr const char * kRecordLayerEnvVar = "SLANG_RECORD_LAYER" ; 13constexpr const char * kRecordLayerLogLevel = "SLANG_RECORD_LOG_LEVEL" ; 14 15namespace SlangRecord 16{ 17static thread_localunsigned int g_logLevel = LogLevel ::Silent ; 18 19static bool getEnvironmentVariable (const char * name ,Slang ::String & out ) 20{ 21#ifdef _WIN32 22char * envVar = nullptr ; 23size_t sz = 0 ; 24if (_dupenv_s (& envVar ,& sz ,name )== 0 && envVar != nullptr ) 25 { 26out = envVar ; 27free (envVar ); 28 } 29#else 30if (const char * envVar = std::getenv (name )) 31 { 32out = envVar ; 33 } 34#endif 35return out .getLength ()> 0 ; 36} 37 38bool isRecordLayerEnabled () 39{ 40Slang ::String envVarStr ; 41if (getEnvironmentVariable (kRecordLayerEnvVar ,envVarStr )) 42 { 43if (envVarStr == "1" ) 44 { 45return true; 46 } 47 } 48return false; 49} 50 51void setLogLevel () 52{ 53// We only want to set the log level once 54if (g_logLevel != LogLevel ::Silent ) 55 { 56return ; 57 } 58 59Slang ::String envVarStr ; 60if (getEnvironmentVariable (kRecordLayerLogLevel ,envVarStr )) 61 { 62unsigned int logLevel = Slang ::stringToUInt (envVarStr ); 63g_logLevel = std::min ((unsigned int )(LogLevel ::Verbose ),logLevel ); 64return ; 65 } 66} 67 68void slangRecordLog (LogLevel logLevel ,const char * fmt , ...) 69{ 70if (logLevel > g_logLevel ) 71 { 72return ; 73 } 74 75Slang ::StringBuilder builder ; 76 77va_list args ; 78va_start (args ,fmt ); 79Slang ::StringUtil ::append (fmt ,args ,builder ); 80va_end (args ); 81 82fprintf (stdout ,"[slang-record-replay]: %s" ,builder .begin ()); 83} 84}// namespace SlangRecord