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 @@
#include <cstdio>
#include <string>
#if __ANDROID__
# include <android/log.h>
#endif
#if defined(__unix__)
# define PTRACE
# include <sys/ptrace.h>
......@@ -30,6 +34,10 @@
# include <unistd.h>
#endif
#ifdef ERROR
# undef ERROR // b/127920555
#endif
namespace {
bool IsUnderDebugger()
......@@ -84,27 +92,71 @@ bool IsUnderDebugger()
#endif
}
} // anonymous namespace
namespace vk {
enum class Level
{
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
const bool traceToDebugOut = false;
const bool traceToFile = false;
if(traceToDebugOut)
{
char buffer[2048];
vsnprintf(buffer, sizeof(buffer), format, args);
# if defined(_WIN32)
::OutputDebugString(buffer);
char buffer[2048];
vsnprintf(buffer, sizeof(buffer), format, args);
# if defined(__ANDROID__)
logv_android(level, buffer);
# elif defined(_WIN32)
logv_std(level, buffer);
::OutputDebugString(buffer);
# else
printf("%s", buffer);
logv_std(level, buffer);
# endif
}
const bool traceToFile = false;
if(traceToFile)
{
FILE *file = fopen(TRACE_OUTPUT_FILE, "a");
......@@ -118,11 +170,15 @@ void tracev(const char *format, va_list args)
#endif // SWIFTSHADER_DISABLE_TRACE
}
} // anonymous namespace
namespace vk {
void trace(const char *format, ...)
{
va_list vararg;
va_start(vararg, format);
tracev(format, vararg);
logv(Level::DEBUG, format, vararg);
va_end(vararg);
}
......@@ -130,11 +186,7 @@ void warn(const char *format, ...)
{
va_list vararg;
va_start(vararg, format);
tracev(format, vararg);
va_end(vararg);
va_start(vararg, format);
vfprintf(stderr, format, vararg);
logv(Level::WARN, format, vararg);
va_end(vararg);
}
......@@ -143,11 +195,7 @@ void abort(const char *format, ...)
va_list vararg;
va_start(vararg, format);
tracev(format, vararg);
va_end(vararg);
va_start(vararg, format);
vfprintf(stderr, format, vararg);
logv(Level::FATAL, format, vararg);
va_end(vararg);
::abort();
......@@ -156,24 +204,21 @@ void abort(const char *format, ...)
void trace_assert(const char *format, ...)
{
static std::atomic<bool> asserted = { false };
va_list vararg;
va_start(vararg, format);
if(IsUnderDebugger() && !asserted.exchange(true))
{
// Abort after tracing and printing to stderr
tracev(format, vararg);
va_end(vararg);
va_list vararg;
va_start(vararg, format);
vfprintf(stderr, format, vararg);
logv(Level::FATAL, format, vararg);
va_end(vararg);
::abort();
}
else if(!asserted)
{
tracev(format, vararg);
va_list vararg;
va_start(vararg, format);
logv(Level::FATAL, format, 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