From 85a5bb173e99dcc0417ffd3810fe8a63afde56c7 Mon Sep 17 00:00:00 2001 From: Mehdi Sabwat Date: Mon, 9 Nov 2020 22:35:32 +0100 Subject: [PATCH] logger: add emscripten module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Hugo Beauzée-Luyssen Co-authored-by: Thomas Guillem --- modules/logger/Makefile.am | 6 +++ modules/logger/emscripten.c | 86 +++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 modules/logger/emscripten.c diff --git a/modules/logger/Makefile.am b/modules/logger/Makefile.am index 8ab485c8fe..1d10a6e3a4 100644 --- a/modules/logger/Makefile.am +++ b/modules/logger/Makefile.am @@ -25,3 +25,9 @@ endif libjson_tracer_plugin_la_SOURCES = logger/json.c logger_LTLIBRARIES += libjson_tracer_plugin.la + +libemscripten_logger_plugin_la_SOURCES = logger/emscripten.c + +if HAVE_EMSCRIPTEN +logger_LTLIBRARIES += libemscripten_logger_plugin.la +endif diff --git a/modules/logger/emscripten.c b/modules/logger/emscripten.c new file mode 100644 index 0000000000..67c39ddfc0 --- /dev/null +++ b/modules/logger/emscripten.c @@ -0,0 +1,86 @@ +/***************************************************************************** + * emscripten.c: Emscripten logger + ***************************************************************************** + * Copyright © 2022 VLC authors, VideoLAN and Videolabs + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include +#include + +#include +#include + +static void EmscriptenPrintMsg(void *opaque, int type, const vlc_log_t *p_item, + const char *format, va_list ap) +{ + int prio; + char *message; + int verbosity = (int)opaque; + + if (verbosity < type) + return; + + if (vasprintf(&message, format, ap) < 0) + return; + switch (type) { + case VLC_MSG_ERR: + prio = EM_LOG_CONSOLE | EM_LOG_ERROR; + break; + case VLC_MSG_WARN: + prio = EM_LOG_CONSOLE | EM_LOG_WARN; + break; + case VLC_MSG_INFO: + prio = EM_LOG_CONSOLE | EM_LOG_INFO; + break; + case VLC_MSG_DBG: + prio = EM_LOG_CONSOLE | EM_LOG_DEBUG; + default: + prio = EM_LOG_CONSOLE; + } + + emscripten_log(prio, "[vlc.js: 0x%"PRIxPTR"/0x%"PRIxPTR"] %s %s: %s", + p_item->i_object_id, p_item->tid, p_item->psz_module, + p_item->psz_object_type, message); + free(message); +} + +static const struct vlc_logger_operations ops = { EmscriptenPrintMsg, NULL }; + +static const struct vlc_logger_operations *Open(vlc_object_t *obj, void **sysp) +{ + int verbosity = var_InheritInteger(obj, "verbose"); + + if (verbosity < 0) + return NULL; + verbosity += VLC_MSG_ERR; + *sysp = (void *)(int)verbosity; + return &ops; +} + +vlc_module_begin() + set_shortname(N_("emlog")) + set_description(N_("Emscripten logger")) + set_subcategory(SUBCAT_ADVANCED_MISC) + set_capability("logger", 30) + set_callback(Open) +vlc_module_end ()