yum-mirror/slang

Making it easier to work with shaders

git clone https://git.yummers.dev/yum-mirror/slang

Ellie Hermaszewskaformatf65d756bf

master
1.8 KiB84 linesraw
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_local unsigned int g_logLevel = LogLevel::Silent;
18
19static bool getEnvironmentVariable(const char* name, Slang::String& out)
20{
21#ifdef _WIN32
22    char* envVar = nullptr;
23    size_t sz = 0;
24    if (_dupenv_s(&envVar, &sz, name) == 0 && envVar != nullptr)
25    {
26        out = envVar;
27        free(envVar);
28    }
29#else
30    if (const char* envVar = std::getenv(name))
31    {
32        out = envVar;
33    }
34#endif
35    return out.getLength() > 0;
36}
37
38bool isRecordLayerEnabled()
39{
40    Slang::String envVarStr;
41    if (getEnvironmentVariable(kRecordLayerEnvVar, envVarStr))
42    {
43        if (envVarStr == "1")
44        {
45            return true;
46        }
47    }
48    return false;
49}
50
51void setLogLevel()
52{
53    // We only want to set the log level once
54    if (g_logLevel != LogLevel::Silent)
55    {
56        return;
57    }
58
59    Slang::String envVarStr;
60    if (getEnvironmentVariable(kRecordLayerLogLevel, envVarStr))
61    {
62        unsigned int logLevel = Slang::stringToUInt(envVarStr);
63        g_logLevel = std::min((unsigned int)(LogLevel::Verbose), logLevel);
64        return;
65    }
66}
67
68void slangRecordLog(LogLevel logLevel, const char* fmt, ...)
69{
70    if (logLevel > g_logLevel)
71    {
72        return;
73    }
74
75    Slang::StringBuilder builder;
76
77    va_list args;
78    va_start(args, fmt);
79    Slang::StringUtil::append(fmt, args, builder);
80    va_end(args);
81
82    fprintf(stdout, "[slang-record-replay]: %s", builder.begin());
83}
84} // namespace SlangRecord