78 lines
2.1 KiB
C++
78 lines
2.1 KiB
C++
/*
|
|
* Copyright (c) 2025 Amlogic, Inc. All rights reserved.
|
|
*
|
|
* This source code is subject to the terms and conditions defined in the
|
|
* file 'LICENSE' which is part of this source code package.
|
|
*
|
|
* Description:
|
|
*/
|
|
#include <unistd.h>
|
|
#include <stdlib.h>
|
|
#include "MesonLog.h"
|
|
#include <time.h>
|
|
|
|
#define MAX_MSG_BUF 512
|
|
#define TIME_BUF 64
|
|
|
|
static LogLevel g_backend_debug = LOG_LEVEL_INFO;
|
|
static int g_log_to_logcat = 0;
|
|
|
|
void meson_log_set_debug_level(LogLevel level) {
|
|
fprintf(stderr, "meson_log_set_debug_level:%d\n", level);
|
|
g_backend_debug = level;
|
|
}
|
|
void meson_log_set_log_to_logcat(int to_logcat) {
|
|
fprintf(stderr, "meson_log_set_log_to_logcat:%d\n", to_logcat);
|
|
|
|
g_log_to_logcat = to_logcat;
|
|
}
|
|
static const char* log_level_to_string(LogLevel level) {
|
|
switch (level) {
|
|
case LOG_LEVEL_ERROR:
|
|
return "[E]MesonDisplay: ";
|
|
case LOG_LEVEL_WARN:
|
|
return "[W]MesonDisplay: ";
|
|
case LOG_LEVEL_INFO:
|
|
return "[I]MesonDisplay: ";
|
|
case LOG_LEVEL_DEBUG:
|
|
return "[D]MesonDisplay: ";
|
|
case LOG_LEVEL_VERBOSE:
|
|
return "[V]MesonDisplay: ";
|
|
default:
|
|
return "UNKNOWN";
|
|
}
|
|
}
|
|
|
|
void meson_log_impl(LogLevel level, const char *fmt, ...) {
|
|
struct timespec ts;
|
|
char time_buf[TIME_BUF] = {0};
|
|
char final_msg[MAX_MSG_BUF] = {0};
|
|
va_list args;
|
|
|
|
if (level > g_backend_debug )
|
|
return;
|
|
|
|
if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
|
|
snprintf(time_buf, sizeof(time_buf), "%ld.%09ld", ts.tv_sec, ts.tv_nsec);
|
|
} else {
|
|
snprintf(time_buf, sizeof(time_buf), "0.0");
|
|
}
|
|
|
|
int len = snprintf(final_msg, sizeof(final_msg), "[%s][%s] ", time_buf, log_level_to_string(level));
|
|
|
|
if (len > 0 && len < sizeof(final_msg)) {
|
|
va_start(args, fmt);
|
|
int written = vsnprintf(final_msg + len, sizeof(final_msg) - len, fmt, args);
|
|
va_end(args);
|
|
if (written < 0) {
|
|
final_msg[len] = '\0';
|
|
}
|
|
}
|
|
if (g_log_to_logcat)
|
|
ALOGI("%s\n", final_msg);
|
|
else
|
|
fprintf(stderr, "%s\n", final_msg);
|
|
}
|
|
|
|
|