X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0de7df8a3bc351fdff4c4a3e106608b15c842143..dfe72712c28c9f79838b36ed4c22a46f13841107:/src/instr/jedule/jedule_output.c diff --git a/src/instr/jedule/jedule_output.c b/src/instr/jedule/jedule_output.c index 52a2cdda48..401b09b7c8 100644 --- a/src/instr/jedule/jedule_output.c +++ b/src/instr/jedule/jedule_output.c @@ -10,13 +10,16 @@ #include #include -#include "instr/jedule/jedule_output.h" - #include "xbt/dynar.h" #include "xbt/asserts.h" +#include "instr/jedule/jedule_output.h" + #ifdef HAVE_JEDULE +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(jed_out, jedule, + "Logging specific to Jedule output"); + /*********************************************************/ xbt_dynar_t jedule_event_list; @@ -35,200 +38,224 @@ static void get_hierarchy_list(xbt_dynar_t hier_list, jed_simgrid_container_t co static void get_hierarchy_list(xbt_dynar_t hier_list, jed_simgrid_container_t container) { - xbt_assert( container != NULL ); + xbt_assert( container != NULL ); + + if( container->parent != NULL ) { - if( container->parent != NULL ) { + if( container->parent->container_children == NULL ) { + // we are in the last level + get_hierarchy_list(hier_list, container->parent); - if( container->parent->container_children == NULL ) { - // we are in the last level - get_hierarchy_list(hier_list, container->parent); + } else { + unsigned int i; + int child_nb = -1; + jed_simgrid_container_t child_container; - } else { - unsigned int i; - int child_nb = -1; - jed_simgrid_container_t child_container; + xbt_dynar_foreach(container->parent->container_children, i, child_container) { + if( child_container == container ) { + child_nb = i; + break; + } + } - xbt_dynar_foreach(container->parent->container_children, i, child_container) { - if( child_container == container ) { - child_nb = i; - break; - } - } + xbt_assert( child_nb > - 1); - xbt_assert( child_nb > - 1); + xbt_dynar_insert_at(hier_list, 0, &child_nb); - xbt_dynar_insert_at(hier_list, 0, &child_nb); + get_hierarchy_list(hier_list, container->parent); + } + } else { + int top_level = 0; + xbt_dynar_insert_at(hier_list, 0, &top_level); + } - get_hierarchy_list(hier_list, container->parent); - } - } else { - int top_level = 0; - xbt_dynar_insert_at(hier_list, 0, &top_level); - } +} +static void get_hierarchy_string(jed_simgrid_container_t container, char *outbuf) { + char buf[1024]; + xbt_dynar_t hier_list; + unsigned int iter; + int number; + int length; + + outbuf[0] = '\0'; + hier_list = xbt_dynar_new(sizeof(int), NULL); + get_hierarchy_list(hier_list, container); + + length = xbt_dynar_length(hier_list); + + xbt_dynar_foreach(hier_list, iter, number) { + if( iter != length-1 ) { + sprintf(buf, "%d.", number); + } else { + sprintf(buf, "%d", number); + } + strcat(outbuf, buf); + } + + xbt_dynar_free(&hier_list); } static void print_key_value_dict(xbt_dict_t key_value_dict) { - xbt_dict_cursor_t cursor=NULL; - char *key,*data; - - if( key_value_dict != NULL ) { - xbt_dict_foreach(key_value_dict,cursor,key,data) { - fprintf(jed_file, "\n",key,data); - } - } + xbt_dict_cursor_t cursor=NULL; + char *key,*data; + + if( key_value_dict != NULL ) { + xbt_dict_foreach(key_value_dict,cursor,key,data) { + fprintf(jed_file, "\n",key,data); + } + } } static void print_container(jed_simgrid_container_t container) { - unsigned int i; - jed_simgrid_container_t child_container; - - xbt_assert( container != NULL ); - - fprintf(jed_file, "\n", container->name); - if( container->container_children != NULL ) { - xbt_dynar_foreach(container->container_children, i, child_container) { - print_container(child_container); - } - } else { - print_resources(container); - } - fprintf(jed_file, "\n"); + unsigned int i; + jed_simgrid_container_t child_container; + + xbt_assert( container != NULL ); + + fprintf(jed_file, "\n", container->name); + if( container->container_children != NULL ) { + xbt_dynar_foreach(container->container_children, i, child_container) { + print_container(child_container); + } + } else { + print_resources(container); + } + fprintf(jed_file, "\n"); } static void print_resources(jed_simgrid_container_t resource_parent) { - int res_nb; - unsigned int i; - char *res_name; - xbt_assert( resource_parent->resource_list != NULL ); - - res_nb = xbt_dynar_length(resource_parent->resource_list); - - fprintf(jed_file, "resource_list, i, res_name) { - fprintf(jed_file, "%s", res_name); - if( i != res_nb-1 ) { - fprintf(jed_file, "|"); - } - } - fprintf(jed_file, "\" />\n"); + int res_nb; + unsigned int i; + char *res_name; + char resid[1024]; + xbt_assert( resource_parent->resource_list != NULL ); + + res_nb = xbt_dynar_length(resource_parent->resource_list); + + get_hierarchy_string(resource_parent, resid); + + fprintf(jed_file, "resource_list, i, res_name) { + fprintf(jed_file, "%s", res_name); + if( i != res_nb-1 ) { + fprintf(jed_file, "|"); + } + } + fprintf(jed_file, "\" />\n"); } static void print_platform(jed_simgrid_container_t root_container) { - fprintf(jed_file, "\n"); - print_container(root_container); - fprintf(jed_file, "\n"); + fprintf(jed_file, "\n"); + print_container(root_container); + fprintf(jed_file, "\n"); } static void print_event(jed_event_t event) { - unsigned int i; - jed_res_subset_t subset; - - - xbt_assert( event != NULL ); - xbt_assert( event->resource_subsets != NULL ); + unsigned int i; + jed_res_subset_t subset; - fprintf(jed_file, "\n"); + xbt_assert( event != NULL ); + xbt_assert( event->resource_subsets != NULL ); - fprintf(jed_file, "\n", event->name); - fprintf(jed_file, "\n", event->start_time); - fprintf(jed_file, "\n", event->end_time); - fprintf(jed_file, "\n", event->type); + fprintf(jed_file, "\n"); - fprintf(jed_file, "\n"); - xbt_dynar_foreach(event->resource_subsets, i, subset) { + fprintf(jed_file, "\n", event->name); + fprintf(jed_file, "\n", event->start_time); + fprintf(jed_file, "\n", event->end_time); + fprintf(jed_file, "\n", event->type); - int start = subset->start_idx; - int end = subset->start_idx + subset->nres - 1; - xbt_dynar_t hier_list; - unsigned int iter; - int number; + fprintf(jed_file, "\n"); - hier_list = xbt_dynar_new(sizeof(int), NULL); + xbt_dynar_foreach(event->resource_subsets, i, subset) { - //printf("subset start %d nres %d\n", subset->start_idx, subset->nres); + int start = subset->start_idx; + int end = subset->start_idx + subset->nres - 1; + char resid[1024]; - //printf("parent %s\n", event->resource_selection[i]->parent->name); - get_hierarchy_list(hier_list, subset->parent); + get_hierarchy_string(subset->parent, resid); + + fprintf(jed_file, "\n"); + fprintf(jed_file, "\n"); - xbt_dynar_free(&hier_list); - } + fprintf(jed_file, "\n"); + { + char *ch; + unsigned int iter; + xbt_dynar_foreach(event->characteristics_list, iter, ch) { + fprintf(jed_file, "\n", ch); + } + } + fprintf(jed_file, "\n"); - fprintf(jed_file, "\n"); + fprintf(jed_file, "\n"); + print_key_value_dict(event->info_hash); + fprintf(jed_file, "\n"); - fprintf(jed_file, "\n"); - { - char *ch; - unsigned int iter; - xbt_dynar_foreach(event->characteristics_list, iter, ch) { - fprintf(jed_file, "\n", ch); - } - } - fprintf(jed_file, "\n"); - - fprintf(jed_file, "\n"); - print_key_value_dict(event->info_hash); - fprintf(jed_file, "\n"); - - fprintf(jed_file, "\n"); + fprintf(jed_file, "\n"); } static void print_events(xbt_dynar_t event_list) { - unsigned int i; - jed_event_t event; - - fprintf(jed_file, "\n"); - xbt_dynar_foreach(event_list, i, event) { - print_event(event); - } - fprintf(jed_file, "\n"); + unsigned int i; + jed_event_t event; + + fprintf(jed_file, "\n"); + xbt_dynar_foreach(event_list, i, event) { + print_event(event); + } + fprintf(jed_file, "\n"); } void write_jedule_output(FILE *file, jedule_t jedule, - xbt_dynar_t event_list, xbt_dict_t meta_info_dict) { + xbt_dynar_t event_list, xbt_dict_t meta_info_dict) { -// xbt_assert( jed_file != NULL ); +// xbt_assert( jed_file != NULL ); - jed_file = file; + jed_file = file; + if (!xbt_dynar_is_empty(jedule_event_list)){ - fprintf(jed_file, "\n"); + fprintf(jed_file, "\n"); - fprintf(jed_file, "\n"); - print_key_value_dict(jedule->jedule_meta_info); - fprintf(jed_file, "\n"); + fprintf(jed_file, "\n"); + print_key_value_dict(jedule->jedule_meta_info); + fprintf(jed_file, "\n"); - print_platform(jedule->root_container); + print_platform(jedule->root_container); - print_events(event_list); + print_events(event_list); - fprintf(jed_file, "\n"); + fprintf(jed_file, "\n"); + } +} +static void jed_event_free_ref(void *evp) +{ + jed_event_t ev = *(jed_event_t *)evp; + jed_event_free(ev); } void jedule_init_output() { - jedule_event_list = xbt_dynar_new(sizeof(jed_event_t), NULL); + jedule_event_list = xbt_dynar_new(sizeof(jed_event_t), jed_event_free_ref); } void jedule_cleanup_output() { - xbt_dynar_free(&jedule_event_list); + xbt_dynar_free(&jedule_event_list); } void jedule_store_event(jed_event_t event) { - xbt_assert(event != NULL); - xbt_dynar_push(jedule_event_list, &event); + xbt_assert(event != NULL); + xbt_dynar_push(jedule_event_list, &event); } #endif