mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2025-05-08 20:56:13 +00:00

Loggers (e.g. glog) usually come with instrumentation to add timestamp and other information when reporting. That results in the timestamp being reported twice, making the output confusing.
110 lines
2.3 KiB
C
110 lines
2.3 KiB
C
/*
|
|
* Copyright (C) 2019 Intel Corporation. All rights reserved.
|
|
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
*/
|
|
|
|
#include "bh_log.h"
|
|
|
|
/**
|
|
* The verbose level of the log system. Only those verbose logs whose
|
|
* levels are less than or equal to this value are outputed.
|
|
*/
|
|
static uint32 log_verbose_level = BH_LOG_LEVEL_WARNING;
|
|
|
|
void
|
|
bh_log_set_verbose_level(uint32 level)
|
|
{
|
|
log_verbose_level = level;
|
|
}
|
|
|
|
void
|
|
bh_log(LogLevel log_level, const char *file, int line, const char *fmt, ...)
|
|
{
|
|
va_list ap;
|
|
korp_tid self;
|
|
char buf[32] = { 0 };
|
|
uint64 usec;
|
|
uint32 t, h, m, s, mills;
|
|
|
|
if ((uint32)log_level > log_verbose_level)
|
|
return;
|
|
|
|
self = os_self_thread();
|
|
|
|
usec = os_time_get_boot_microsecond();
|
|
t = (uint32)(usec / 1000000) % (24 * 60 * 60);
|
|
h = t / (60 * 60);
|
|
t = t % (60 * 60);
|
|
m = t / 60;
|
|
s = t % 60;
|
|
mills = (uint32)(usec % 1000);
|
|
|
|
snprintf(buf, sizeof(buf),
|
|
"%02" PRIu32 ":%02" PRIu32 ":%02" PRIu32 ":%03" PRIu32, h, m, s,
|
|
mills);
|
|
|
|
#ifndef BH_VPRINTF
|
|
os_printf("[%s - %" PRIXPTR "]: ", buf, (uintptr_t)self);
|
|
#endif
|
|
|
|
if (file)
|
|
os_printf("%s, line %d, ", file, line);
|
|
|
|
va_start(ap, fmt);
|
|
os_vprintf(fmt, ap);
|
|
va_end(ap);
|
|
|
|
os_printf("\n");
|
|
}
|
|
|
|
static uint32 last_time_ms = 0;
|
|
static uint32 total_time_ms = 0;
|
|
|
|
void
|
|
bh_print_time(const char *prompt)
|
|
{
|
|
uint32 curr_time_ms;
|
|
|
|
if (log_verbose_level < 3)
|
|
return;
|
|
|
|
curr_time_ms = (uint32)bh_get_tick_ms();
|
|
|
|
if (last_time_ms == 0)
|
|
last_time_ms = curr_time_ms;
|
|
|
|
total_time_ms += curr_time_ms - last_time_ms;
|
|
|
|
os_printf("%-48s time of last stage: %" PRIu32 " ms, total time: %" PRIu32
|
|
" ms\n",
|
|
prompt, curr_time_ms - last_time_ms, total_time_ms);
|
|
|
|
last_time_ms = curr_time_ms;
|
|
}
|
|
|
|
void
|
|
bh_print_proc_mem(const char *prompt)
|
|
{
|
|
char buf[1024] = { 0 };
|
|
|
|
if (log_verbose_level < BH_LOG_LEVEL_DEBUG)
|
|
return;
|
|
|
|
if (os_dumps_proc_mem_info(buf, sizeof(buf)) != 0)
|
|
return;
|
|
|
|
os_printf("%s\n", prompt);
|
|
os_printf("===== memory usage =====\n");
|
|
os_printf("%s", buf);
|
|
os_printf("==========\n");
|
|
return;
|
|
}
|
|
|
|
void
|
|
bh_log_proc_mem(const char *function, uint32 line)
|
|
{
|
|
char prompt[128] = { 0 };
|
|
snprintf(prompt, sizeof(prompt), "[MEM] %s(...) L%" PRIu32, function, line);
|
|
bh_print_proc_mem(prompt);
|
|
}
|