Commit 38c760d5 by Ben Clayton

VkDebug: Android - log messages to logcat.

Refactor the code so that logging level can be included. Bug: b/144093703 Change-Id: I266384b7f971109214ae8d435209478ba705bc66 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/40951 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Tested-by: 's avatarBen Clayton <bclayton@google.com>
parent 534d12cd
...@@ -19,6 +19,10 @@ ...@@ -19,6 +19,10 @@
#include <cstdio> #include <cstdio>
#include <string> #include <string>
#if __ANDROID__
# include <android/log.h>
#endif
#if defined(__unix__) #if defined(__unix__)
# define PTRACE # define PTRACE
# include <sys/ptrace.h> # include <sys/ptrace.h>
...@@ -30,6 +34,10 @@ ...@@ -30,6 +34,10 @@
# include <unistd.h> # include <unistd.h>
#endif #endif
#ifdef ERROR
# undef ERROR // b/127920555
#endif
namespace { namespace {
bool IsUnderDebugger() bool IsUnderDebugger()
...@@ -84,27 +92,71 @@ bool IsUnderDebugger() ...@@ -84,27 +92,71 @@ bool IsUnderDebugger()
#endif #endif
} }
} // anonymous namespace enum class Level
{
namespace vk { DEBUG,
INFO,
WARN,
ERROR,
FATAL,
};
#ifdef __ANDROID__
void logv_android(Level level, const char *msg)
{
switch(level)
{
case Level::DEBUG:
__android_log_write(ANDROID_LOG_DEBUG, "SwiftShader", msg);
break;
case Level::INFO:
__android_log_write(ANDROID_LOG_INFO, "SwiftShader", msg);
break;
case Level::WARN:
__android_log_write(ANDROID_LOG_WARN, "SwiftShader", msg);
break;
case Level::ERROR:
__android_log_write(ANDROID_LOG_ERROR, "SwiftShader", msg);
break;
case Level::FATAL:
__android_log_write(ANDROID_LOG_FATAL, "SwiftShader", msg);
break;
}
}
#else
void logv_std(Level level, const char *msg)
{
switch(level)
{
case Level::DEBUG:
case Level::INFO:
fprintf(stdout, "%s", msg);
break;
case Level::WARN:
case Level::ERROR:
case Level::FATAL:
fprintf(stderr, "%s", msg);
break;
}
}
#endif
void tracev(const char *format, va_list args) void logv(Level level, const char *format, va_list args)
{ {
#ifndef SWIFTSHADER_DISABLE_TRACE #ifndef SWIFTSHADER_DISABLE_TRACE
const bool traceToDebugOut = false; char buffer[2048];
const bool traceToFile = false; vsnprintf(buffer, sizeof(buffer), format, args);
if(traceToDebugOut) # if defined(__ANDROID__)
{ logv_android(level, buffer);
char buffer[2048]; # elif defined(_WIN32)
vsnprintf(buffer, sizeof(buffer), format, args); logv_std(level, buffer);
# if defined(_WIN32) ::OutputDebugString(buffer);
::OutputDebugString(buffer);
# else # else
printf("%s", buffer); logv_std(level, buffer);
# endif # endif
}
const bool traceToFile = false;
if(traceToFile) if(traceToFile)
{ {
FILE *file = fopen(TRACE_OUTPUT_FILE, "a"); FILE *file = fopen(TRACE_OUTPUT_FILE, "a");
...@@ -118,11 +170,15 @@ void tracev(const char *format, va_list args) ...@@ -118,11 +170,15 @@ void tracev(const char *format, va_list args)
#endif // SWIFTSHADER_DISABLE_TRACE #endif // SWIFTSHADER_DISABLE_TRACE
} }
} // anonymous namespace
namespace vk {
void trace(const char *format, ...) void trace(const char *format, ...)
{ {
va_list vararg; va_list vararg;
va_start(vararg, format); va_start(vararg, format);
tracev(format, vararg); logv(Level::DEBUG, format, vararg);
va_end(vararg); va_end(vararg);
} }
...@@ -130,11 +186,7 @@ void warn(const char *format, ...) ...@@ -130,11 +186,7 @@ void warn(const char *format, ...)
{ {
va_list vararg; va_list vararg;
va_start(vararg, format); va_start(vararg, format);
tracev(format, vararg); logv(Level::WARN, format, vararg);
va_end(vararg);
va_start(vararg, format);
vfprintf(stderr, format, vararg);
va_end(vararg); va_end(vararg);
} }
...@@ -143,11 +195,7 @@ void abort(const char *format, ...) ...@@ -143,11 +195,7 @@ void abort(const char *format, ...)
va_list vararg; va_list vararg;
va_start(vararg, format); va_start(vararg, format);
tracev(format, vararg); logv(Level::FATAL, format, vararg);
va_end(vararg);
va_start(vararg, format);
vfprintf(stderr, format, vararg);
va_end(vararg); va_end(vararg);
::abort(); ::abort();
...@@ -156,24 +204,21 @@ void abort(const char *format, ...) ...@@ -156,24 +204,21 @@ void abort(const char *format, ...)
void trace_assert(const char *format, ...) void trace_assert(const char *format, ...)
{ {
static std::atomic<bool> asserted = { false }; static std::atomic<bool> asserted = { false };
va_list vararg;
va_start(vararg, format);
if(IsUnderDebugger() && !asserted.exchange(true)) if(IsUnderDebugger() && !asserted.exchange(true))
{ {
// Abort after tracing and printing to stderr // Abort after tracing and printing to stderr
tracev(format, vararg); va_list vararg;
va_end(vararg);
va_start(vararg, format); va_start(vararg, format);
vfprintf(stderr, format, vararg); logv(Level::FATAL, format, vararg);
va_end(vararg); va_end(vararg);
::abort(); ::abort();
} }
else if(!asserted) else if(!asserted)
{ {
tracev(format, vararg); va_list vararg;
va_start(vararg, format);
logv(Level::FATAL, format, vararg);
va_end(vararg); va_end(vararg);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment