[Bf-blender-cvs] [fb53f46184c] soc-2020-info-editor: WIP: enable/disable loggers from user preferences
Mateusz GrzeliÅski
noreply at git.blender.org
Thu Jul 30 17:38:25 CEST 2020
Commit: fb53f46184cd94a250c05d520fb4170c80eb34f9
Author: Mateusz Grzeliński
Date: Thu Jul 30 17:38:19 2020 +0200
Branches: soc-2020-info-editor
https://developer.blender.org/rBfb53f46184cd94a250c05d520fb4170c80eb34f9
WIP: enable/disable loggers from user preferences
===================================================================
M intern/clog/CLG_log.h
M intern/clog/clog.c
M release/datafiles/userdef/userdef_default.c
M release/scripts/startup/bl_ui/space_userpref.py
M source/blender/editors/space_info/space_info.c
M source/blender/makesdna/DNA_userdef_types.h
M source/blender/makesrna/intern/rna_userdef.c
M source/creator/creator_args.c
===================================================================
diff --git a/intern/clog/CLG_log.h b/intern/clog/CLG_log.h
index 99604574730..af65febc59a 100644
--- a/intern/clog/CLG_log.h
+++ b/intern/clog/CLG_log.h
@@ -182,7 +182,10 @@ void CLG_output_use_timestamp_set(int value);
void CLG_fatal_fn_set(void (*fatal_fn)(void *file_handle));
void CLG_backtrace_fn_set(void (*fatal_fn)(void *file_handle));
+void CLG_type_filter_set(const char *glob_str);
+int CLG_type_filter_get(char *buff, int buff_len);
void CLG_type_filter_include(const char *type_filter, int type_filter_len);
+void CLG_type_filters_clear(void);
void CLG_type_filter_exclude(const char *type_filter, int type_filter_len);
enum CLG_Severity CLG_severity_level_get(void);
diff --git a/intern/clog/clog.c b/intern/clog/clog.c
index 7d8c18a3706..8ce91d0b2ad 100644
--- a/intern/clog/clog.c
+++ b/intern/clog/clog.c
@@ -724,6 +724,56 @@ static void CLG_ctx_type_filter_include(CLogContext *ctx,
clg_ctx_type_filter_append(&ctx->filters[1], type_match, type_match_len);
}
+static void CLG_ctx_type_filters_clear(CLogContext *ctx)
+{
+ for (uint i = 0; i < 2; i++) {
+ while (ctx->filters[i] != NULL) {
+ CLG_IDFilter *item = ctx->filters[i];
+ ctx->filters[i] = item->next;
+ MEM_freeN(item);
+ }
+ }
+}
+
+static void CLG_ctx_type_filter_set(CLogContext *ctx, const char *glob_str)
+{
+ CLG_ctx_type_filters_clear(ctx);
+ const char *str_step = glob_str;
+ while (*str_step) {
+ const char *str_step_end = strchr(str_step, ',');
+ int str_step_len = str_step_end ? (str_step_end - str_step) : strlen(str_step);
+
+ if (str_step[0] == '^') {
+ CLG_ctx_type_filter_exclude(ctx, str_step + 1, str_step_len - 1);
+ }
+ else {
+ CLG_ctx_type_filter_include(ctx, str_step, str_step_len);
+ }
+
+ if (str_step_end) {
+ /* Typically only be one, but don't fail on multiple. */
+ while (*str_step_end == ',') {
+ str_step_end++;
+ }
+ str_step = str_step_end;
+ }
+ else {
+ break;
+ }
+ }
+
+ CLG_LogType *log_type_iter = ctx->types;
+ while (log_type_iter) {
+ if (clg_ctx_filter_check(ctx, log_type_iter->identifier)) {
+ log_type_iter->flag |= CLG_FLAG_USE;
+ }
+ else {
+ log_type_iter->flag &= ~CLG_FLAG_USE;
+ }
+ log_type_iter = log_type_iter->next;
+ }
+}
+
static enum CLG_Severity CLG_ctx_severity_level_get(CLogContext *ctx)
{
return ctx->default_type.severity_level;
@@ -784,19 +834,15 @@ static void CLG_ctx_free(CLogContext *ctx)
ctx->log_records.first = NULL;
ctx->log_records.last = NULL;
+ /* unregister all types */
while (ctx->types != NULL) {
CLG_LogType *item = ctx->types;
ctx->types = item->next;
MEM_freeN(item);
}
- for (uint i = 0; i < 2; i++) {
- while (ctx->filters[i] != NULL) {
- CLG_IDFilter *item = ctx->filters[i];
- ctx->filters[i] = item->next;
- MEM_freeN(item);
- }
- }
+ CLG_ctx_type_filters_clear(ctx);
+
#ifdef WITH_CLOG_PTHREADS
pthread_mutex_destroy(&ctx->types_lock);
#endif
@@ -881,11 +927,52 @@ void CLG_type_filter_exclude(const char *type_match, int type_match_len)
CLG_ctx_type_filter_exclude(g_ctx, type_match, type_match_len);
}
+void CLG_type_filter_set(const char *glob_str)
+{
+ CLG_ctx_type_filter_set(g_ctx, glob_str);
+}
+
+int CLG_type_filter_get(char *buff, int buff_len)
+{
+ int written = 0;
+ CLG_IDFilter *filters_iter = g_ctx->filters[0]; /* exclude filters */
+ while (filters_iter) {
+ if (filters_iter->next == NULL) {
+ written += sprintf(buff, "^%s", filters_iter->match);
+ }
+ else {
+ written += sprintf(buff, "^%s,", filters_iter->match);
+ }
+ filters_iter = filters_iter->next;
+ }
+
+ filters_iter = g_ctx->filters[1]; /* include filters */
+ if (written != 0 && buff[written - 1] != ',') {
+ written += sprintf(buff, ",");
+ }
+ while (filters_iter) {
+ if (filters_iter->next == NULL) {
+ written += sprintf(buff, "%s", filters_iter->match);
+ }
+ else {
+ written += sprintf(buff, "%s,", filters_iter->match);
+ }
+ filters_iter = filters_iter->next;
+ }
+ assert(written <= buff_len);
+ return written;
+}
+
void CLG_type_filter_include(const char *type_match, int type_match_len)
{
CLG_ctx_type_filter_include(g_ctx, type_match, type_match_len);
}
+void CLG_type_filters_clear()
+{
+ CLG_ctx_type_filters_clear(g_ctx);
+}
+
void CLG_severity_level_set(enum CLG_Severity level)
{
CLG_ctx_severity_level_set(g_ctx, level);
diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c
index df1be29f642..b1bd043e906 100644
--- a/release/datafiles/userdef/userdef_default.c
+++ b/release/datafiles/userdef/userdef_default.c
@@ -230,6 +230,7 @@ const UserDef U_default = {
.collection_instance_empty_size = 1.0f,
.statusbar_flag = STATUSBAR_SHOW_VERSION,
+ .log_filter = "",
.runtime =
{
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index e51db930efe..37b67016e9d 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -651,6 +651,7 @@ class USERPREF_PT_system_logging(SystemPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
system = prefs.system
+ layout.prop(system, "log_filter")
layout.prop(system, "log_use_basename")
layout.prop(system, "log_use_timestamp")
layout.prop(system, "verbose")
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 4834fd1d27c..63e9f47a302 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -261,7 +261,7 @@ static void info_main_region_listener(wmWindow *UNUSED(win),
ED_region_tag_redraw(region);
}
else if (wmn->data == ND_SPACE_INFO_CHANGE_REPORT_SOURCE) {
- // todo this is very bad
+ /* TODO (grzelins) this is very bad */
Main *bmain = G_MAIN;
wmWindowManager *wm = bmain->wm.first;
info_report_source_update(wm, sinfo);
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index b5a0664112d..13da7be7043 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -893,6 +893,8 @@ typedef struct UserDef {
UserDef_Experimental experimental;
+ char log_filter[256];
+
/** Runtime data (keep last). */
UserDef_Runtime runtime;
} UserDef;
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index f68ad2da46f..ea914cb1021 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -1097,6 +1097,35 @@ static void rna_clog_log_verbosity_set(PointerRNA *UNUSED(ptr), int value)
CLG_verbosity_level_set(value);
}
+static void rna_Userdef_log_filter_update(struct Main *main,
+ struct Scene *scene,
+ struct PointerRNA *ptr)
+{
+ printf("Update!\n");
+}
+
+static void rna_clog_log_filter_get(PointerRNA *ptr, char *value)
+{
+ UserDef *userdef = (UserDef *)ptr->data;
+
+ char *dummy_buff = MEM_callocN(255, __func__);
+ int written = CLG_type_filter_get(dummy_buff, 255);
+ // memset(value, 0, 256);
+ // memcpy(value, dummy_buff, written + 1);
+
+ /* TODO (grzelins) how to init Userdef with command line value? */
+ BLI_strncpy(value, userdef->log_filter, 255);
+
+ MEM_freeN(dummy_buff);
+}
+
+static void rna_clog_log_filter_set(PointerRNA *ptr, const char *value)
+{
+ UserDef *userdef = (UserDef *)ptr->data;
+ BLI_strncpy(userdef->log_filter, value, 255);
+ CLG_type_filter_set(value);
+}
+
static bool rna_clog_log_use_basename_get(PointerRNA *UNUSED(ptr))
{
return CLG_output_use_basename_get();
@@ -5735,14 +5764,12 @@ static void rna_def_userdef_system(BlenderRNA *brna)
prop, "rna_clog_log_verbosity_get", "rna_clog_log_verbosity_set", NULL);
RNA_def_property_ui_text(prop, "Log Verbosity", "Log level, when severity is set to verbose");
- /* filters are implemented in strange way, it is not worth to implement it now
- prop = RNA_def_property(srna, "log_filter_include", PROP_STRING, PROP_NONE);
- RNA_def_property_string_funcs(prop,
- "rna_clog_log_filter_include_get",
- "rna_clog_log_filter_include_length",
- "rna_clog_log_filter_include_set");
- prop = RNA_def_property(srna, "log_filter_exclude", PROP_STRING, PROP_NONE);
- */
+ prop = RNA_def_property(srna, "log_filter", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "log_filter");
+ // RNA_def_property_update(prop, 0, "rna_Userdef_log_filter_update");
+ RNA_def_property_string_funcs(prop, "rna_clog_log_filter_get", NULL, "rna_clog_log_filter_set");
+ RNA_def_property_ui_text(prop, "Log Filter", "Enable loggers based on this glob fliter");
+
prop = RNA_def_property(srna, "log_use_basename", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(
prop, "rna_clog_log_use_basename_get", "rna_clog_log_use_basename_set");
diff --git a/source/creator/creator_args.c b/source/creator/creator_args.c
index ce46edd05c8..1b6f0a68013 100644
--- a/source/creator/creator_args.c
+++ b/source/creator/creator_args.c
@@ -879,29 +879,7 @@ static int arg_handle_log_set(int argc, const char **argv, void *UNUSED(data))
{
const char *arg_id = "--log";
if (argc > 1) {
- const char *str_step = argv[1];
- while (*str_step) {
- const char *str_step_end = strchr(str_step, ',');
- int str_step_len = str_step_end ? (str_step_end - str_step) : strlen(str_step);
-
- if (str_step[0] == '^') {
- CLG_type_filter_exclude(str_step + 1, str_step_len - 1);
- }
- else {
- CLG_type_filter_include(str_step, str_step_len);
- }
-
- if (str_step_end) {
- /* Typically only be one, but don't fail on multiple. */
- while (*str_step_end == ',') {
- str_step
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list