Skip to content

Commit bdd33c0

Browse files
committed
perf: ⚡ 简化宏定义,修复一个宏条件使用
1 parent eb74cae commit bdd33c0

2 files changed

Lines changed: 33 additions & 52 deletions

File tree

core/fc_log.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ void fc_log_set_level(fc_log_t *log, fc_log_level_t level)
6969
*/
7070
static int __fc_log_fail_record_write(FC_FILE *f, const void *buf, int len)
7171
{
72-
if (len >= FC_IO_SWAP)
72+
if (len > FC_IO_SWAP)
7373
{
7474
fc_log_file_user_t *user = (fc_log_file_user_t *)f->user;
7575
// 调用钩子记录丢失的日志长度
@@ -99,7 +99,8 @@ static int __fc_log_alloc_write(FC_FILE *f, const void *buf, int len)
9999
user->block_write += mem->size;
100100
if (false == log->alloc(FC_LOG_ALLOC_NEW, mem, FC_LOG_LINE_SIZE))
101101
{
102-
#if !FC_LOG_POOL_FAIL_RECORD
102+
// f->p_now = NULL; // 强制后续写入失败,进入的时候已经设置为NULL了
103+
#if FC_LOG_POOL_FAIL_RECORD
103104
f->io.write = __fc_log_fail_record_write; // 改变下一次进来的函数,后续只做丢失记录
104105
return len;
105106
#else
@@ -145,7 +146,7 @@ fc_weak void fc_log_fprintf(fc_log_t *log, fc_log_level_t level, const char *fmt
145146
// 分配内存池
146147
if (false == log->alloc(FC_LOG_ALLOC_NEW, &(user->mem), FC_LOG_LINE_SIZE))
147148
{
148-
#if !FC_LOG_POOL_FAIL_RECORD
149+
#if FC_LOG_POOL_FAIL_RECORD
149150
va_list vargs;
150151
va_start(vargs, fmt);
151152
user->total_write = fc_vsnprintf(NULL, 0, fmt, vargs);
@@ -194,7 +195,7 @@ fc_weak void fc_log_fprintf(fc_log_t *log, fc_log_level_t level, const char *fmt
194195
// 分配内存池
195196
if (false == log->alloc(FC_LOG_ALLOC_NEW, &(user->mem), FC_LOG_LINE_SIZE))
196197
{
197-
#if !FC_LOG_POOL_FAIL_RECORD
198+
#if FC_LOG_POOL_FAIL_RECORD
198199
va_list vargs;
199200
va_start(vargs, fmt);
200201
user->total_write = fc_vsnprintf(NULL, 0, fmt, vargs);

core/fc_log.h

Lines changed: 28 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
#endif
6565

6666
#ifndef FC_LOG_POOL_FAIL_RECORD
67-
#define FC_LOG_POOL_FAIL_RECORD 0 /**< 序列化日志分配失败是否记录丢失日志长度,需要消耗性能用于空序列化一次,个人觉得没必要 */
67+
#define FC_LOG_POOL_FAIL_RECORD 0 /**< 序列化日志内存分配失败是否记录丢失日志长度,需要消耗性能用于空序列化,个人觉得没必要 */
6868
#endif
6969

7070
#ifndef FC_LOG_FMT_START
@@ -290,6 +290,7 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
290290
#undef fc_log_merge_0
291291

292292
#undef fc_log_merge
293+
#undef fc_log_level_record
293294
#undef fc_log_format
294295

295296
#undef fc_log_error
@@ -330,14 +331,27 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
330331
#define fc_log_merge(...) \
331332
FC_CONNECT2(fc_log_merge_, __PLOOC_VA_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)
332333

334+
#define fc_log_level_record(_level) \
335+
do \
336+
{ \
337+
if (scope_log_ptr) \
338+
{ \
339+
fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
340+
if (SAFE_NAME(log_temp_ptr)->merge) \
341+
SAFE_NAME(log_temp_ptr)->last_level = _level; /* 临时对象实体记录临时等级 */ \
342+
} \
343+
} while (0);
344+
345+
// 把fc_log_level_record在format中展开,减少一次do...while(0)的开销
333346
#define fc_log_format(text, _level, fmt, ...) \
334347
do \
335348
{ \
336349
fc_log_fprintf((fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ), _level, text "" fmt "" FC_LOG_END, FC_LOG_PREFIX_CONTENT, ##__VA_ARGS__); \
337350
if (scope_log_ptr) \
338351
{ \
339352
fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
340-
SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_ERROR; /* 临时对象实体记录临时等级 */ \
353+
if (SAFE_NAME(log_temp_ptr)->merge) \
354+
SAFE_NAME(log_temp_ptr)->last_level = _level; /* 临时对象实体记录临时等级 */ \
341355
} \
342356
} while (0)
343357

@@ -346,75 +360,40 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
346360
#define fc_log_error(fmt, ...) \
347361
fc_log_format(FC_ERROR_TEXT, FC_LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
348362
#else
349-
#define fc_log_error(fmt, ...) \
350-
do \
351-
{ \
352-
if (scope_log_ptr) \
353-
{ \
354-
fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
355-
SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_ERROR; /* 临时对象实体记录临时等级 */ \
356-
} \
357-
} while (0);
363+
#define fc_log_error(fmt, ...) \
364+
fc_log_level_record(FC_LOG_LEVEL_ERROR)
358365
#endif
359366

360367
#if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_WARNING
361368
#define fc_log_warning(fmt, ...) \
362369
fc_log_format(FC_WARNING_TEXT, FC_LOG_LEVEL_WARNING, fmt, ##__VA_ARGS__)
363370
#else
364-
#define fc_log_warning(fmt, ...) \
365-
do \
366-
{ \
367-
if (scope_log_ptr) \
368-
{ \
369-
fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
370-
SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_WARNING; /* 临时对象实体记录临时等级 */ \
371-
} \
372-
} while (0);
371+
#define fc_log_warning(fmt, ...) \
372+
fc_log_level_record(FC_LOG_LEVEL_WARNING)
373373
#endif
374374

375375
#if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_INFO
376376
#define fc_log_info(fmt, ...) \
377377
fc_log_format(FC_INFO_TEXT, FC_LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
378378
#else
379-
#define fc_log_info(fmt, ...) \
380-
do \
381-
{ \
382-
if (scope_log_ptr) \
383-
{ \
384-
fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
385-
SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_INFO; /* 临时对象实体记录临时等级 */ \
386-
} \
387-
} while (0);
379+
#define fc_log_info(fmt, ...) \
380+
fc_log_level_record(FC_LOG_LEVEL_INFO)
388381
#endif
389382

390383
#if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_DEBUG
391384
#define fc_log_debug(fmt, ...) \
392385
fc_log_format(FC_DEBUG_TEXT, FC_LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
393386
#else
394-
#define fc_log_debug(fmt, ...) \
395-
do \
396-
{ \
397-
if (scope_log_ptr) \
398-
{ \
399-
fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
400-
SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_DEBUG; /* 临时对象实体记录临时等级 */ \
401-
} \
402-
} while (0);
387+
#define fc_log_debug(fmt, ...) \
388+
fc_log_level_record(FC_LOG_LEVEL_DEBUG)
403389
#endif
404390

405391
#if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_VERBOSE
406392
#define fc_log_verbose(fmt, ...) \
407393
fc_log_format(FC_VERBOSE_TEXT, FC_LOG_LEVEL_VERBOSE, fmt, ##__VA_ARGS__)
408394
#else
409-
#define fc_log_verbose(fmt, ...) \
410-
do \
411-
{ \
412-
if (scope_log_ptr) \
413-
{ \
414-
fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
415-
SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_VERBOSE; /* 临时对象实体记录临时等级 */ \
416-
} \
417-
} while (0);
395+
#define fc_log_verbose(fmt, ...) \
396+
fc_log_level_record(FC_LOG_LEVEL_VERBOSE)
418397
#endif
419398

420399
#define fc_log_printf(fmt, ...) \
@@ -465,7 +444,8 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
465444
#define fc_log_merge(...) // 空定义即可
466445

467446
// clang-format off
468-
447+
448+
#define fc_log_level_record(_level) ((void)0)
469449
#define fc_log_format(text, level, fmt, ...) ((void)0)
470450
#define fc_log_error(fmt, ...) ((void)0)
471451
#define fc_log_warning(fmt, ...) ((void)0)

0 commit comments

Comments
 (0)