X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/660f9807d0a906180dc31227b4c1ed744b2b2478..481328d4b3422afe2b97f7e9a5eda090bdffbbb5:/src/instr/jedule/jedule_output.c diff --git a/src/instr/jedule/jedule_output.c b/src/instr/jedule/jedule_output.c index cf24c820ad..0099ce6d75 100644 --- a/src/instr/jedule/jedule_output.c +++ b/src/instr/jedule/jedule_output.c @@ -10,13 +10,20 @@ #include #include -#include "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; + static FILE *jed_file; static void print_platform(jed_simgrid_container_t root_container); @@ -31,201 +38,218 @@ 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 print_key_value_dict(xbt_dict_t key_value_dict) { - xbt_dict_cursor_t cursor=NULL; - char *key,*data; +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); +} - xbt_dict_foreach(key_value_dict,cursor,key,data) { - fprintf(jed_file, "\n",key,data); - } +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); + } + } } 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; + unsigned int i; + jed_res_subset_t subset; - xbt_assert( event != NULL ); - xbt_assert( event->resource_subsets != NULL ); + xbt_assert( event != NULL ); + xbt_assert( event->resource_subsets != NULL ); - fprintf(jed_file, "\n"); + fprintf(jed_file, "\n"); - 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", 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) { + xbt_dynar_foreach(event->resource_subsets, i, subset) { - int start = subset->start_idx; - int end = subset->start_idx + subset->nres - 1; - xbt_dynar_t hier_list; - unsigned int iter; - int number; + int start = subset->start_idx; + int end = subset->start_idx + subset->nres - 1; + char resid[1024]; - hier_list = xbt_dynar_new(sizeof(int), NULL); + get_hierarchy_string(subset->parent, resid); + + 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"); - xbt_dynar_foreach(hier_list, iter, number) { - fprintf(jed_file, "%d.", number); - } - fprintf(jed_file, "[%d-%d]", start, end); - fprintf(jed_file, "\" />\n"); + fprintf(jed_file, "\n"); + print_key_value_dict(event->info_hash); + fprintf(jed_file, "\n"); - xbt_dynar_free(&hier_list); - } - - 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(char *filename, jedule_t jedule, - xbt_dynar_t event_list, xbt_dict_t meta_info_dict) { +void write_jedule_output(FILE *file, jedule_t jedule, + xbt_dynar_t event_list, xbt_dict_t meta_info_dict) { - xbt_assert( filename != NULL ); +// xbt_assert( jed_file != NULL ); - jed_file = fopen(filename, "w"); - xbt_assert( jed_file != NULL ); + 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); - - fprintf(jed_file, "\n"); - - fclose(jed_file); + print_events(event_list); + fprintf(jed_file, "\n"); + } } -void init_jedule_output() { - jedule_event_list = xbt_dynar_new(sizeof(jed_event_t), NULL); +void jedule_init_output() { + jedule_event_list = xbt_dynar_new(sizeof(jed_event_t), NULL); } -void cleanup_jedule() { - xbt_dynar_free(&jedule_event_list); +void jedule_cleanup_output() { + 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