X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/24a9a43343e8bb1e6ae073d8a480de24ffcf4d2f..3c3db4bc680e606d91d4006265d7bcf9174df050:/src/instr/instr_interface.c diff --git a/src/instr/instr_interface.c b/src/instr/instr_interface.c index 1c5f19ed5b..a2aad01663 100644 --- a/src/instr/instr_interface.c +++ b/src/instr/instr_interface.c @@ -10,10 +10,10 @@ #include "instr/instr_private.h" -XBT_LOG_NEW_DEFAULT_CATEGORY(tracing, "Tracing Interface"); +XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_api, instr, "API"); static xbt_dict_t defined_types; -static xbt_dict_t created_categories; +xbt_dict_t created_categories; int TRACE_start() { @@ -24,28 +24,17 @@ int TRACE_start() return 0; } + DEBUG0("Tracing starts"); + /* open the trace file */ - char *filename = TRACE_get_filename(); - if (!filename) { - THROW0(tracing_error, TRACE_ERROR_START, - "Trace filename is not initialized."); - return 0; - } - FILE *file = fopen(filename, "w"); - if (!file) { - THROW1(tracing_error, TRACE_ERROR_START, - "Tracefile %s could not be opened for writing.", filename); - } else { - TRACE_paje_start(file); - } + TRACE_paje_start(); /* activate trace */ TRACE_activate (); - /* output header */ - TRACE_paje_create_header(); - - /* define paje hierarchy for tracing */ + /* base type hierarchy: + * --cfg=tracing + */ pajeDefineContainerType("PLATFORM", "0", "platform"); pajeDefineContainerType("HOST", "PLATFORM", "HOST"); pajeDefineContainerType("LINK", "PLATFORM", "LINK"); @@ -55,13 +44,18 @@ int TRACE_start() pajeDefineEventType("source", "LINK", "source"); pajeDefineEventType("destination", "LINK", "destination"); - if (TRACE_platform_is_enabled()) { - if (TRACE_uncategorized()){ - pajeDefineVariableType("power_used", "HOST", "power_used"); - pajeDefineVariableType("bandwidth_used", "LINK", "bandwidth_used"); - } + /* type hierarchy for: + * --cfg=tracing/uncategorized + */ + if (TRACE_uncategorized()){ + pajeDefineVariableTypeWithColor("power_used", "HOST", "power_used", "0.5 0.5 0.5"); + pajeDefineVariableTypeWithColor("bandwidth_used", "LINK", "bandwidth_used", "0.5 0.5 0.5"); } + /* type hierarchy for: + * --cfg=tracing/msg/process + * --cfg=tracing/msg/volume + */ if (TRACE_msg_process_is_enabled() || TRACE_msg_volume_is_enabled()) { //processes grouped by host pajeDefineContainerType("PROCESS", "HOST", "PROCESS"); @@ -76,6 +70,9 @@ int TRACE_start() pajeDefineLinkType("volume", "0", "PROCESS", "PROCESS", "volume"); } + /* type hierarchy for: + * --cfg=tracing/msg/task + */ if (TRACE_msg_task_is_enabled()) { //tasks grouped by host pajeDefineContainerType("TASK", "HOST", "TASK"); @@ -83,6 +80,10 @@ int TRACE_start() pajeDefineStateType("presence", "TASK", "presence"); } + /* type hierarchy for + * --cfg=tracing/smpi + * --cfg=tracing/smpi/group + */ if (TRACE_smpi_is_enabled()) { if (TRACE_smpi_is_grouped()){ pajeDefineContainerType("MPI_PROCESS", "HOST", "MPI_PROCESS"); @@ -113,10 +114,24 @@ int TRACE_end() { if (!TRACE_is_active()) return 1; - FILE *file = TRACE_paje_end(); - fclose(file); + XBT_IN; + + /* close the trace file */ + TRACE_paje_end(); + + /* generate uncategorized graph configuration for triva */ + if (TRACE_get_triva_uncat_conf()){ + TRACE_generate_triva_uncat_conf(); + } + + /* generate categorized graph configuration for triva */ + if (TRACE_get_triva_cat_conf()){ + TRACE_generate_triva_cat_conf(); + } + /* activate trace */ TRACE_desactivate (); + DEBUG0("Tracing system is shutdown"); return 0; } @@ -145,17 +160,14 @@ void TRACE_define_type(const char *type, if (!TRACE_is_active()) return; - //check if type is already defined - if (xbt_dict_get_or_null(defined_types, type)) { - THROW1(tracing_error, TRACE_ERROR_TYPE_ALREADY_DEFINED, - "Type %s is already defined", type); - } - //check if parent_type is already defined - if (strcmp(parent_type, "0") - && !xbt_dict_get_or_null(defined_types, parent_type)) { - THROW1(tracing_error, TRACE_ERROR_TYPE_NOT_DEFINED, - "Type (used as parent) %s is not defined", parent_type); - } + char *defined; + //type must not exist + defined = xbt_dict_get_or_null(defined_types, type); + xbt_assert1 (defined == NULL, "Type %s is already defined", type); + //parent_type must exist or be different of 0 + defined = xbt_dict_get_or_null(defined_types, parent_type); + xbt_assert1 (defined != NULL || strcmp(parent_type, "0") == 0, + "Type (used as parent) %s is not defined", parent_type); pajeDefineContainerType(type, parent_type, type); if (final) { @@ -190,23 +202,16 @@ int TRACE_create_category_with_color(const char *category, if (!TRACE_is_active()) return 1; + char *defined = xbt_dict_get_or_null(defined_types, type); //check if type is defined - if (!xbt_dict_get_or_null(defined_types, type)) { - THROW1(tracing_error, TRACE_ERROR_TYPE_NOT_DEFINED, - "Type %s is not defined", type); - return 1; - } + xbt_assert1 (defined != NULL, "Type %s is not defined", type); //check if parent_category exists - if (strcmp(parent_category, "0") - && !xbt_dict_get_or_null(created_categories, parent_category)) { - THROW1(tracing_error, TRACE_ERROR_CATEGORY_NOT_DEFINED, - "Category (used as parent) %s is not created", parent_category); - return 1; - } + defined = xbt_dict_get_or_null(created_categories, parent_category); + xbt_assert1 (defined != NULL || strcmp(parent_category, "0") == 0, + "Category (used as parent) %s is not created", parent_category); //check if category is created - if (xbt_dict_get_or_null(created_categories, category)) { - return 1; - } + char *created = xbt_dict_get_or_null(created_categories, category); + xbt_assert1 (created == NULL, "Category %s is already defined", category); pajeCreateContainer(MSG_get_clock(), category, type, parent_category, category); @@ -222,6 +227,8 @@ int TRACE_create_category_with_color(const char *category, snprintf (final_color, INSTR_DEFAULT_STR_SIZE, "%s", color); } + DEBUG2("CAT,declare %s, %s", category, final_color); + /* for registering application categories on top of platform */ snprintf(state, 100, "b%s", category); if (TRACE_platform_is_enabled()) @@ -242,6 +249,7 @@ void TRACE_declare_mark(const char *mark_type) if (!mark_type) return; + DEBUG1("MARK,declare %s", mark_type); pajeDefineEventType(mark_type, "0", mark_type); } @@ -252,6 +260,7 @@ void TRACE_mark(const char *mark_type, const char *mark_value) if (!mark_type || !mark_value) return; + DEBUG2("MARK %s %s", mark_type, mark_value); pajeNewEvent(MSG_get_clock(), mark_type, "0", mark_value); }