X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/52ce912c49d61c252e301393740350f4f0e41d8b..0b348e806f86cd8c138b8485c8d41c041ccad610:/src/instr/instr_config.cpp diff --git a/src/instr/instr_config.cpp b/src/instr/instr_config.cpp index e896000237..41ac7a68c1 100644 --- a/src/instr/instr_config.cpp +++ b/src/instr/instr_config.cpp @@ -4,6 +4,7 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "include/xbt/config.hpp" +#include "simgrid/s4u/Engine.hpp" #include "src/instr/instr_private.hpp" #include "surf/surf.hpp" #include @@ -75,19 +76,23 @@ static bool trace_active = false; simgrid::instr::TraceFormat simgrid::instr::trace_format = simgrid::instr::TraceFormat::Paje; -int TRACE_start() +void TRACE_start() { + if (trace_active) + return; + // tracing system must be: // - enabled (with --cfg=tracing:yes) // - already configured (TRACE_global_init already called) if (TRACE_is_enabled()) { + instr_define_callbacks(); XBT_DEBUG("Tracing starts"); /* init the tracing module to generate the right output */ /* open the trace file(s) */ - std::string format = xbt_cfg_get_string(OPT_TRACING_FORMAT); - XBT_DEBUG("Tracing format %s\n", format.c_str()); + std::string format = simgrid::config::get_value(OPT_TRACING_FORMAT); + XBT_DEBUG("Tracing format %s", format.c_str()); if (format == "Paje") { TRACE_paje_start(); } else if (format == "TI") { @@ -97,50 +102,40 @@ int TRACE_start() xbt_die("Unknown trace format :%s ", format.c_str()); } - /* activate trace */ - if (trace_active) { - THROWF(tracing_error, 0, "Tracing is already active"); - } trace_active = true; XBT_DEBUG("Tracing is on"); } - return 0; } -int TRACE_end() +static void TRACE_end() { - int retval; - if (not trace_active) { - retval = 1; - } else { - retval = 0; - - /* dump trace buffer */ - TRACE_last_timestamp_to_dump = surf_get_clock(); - TRACE_paje_dump_buffer(true); - - simgrid::instr::Type* root_type = simgrid::instr::Container::getRoot()->type_; - /* destroy all data structures of tracing (and free) */ - delete simgrid::instr::Container::getRoot(); - delete root_type; - - /* close the trace files */ - std::string format = xbt_cfg_get_string(OPT_TRACING_FORMAT); - XBT_DEBUG("Tracing format %s\n", format.c_str()); - if (format == "Paje") { - TRACE_paje_end(); - } else if (format == "TI") { - TRACE_TI_end(); - }else{ - xbt_die("Unknown trace format :%s ", format.c_str()); - } + if (not trace_active) + return; - /* de-activate trace */ - trace_active = false; - XBT_DEBUG("Tracing is off"); - XBT_DEBUG("Tracing system is shutdown"); + /* dump trace buffer */ + TRACE_last_timestamp_to_dump = surf_get_clock(); + TRACE_paje_dump_buffer(true); + + simgrid::instr::Type* root_type = simgrid::instr::Container::getRoot()->type_; + /* destroy all data structures of tracing (and free) */ + delete simgrid::instr::Container::getRoot(); + delete root_type; + + /* close the trace files */ + std::string format = simgrid::config::get_value(OPT_TRACING_FORMAT); + XBT_DEBUG("Tracing format %s\n", format.c_str()); + if (format == "Paje") { + TRACE_paje_end(); + } else if (format == "TI") { + TRACE_TI_end(); + } else { + xbt_die("Unknown trace format :%s ", format.c_str()); } - return retval; + + /* de-activate trace */ + trace_active = false; + XBT_DEBUG("Tracing is off"); + XBT_DEBUG("Tracing system is shutdown"); } bool TRACE_needs_platform () @@ -201,62 +196,62 @@ bool TRACE_uncategorized () bool TRACE_actor_is_enabled() { - return trace_actor_enabled && TRACE_is_enabled(); + return trace_actor_enabled && trace_enabled; } bool TRACE_vm_is_enabled() { - return trace_vm_enabled && TRACE_is_enabled(); + return trace_vm_enabled && trace_enabled; } bool TRACE_disable_link() { - return trace_disable_link && TRACE_is_enabled(); + return trace_disable_link && trace_enabled; } bool TRACE_disable_speed() { - return trace_disable_power && TRACE_is_enabled(); + return trace_disable_power && trace_enabled; } bool TRACE_buffer () { - return trace_buffer && TRACE_is_enabled(); + return trace_buffer && trace_enabled; } bool TRACE_disable_destroy () { - return trace_disable_destroy && TRACE_is_enabled(); + return trace_disable_destroy && trace_enabled; } bool TRACE_basic () { - return trace_basic && TRACE_is_enabled(); + return trace_basic && trace_enabled; } bool TRACE_display_sizes () { - return trace_display_sizes && trace_smpi_enabled && TRACE_is_enabled(); + return trace_display_sizes && trace_smpi_enabled && trace_enabled; } std::string TRACE_get_comment() { - return xbt_cfg_get_string(OPT_TRACING_COMMENT); + return simgrid::config::get_value(OPT_TRACING_COMMENT); } std::string TRACE_get_comment_file() { - return xbt_cfg_get_string(OPT_TRACING_COMMENT_FILE); + return simgrid::config::get_value(OPT_TRACING_COMMENT_FILE); } int TRACE_precision () { - return xbt_cfg_get_int(OPT_TRACING_PRECISION); + return simgrid::config::get_value(OPT_TRACING_PRECISION); } std::string TRACE_get_filename() { - return xbt_cfg_get_string(OPT_TRACING_FILENAME); + return simgrid::config::get_value(OPT_TRACING_FILENAME); } void TRACE_global_init() @@ -266,6 +261,7 @@ void TRACE_global_init() return; is_initialised = true; + /* name of the tracefile */ simgrid::config::declare_flag(OPT_TRACING_FILENAME, "Trace file created by the instrumented SimGrid.", "simgrid.trace"); @@ -282,6 +278,11 @@ void TRACE_global_init() simgrid::config::declare_flag(OPT_TRACING_PRECISION, "Numerical precision used when timestamping events " "(expressed in number of digits after decimal point)", 6); + + /* Connect callbacks */ + simgrid::s4u::on_platform_creation.connect(TRACE_start); + simgrid::s4u::onDeadlock.connect(TRACE_end); + simgrid::s4u::onSimulationEnd.connect(TRACE_end); } static void print_line (const char *option, const char *desc, const char *longdesc, int detailed)