diff --git a/configuration.c b/configuration.c index c51a5a5e6c..0601fb6a05 100644 --- a/configuration.c +++ b/configuration.c @@ -2640,6 +2640,7 @@ static bool config_load_file(const char *path, settings_t *settings) size_t path_size = PATH_MAX_LENGTH * sizeof(char); char *tmp_str = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); bool ret = false; + unsigned tmp_uint = 0; bool tmp_bool = false; unsigned msg_color = 0; char *save = NULL; @@ -2741,19 +2742,9 @@ static bool config_load_file(const char *path, settings_t *settings) else verbosity_disable(); } + if (config_get_uint(conf, "frontend_log_level", &tmp_uint)) { - char tmp[64]; - - tmp[0] = '\0'; - - strlcpy(tmp, "perfcnt_enable", sizeof(tmp)); - if (config_get_bool(conf, tmp, &tmp_bool)) - { - if (tmp_bool) - rarch_ctl(RARCH_CTL_SET_PERFCNT_ENABLE, NULL); - else - rarch_ctl(RARCH_CTL_UNSET_PERFCNT_ENABLE, NULL); - } + verbosity_set_log_level(tmp_uint); } /* Integer settings */ diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 0603318431..9aec8a511b 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -6063,6 +6063,14 @@ void general_write_handler(rarch_setting_t *setting) command_event(rarch_cmd, NULL); } +static void frontend_log_level_change_handler(rarch_setting_t *setting) +{ + if (!setting) + return; + + verbosity_set_log_level(*setting->value.target.unsigned_integer); +} + #ifdef HAVE_OVERLAY static void overlay_enable_toggle_change_handler(rarch_setting_t *setting) { @@ -7593,6 +7601,7 @@ static bool setting_append_list( parent_group, general_write_handler, general_read_handler); + (*list)[list_info->index - 1].change_handler = frontend_log_level_change_handler; (*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_RADIO_BUTTONS; (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; menu_settings_list_current_add_range(list, list_info, 0, 3, 1.0, true, true); diff --git a/retroarch.c b/retroarch.c index 843613b195..2c7da29787 100644 --- a/retroarch.c +++ b/retroarch.c @@ -6276,7 +6276,7 @@ static bool environ_cb_get_system_info(unsigned cmd, void *data) const struct retro_subsystem_info *info = (const struct retro_subsystem_info*)data; settings_t *settings = configuration_settings; - unsigned log_level = settings->uints.libretro_log_level; + unsigned log_level = settings->uints.frontend_log_level; subsystem_current_count = 0; @@ -6690,7 +6690,7 @@ static bool rarch_environment_cb(unsigned cmd, void *data) case RETRO_ENVIRONMENT_GET_VARIABLE: { - unsigned log_level = settings->uints.libretro_log_level; + unsigned log_level = settings->uints.frontend_log_level; struct retro_variable *var = (struct retro_variable*)data; if (!var) @@ -6992,7 +6992,7 @@ static bool rarch_environment_cb(unsigned cmd, void *data) RARCH_LOG("Environ SET_INPUT_DESCRIPTORS:\n"); { - unsigned log_level = settings->uints.libretro_log_level; + unsigned log_level = settings->uints.frontend_log_level; if (log_level == RETRO_LOG_DEBUG) { @@ -7293,7 +7293,7 @@ static bool rarch_environment_cb(unsigned cmd, void *data) unsigned i; const struct retro_subsystem_info *info = (const struct retro_subsystem_info*)data; - unsigned log_level = settings->uints.libretro_log_level; + unsigned log_level = settings->uints.frontend_log_level; if (log_level == RETRO_LOG_DEBUG) RARCH_LOG("Environ SET_SUBSYSTEM_INFO.\n"); @@ -7343,7 +7343,7 @@ static bool rarch_environment_cb(unsigned cmd, void *data) unsigned i, j; const struct retro_controller_info *info = (const struct retro_controller_info*)data; - unsigned log_level = settings->uints.libretro_log_level; + unsigned log_level = settings->uints.frontend_log_level; RARCH_LOG("Environ SET_CONTROLLER_INFO.\n"); diff --git a/verbosity.c b/verbosity.c index 76838ef35f..a59b47889f 100644 --- a/verbosity.c +++ b/verbosity.c @@ -62,12 +62,19 @@ #include "ui/ui_companion_driver.h" #endif +#ifdef RARCH_INTERNAL +#include "config.def.h" +#else +#define DEFAULT_FRONTEND_LOG_LEVEL 1 +#endif + /* If this is non-NULL. RARCH_LOG and friends * will write to this file. */ -static FILE *log_file_fp = NULL; -static void* log_file_buf = NULL; -static bool main_verbosity = false; -static bool log_file_initialized = false; +static FILE *log_file_fp = NULL; +static void* log_file_buf = NULL; +static unsigned verbosity_log_level = DEFAULT_FRONTEND_LOG_LEVEL; +static bool main_verbosity = false; +static bool log_file_initialized = false; #ifdef HAVE_LIBNX static Mutex logging_mtx; @@ -76,6 +83,11 @@ bool nxlink_connected = false; #endif /* NXLINK */ #endif /* HAVE_LIBNX */ +void verbosity_set_log_level(unsigned level) +{ + verbosity_log_level = level; +} + void verbosity_enable(void) { main_verbosity = true; @@ -162,112 +174,115 @@ void retro_main_log_file_deinit(void) #if !defined(HAVE_LOGGER) void RARCH_LOG_V(const char *tag, const char *fmt, va_list ap) { + if (verbosity_log_level <= 1) + { #if TARGET_OS_IPHONE #if TARGET_IPHONE_SIMULATOR - vprintf(fmt, ap); + vprintf(fmt, ap); #else - static aslclient asl_client; - static int asl_initialized = 0; - if (!asl_initialized) - { - asl_client = asl_open( - file_path_str(FILE_PATH_PROGRAM_NAME), - "com.apple.console", - ASL_OPT_STDERR | ASL_OPT_NO_DELAY); - asl_initialized = 1; - } - aslmsg msg = asl_new(ASL_TYPE_MSG); - asl_set(msg, ASL_KEY_READ_UID, "-1"); - if (tag) - asl_log(asl_client, msg, ASL_LEVEL_NOTICE, "%s", tag); - asl_vlog(asl_client, msg, ASL_LEVEL_NOTICE, fmt, ap); - asl_free(msg); + static aslclient asl_client; + static int asl_initialized = 0; + if (!asl_initialized) + { + asl_client = asl_open( + file_path_str(FILE_PATH_PROGRAM_NAME), + "com.apple.console", + ASL_OPT_STDERR | ASL_OPT_NO_DELAY); + asl_initialized = 1; + } + aslmsg msg = asl_new(ASL_TYPE_MSG); + asl_set(msg, ASL_KEY_READ_UID, "-1"); + if (tag) + asl_log(asl_client, msg, ASL_LEVEL_NOTICE, "%s", tag); + asl_vlog(asl_client, msg, ASL_LEVEL_NOTICE, fmt, ap); + asl_free(msg); #endif #elif defined(_XBOX1) - /* FIXME: Using arbitrary string as fmt argument is unsafe. */ - char msg_new[256]; - char buffer[256]; + /* FIXME: Using arbitrary string as fmt argument is unsafe. */ + char msg_new[256]; + char buffer[256]; - msg_new[0] = buffer[0] = '\0'; - snprintf(msg_new, sizeof(msg_new), "%s: %s %s", - file_path_str(FILE_PATH_PROGRAM_NAME), - tag ? tag : "", - fmt); - wvsprintf(buffer, msg_new, ap); - OutputDebugStringA(buffer); -#elif defined(ANDROID) - int prio = ANDROID_LOG_INFO; - if (tag) - { - if (string_is_equal(file_path_str(FILE_PATH_LOG_WARN), tag)) - prio = ANDROID_LOG_WARN; - else if (string_is_equal(file_path_str(FILE_PATH_LOG_ERROR), tag)) - prio = ANDROID_LOG_ERROR; - } - - if (log_file_initialized) - { - vfprintf(log_file_fp, fmt, ap); - fflush(log_file_fp); - } - else - __android_log_vprint(prio, + msg_new[0] = buffer[0] = '\0'; + snprintf(msg_new, sizeof(msg_new), "%s: %s %s", file_path_str(FILE_PATH_PROGRAM_NAME), - fmt, - ap); -#else - FILE *fp = (FILE*)log_file_fp; -#if defined(HAVE_QT) || defined(__WINRT__) - int ret; - char buffer[256]; - buffer[0] = '\0'; - ret = vsnprintf(buffer, sizeof(buffer), fmt, ap); - - /* ensure null termination and line break in error case */ - if (ret < 0) - { - int end; - buffer[sizeof(buffer) - 1] = '\0'; - end = strlen(buffer) - 1; - if (end >= 0) - buffer[end] = '\n'; - else + tag ? tag : "", + fmt); + wvsprintf(buffer, msg_new, ap); + OutputDebugStringA(buffer); +#elif defined(ANDROID) + int prio = ANDROID_LOG_INFO; + if (tag) { - buffer[0] = '\n'; - buffer[1] = '\0'; + if (string_is_equal(file_path_str(FILE_PATH_LOG_WARN), tag)) + prio = ANDROID_LOG_WARN; + else if (string_is_equal(file_path_str(FILE_PATH_LOG_ERROR), tag)) + prio = ANDROID_LOG_ERROR; } - } - if (fp) - { - fprintf(fp, "%s %s", tag ? tag : file_path_str(FILE_PATH_LOG_INFO), buffer); - fflush(fp); - } + if (log_file_initialized) + { + vfprintf(log_file_fp, fmt, ap); + fflush(log_file_fp); + } + else + __android_log_vprint(prio, + file_path_str(FILE_PATH_PROGRAM_NAME), + fmt, + ap); +#else + FILE *fp = (FILE*)log_file_fp; +#if defined(HAVE_QT) || defined(__WINRT__) + int ret; + char buffer[256]; + buffer[0] = '\0'; + ret = vsnprintf(buffer, sizeof(buffer), fmt, ap); + + /* ensure null termination and line break in error case */ + if (ret < 0) + { + int end; + buffer[sizeof(buffer) - 1] = '\0'; + end = strlen(buffer) - 1; + if (end >= 0) + buffer[end] = '\n'; + else + { + buffer[0] = '\n'; + buffer[1] = '\0'; + } + } + + if (fp) + { + fprintf(fp, "%s %s", tag ? tag : file_path_str(FILE_PATH_LOG_INFO), buffer); + fflush(fp); + } #if defined(HAVE_QT) - ui_companion_driver_log_msg(buffer); + ui_companion_driver_log_msg(buffer); #endif #if defined(__WINRT__) - OutputDebugStringA(buffer); + OutputDebugStringA(buffer); #endif #else #if defined(HAVE_LIBNX) - mutexLock(&logging_mtx); + mutexLock(&logging_mtx); #endif - if (fp) - { - fprintf(fp, "%s ", - tag ? tag : file_path_str(FILE_PATH_LOG_INFO)); - vfprintf(fp, fmt, ap); - fflush(fp); - } + if (fp) + { + fprintf(fp, "%s ", + tag ? tag : file_path_str(FILE_PATH_LOG_INFO)); + vfprintf(fp, fmt, ap); + fflush(fp); + } #if defined(HAVE_LIBNX) - mutexUnlock(&logging_mtx); + mutexUnlock(&logging_mtx); #endif #endif #endif + } } void RARCH_LOG_BUFFER(uint8_t *data, size_t size) @@ -309,6 +324,8 @@ void RARCH_LOG(const char *fmt, ...) if (!main_verbosity) return; + if (verbosity_log_level > 1) + return; va_start(ap, fmt); RARCH_LOG_V(file_path_str(FILE_PATH_LOG_INFO), fmt, ap); @@ -329,6 +346,8 @@ void RARCH_WARN(const char *fmt, ...) if (!main_verbosity) return; + if (verbosity_log_level > 2) + return; va_start(ap, fmt); RARCH_WARN_V(file_path_str(FILE_PATH_LOG_WARN), fmt, ap); diff --git a/verbosity.h b/verbosity.h index e6d11dbbd8..1dd0900844 100644 --- a/verbosity.h +++ b/verbosity.h @@ -33,6 +33,8 @@ void verbosity_enable(void); void verbosity_disable(void); +void verbosity_set_log_level(unsigned level); + bool *verbosity_get_ptr(void); void *retro_main_log_file(void);