X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8d000a773b5ebcd411b28c31de68eeddf804e66b..03d87ef83eada5a3cf9aacce9e6a5dc0d169aaa3:/src/surf/surfxml_parseplatf.cpp diff --git a/src/surf/surfxml_parseplatf.cpp b/src/surf/surfxml_parseplatf.cpp index 7ab9cb914f..51ce41a759 100644 --- a/src/surf/surfxml_parseplatf.cpp +++ b/src/surf/surfxml_parseplatf.cpp @@ -9,9 +9,9 @@ #include "xbt/str.h" #include "xbt/dict.h" #include "simgrid/platf.h" -#include "surf/surfxml_parse.h" #include "src/surf/cpu_interface.hpp" #include "src/surf/surf_private.h" +#include "src/surf/surfxml_private.h" #ifdef HAVE_LUA extern "C" { @@ -70,12 +70,51 @@ xbt_dict_t trace_connect_list_link_avail = NULL; xbt_dict_t trace_connect_list_link_bw = NULL; xbt_dict_t trace_connect_list_link_lat = NULL; +void sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect) +{ + xbt_assert(xbt_dict_get_or_null(traces_set_list, trace_connect->trace), + "Cannot connect trace %s to %s: trace unknown", + trace_connect->trace, + trace_connect->element); + + switch (trace_connect->kind) { + case SURF_TRACE_CONNECT_KIND_HOST_AVAIL: + xbt_dict_set(trace_connect_list_host_avail, + trace_connect->trace, + xbt_strdup(trace_connect->element), NULL); + break; + case SURF_TRACE_CONNECT_KIND_POWER: + xbt_dict_set(trace_connect_list_host_speed, trace_connect->trace, + xbt_strdup(trace_connect->element), NULL); + break; + case SURF_TRACE_CONNECT_KIND_LINK_AVAIL: + xbt_dict_set(trace_connect_list_link_avail, + trace_connect->trace, + xbt_strdup(trace_connect->element), NULL); + break; + case SURF_TRACE_CONNECT_KIND_BANDWIDTH: + xbt_dict_set(trace_connect_list_link_bw, + trace_connect->trace, + xbt_strdup(trace_connect->element), NULL); + break; + case SURF_TRACE_CONNECT_KIND_LATENCY: + xbt_dict_set(trace_connect_list_link_lat, trace_connect->trace, + xbt_strdup(trace_connect->element), NULL); + break; + default: + surf_parse_error("Cannot connect trace %s to %s: kind of trace unknown", + trace_connect->trace, trace_connect->element); + break; + } +} + + /* ***************************************** */ static int after_config_done; void parse_after_config() { if (!after_config_done) { - TRACE_start(); + TRACE_start(); /* Register classical callbacks */ storage_register_callbacks(); @@ -152,6 +191,17 @@ void parse_platform_file(const char *file) cpu->set_state_trace(trace); } + xbt_dict_foreach(trace_connect_list_host_speed, cursor, trace_name, elm) { + tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); + xbt_assert(trace, "Trace %s undefined", trace_name); + + simgrid::s4u::Host *host = sg_host_by_name(elm); + xbt_assert(host, "Host %s undefined", elm); + simgrid::surf::Cpu *cpu = host->pimpl_cpu; + + cpu->set_speed_trace(trace); + } + /* Free my data */ xbt_dict_free(&trace_connect_list_host_avail); @@ -160,7 +210,6 @@ void parse_platform_file(const char *file) xbt_dict_free(&trace_connect_list_link_bw); xbt_dict_free(&trace_connect_list_link_lat); xbt_dict_free(&traces_set_list); - xbt_dict_free(&random_data_list); xbt_dynar_free(&surfxml_bufferstack_stack); surf_parse_close();