Log instead of warn of unsupported extensions
Currently we produce a warning every time an unsupported extension is
used. The original bug (b/139528538) called for logging these structs
silently unless a debugger's attached.
So I've replaced all of our warnings for unsupported structs with
calls to LOG_TRAP. This is an update to TRACE_ASSERT. LOG_TRAP will
never emit to the debug log, instead it will only print to a file if
writing to files is enabled for logv.
Bug: b/148415347
Change-Id: Ib4ad2b20b3dffce4fac597c891b2f5ee23e032c4
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/41348
Tested-by: Sean Risser <srisser@google.com>
Presubmit-Ready: Sean Risser <srisser@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/System/Debug.cpp b/src/System/Debug.cpp
index 8be91a1..1b91e14 100644
--- a/src/System/Debug.cpp
+++ b/src/System/Debug.cpp
@@ -98,11 +98,13 @@
enum class Level
{
+ Verbose,
Debug,
Info,
Warn,
Error,
Fatal,
+ Disabled,
};
#ifdef __ANDROID__
@@ -125,6 +127,8 @@
case Level::Fatal:
__android_log_write(ANDROID_LOG_FATAL, "SwiftShader", msg);
break;
+ default:
+ break;
}
}
#else
@@ -141,32 +145,32 @@
case Level::Fatal:
fprintf(stderr, "%s", msg);
break;
+ default:
+ break;
}
}
#endif
void logv(Level level, const char *format, va_list args)
{
- if(static_cast<int>(level) < static_cast<int>(Level::SWIFTSHADER_LOGGING_LEVEL))
+ if(static_cast<int>(level) >= static_cast<int>(Level::SWIFTSHADER_LOGGING_LEVEL))
{
- return;
- }
-
#ifndef SWIFTSHADER_DISABLE_TRACE
- char buffer[2048];
- vsnprintf(buffer, sizeof(buffer), format, args);
+ char buffer[2048];
+ vsnprintf(buffer, sizeof(buffer), format, args);
# if defined(__ANDROID__)
- logv_android(level, buffer);
+ logv_android(level, buffer);
# elif defined(_WIN32)
- logv_std(level, buffer);
- ::OutputDebugString(buffer);
+ logv_std(level, buffer);
+ ::OutputDebugString(buffer);
# else
- logv_std(level, buffer);
+ logv_std(level, buffer);
# endif
+ }
- const bool traceToFile = false;
- if(traceToFile)
+ const Level traceToFileLevel = Level::Disabled;
+ if(static_cast<int>(level) >= static_cast<int>(traceToFileLevel))
{
FILE *file = fopen(TRACE_OUTPUT_FILE, "a");
@@ -210,8 +214,10 @@
::abort();
}
-void trace_assert(const char *format, ...)
+void log_trap(const char *format, ...)
{
+ // If enabled, log_assert will log all messages, and otherwise ignore them
+ // unless a debugger is attached.
static std::atomic<bool> asserted = { false };
if(IsUnderDebugger() && !asserted.exchange(true))
{
@@ -227,7 +233,7 @@
{
va_list vararg;
va_start(vararg, format);
- logv(Level::Fatal, format, vararg);
+ logv(Level::Verbose, format, vararg);
va_end(vararg);
}
}