X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/585eeb393ae78877bab30573f224a2171074a6ca..107e9725115bed5e10ca15de9bc5899b67784fc5:/src/instr/instr_paje_trace.cpp diff --git a/src/instr/instr_paje_trace.cpp b/src/instr/instr_paje_trace.cpp index 81f33e6940..67a0747630 100644 --- a/src/instr/instr_paje_trace.cpp +++ b/src/instr/instr_paje_trace.cpp @@ -10,59 +10,47 @@ #include "src/smpi/include/private.hpp" #include "typeinfo" #include "xbt/virtu.h" /* sg_cmdline */ - -#include -#include -#include /** std::setprecision **/ -#include -#ifdef WIN32 -#include // _mkdir -#endif +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr, "tracing event system"); static std::stringstream stream; FILE *tracing_file = nullptr; -static std::map tracing_files; // TI specific -static double prefix=0.0; // TI specific +std::map tracing_files; // TI specific std::vector buffer; void buffer_debug(std::vector* buf); -void dump_comment (const char *comment) +void dump_comment(std::string comment) { - if (not strlen(comment)) + if (comment.empty()) return; - fprintf (tracing_file, "# %s\n", comment); + fprintf(tracing_file, "# %s\n", comment.c_str()); } -void dump_comment_file (const char *filename) +void dump_comment_file(std::string filename) { - if (not strlen(filename)) + if (filename.empty()) return; - FILE *file = fopen (filename, "r"); - if (not file) { - THROWF (system_error, 1, "Comment file %s could not be opened for reading.", filename); + std::ifstream* fs = new std::ifstream(); + fs->open(filename.c_str(), std::ifstream::in); + + if (fs->fail()) { + THROWF(system_error, 1, "Comment file %s could not be opened for reading.", filename.c_str()); } - while (not feof(file)) { - char c; - c = fgetc(file); - if (feof(file)) break; + while (not fs->eof()) { + std::string line; fprintf (tracing_file, "# "); - while (c != '\n'){ - fprintf (tracing_file, "%c", c); - c = fgetc(file); - if (feof(file)) break; - } - fprintf (tracing_file, "\n"); + std::getline(*fs, line); + fprintf(tracing_file, "%s", line.c_str()); } - fclose(file); + fs->close(); } double TRACE_last_timestamp_to_dump = 0; //dumps the trace file until the timestamp TRACE_last_timestamp_to_dump -void TRACE_paje_dump_buffer (int force) +void TRACE_paje_dump_buffer(bool force) { if (not TRACE_is_enabled()) return; @@ -191,7 +179,7 @@ void TRACE_paje_end() { XBT_DEBUG("Filename %s is closed", filename); } -void LogContainerTypeDefinition(simgrid::instr::Type* type) +void simgrid::instr::Type::logContainerTypeDefinition() { XBT_DEBUG("%s: event_type=%d", __FUNCTION__, simgrid::instr::PAJE_DefineContainerType); //print it @@ -200,7 +188,7 @@ void LogContainerTypeDefinition(simgrid::instr::Type* type) TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); stream << simgrid::instr::PAJE_DefineContainerType; - stream << " " << type->getId() << " " << type->father_->getId() << " " << type->getName(); + stream << " " << id_ << " " << father_->getId() << " " << name_; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -209,7 +197,7 @@ void LogContainerTypeDefinition(simgrid::instr::Type* type) } } -void LogVariableTypeDefinition(simgrid::instr::Type* type) +void simgrid::instr::Type::logVariableTypeDefinition() { XBT_DEBUG("%s: event_type=%d", __FUNCTION__, simgrid::instr::PAJE_DefineVariableType); @@ -219,9 +207,9 @@ void LogVariableTypeDefinition(simgrid::instr::Type* type) TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); stream << simgrid::instr::PAJE_DefineVariableType; - stream << " " << type->getId() << " " << type->father_->getId() << " " << type->getName(); - if (type->isColored()) - stream << " \"" << type->color_ << "\""; + stream << " " << id_ << " " << father_->getId() << " " << name_; + if (isColored()) + stream << " \"" << color_ << "\""; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -230,16 +218,16 @@ void LogVariableTypeDefinition(simgrid::instr::Type* type) } } -void LogStateTypeDefinition(simgrid::instr::Type* type) +void simgrid::instr::Type::logStateTypeDefinition() { //print it -if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, simgrid::instr::PAJE_DefineStateType, TRACE_precision(), - 0.); - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << simgrid::instr::PAJE_DefineStateType; - stream << " " << type->getId() << " " << type->father_->getId() << " " << type->getName(); - print_row(); + if (instr_fmt_type == instr_fmt_paje) { + XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, simgrid::instr::PAJE_DefineStateType, + TRACE_precision(), 0.); + stream << std::fixed << std::setprecision(TRACE_precision()); + stream << simgrid::instr::PAJE_DefineStateType; + stream << " " << id_ << " " << father_->getId() << " " << name_; + print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ } else { @@ -247,7 +235,7 @@ if (instr_fmt_type == instr_fmt_paje) { } } -void LogDefineEventType(simgrid::instr::Type* type) +void simgrid::instr::Type::logDefineEventType() { //print it if (instr_fmt_type == instr_fmt_paje) { @@ -255,7 +243,7 @@ void LogDefineEventType(simgrid::instr::Type* type) TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); stream << simgrid::instr::PAJE_DefineEventType; - stream << " " << type->getId() << " " << type->father_->getId() << " " << type->getName(); + stream << " " << id_ << " " << father_->getId() << " " << name_; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -264,18 +252,17 @@ void LogDefineEventType(simgrid::instr::Type* type) } } -void LogLinkTypeDefinition(simgrid::instr::Type* type, simgrid::instr::Type* source, simgrid::instr::Type* dest) +void simgrid::instr::Type::logLinkTypeDefinition(simgrid::instr::Type* source, simgrid::instr::Type* dest) { XBT_DEBUG("%s: event_type=%d", __FUNCTION__, simgrid::instr::PAJE_DefineLinkType); //print it -if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, simgrid::instr::PAJE_DefineLinkType, TRACE_precision(), - 0.); - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << simgrid::instr::PAJE_DefineLinkType; - stream << " " << type->getId() << " " << type->father_->getId() << " " << source->getId() << " " << dest->getId() - << " " << type->getName(); - print_row(); + if (instr_fmt_type == instr_fmt_paje) { + XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, simgrid::instr::PAJE_DefineLinkType, TRACE_precision(), + 0.); + stream << std::fixed << std::setprecision(TRACE_precision()); + stream << simgrid::instr::PAJE_DefineLinkType; + stream << " " << id_ << " " << father_->getId() << " " << source->getId() << " " << dest->getId() << " " << name_; + print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ } else { @@ -301,83 +288,6 @@ void simgrid::instr::Value::print() } } -void LogContainerCreation (container_t container) -{ - double timestamp = SIMIX_get_clock(); - - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, simgrid::instr::PAJE_CreateContainer, timestamp); - - if (instr_fmt_type == instr_fmt_paje) { - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << simgrid::instr::PAJE_CreateContainer; - stream << " "; - /* prevent 0.0000 in the trace - this was the behavior before the transition to c++ */ - if (timestamp < 1e-12) - stream << 0; - else - stream << timestamp; - stream << " " << container->id_ << " " << container->type_->getId() << " " << container->father_->id_ << " \"" - << container->name_ << "\""; - - print_row(); - } else if (instr_fmt_type == instr_fmt_TI) { - // if we are in the mode with only one file - static FILE* ti_unique_file = nullptr; - - if (tracing_files.empty()) { - // generate unique run id with time - prefix = xbt_os_time(); - } - - if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || ti_unique_file == nullptr) { - char* folder_name = bprintf("%s_files", TRACE_get_filename()); - char* filename = bprintf("%s/%f_%s.txt", folder_name, prefix, container->name_.c_str()); -#ifdef WIN32 - _mkdir(folder_name); -#else - mkdir(folder_name, S_IRWXU | S_IRWXG | S_IRWXO); -#endif - ti_unique_file = fopen(filename, "w"); - xbt_assert(ti_unique_file, "Tracefile %s could not be opened for writing: %s", filename, strerror(errno)); - fprintf(tracing_file, "%s\n", filename); - - xbt_free(folder_name); - xbt_free(filename); - } - - tracing_files.insert({container, ti_unique_file}); - } else { - THROW_IMPOSSIBLE; - } -} - -void LogContainerDestruction(container_t container) -{ - double timestamp = SIMIX_get_clock(); - - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, simgrid::instr::PAJE_DestroyContainer, timestamp); - - if (instr_fmt_type == instr_fmt_paje) { - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << simgrid::instr::PAJE_DestroyContainer; - stream << " "; - /* prevent 0.0000 in the trace - this was the behavior before the transition to c++ */ - if (timestamp < 1e-12) - stream << 0; - else - stream << timestamp; - stream << " " << container->type_->getId() << " " << container->id_; - print_row(); - } else if (instr_fmt_type == instr_fmt_TI) { - if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || tracing_files.size() == 1) { - FILE* f = tracing_files.at(container); - fclose(f); - } - tracing_files.erase(container); - } else { - THROW_IMPOSSIBLE; - } -} simgrid::instr::SetVariableEvent::SetVariableEvent(double timestamp, container_t container, Type* type, double value) : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_SetVariable), value(value)