X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e44a0d71a8bacd7ab03e284fc32ad23731f5869c..13fb4af932a02ea0bd4293d1e55ac071de326f80:/src/instr/instr_paje_trace.cpp diff --git a/src/instr/instr_paje_trace.cpp b/src/instr/instr_paje_trace.cpp index dce4b1eb0e..2676cd1baa 100644 --- a/src/instr/instr_paje_trace.cpp +++ b/src/instr/instr_paje_trace.cpp @@ -21,8 +21,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr, "tracing event system"); -extern s_instr_trace_writer_t active_writer; - static std::stringstream stream; FILE *tracing_file = nullptr; @@ -35,10 +33,6 @@ void print_NULL(PajeEvent* event){} /* The active set of functions for the selected trace format * By default, they all do nothing, hence the print_NULL to avoid segfaults */ -s_instr_trace_writer_t active_writer = {&print_NULL, &print_NULL, &print_NULL, &print_NULL, &print_NULL, &print_NULL, - &print_NULL, &print_NULL, &print_NULL, &print_NULL, &print_NULL, &print_NULL, - &print_NULL, &print_NULL, &print_NULL, &print_NULL, &print_NULL, &print_NULL}; - std::vector buffer; void buffer_debug(std::vector *buf); @@ -126,9 +120,9 @@ static void print_timestamp(PajeEvent* event) { /* prevent 0.0000 in the trace - this was the behavior before the transition to c++ */ if (event->timestamp < 1e-12) stream << 0; - else + else stream << event->timestamp; -} +} /* internal do the instrumentation module */ static void insert_into_buffer (PajeEvent* tbi) @@ -150,7 +144,6 @@ static void insert_into_buffer (PajeEvent* tbi) if (e1->timestamp <= tbi->timestamp) break; } - buffer.insert(i.base(), tbi); if (i == buffer.rend()) XBT_DEBUG("%s: inserted at beginning", __FUNCTION__); else if (i == buffer.rbegin()) @@ -158,6 +151,7 @@ static void insert_into_buffer (PajeEvent* tbi) else XBT_DEBUG("%s: inserted at pos= %zd from its end", __FUNCTION__, std::distance(buffer.rbegin(),i)); + buffer.insert(i.base(), tbi); buffer_debug(&buffer); } @@ -218,23 +212,41 @@ void TRACE_paje_end() { XBT_DEBUG("Filename %s is closed", filename); } -DefineContainerEvent::DefineContainerEvent(type_t type) +void DefineContainerEvent(type_t type) { - - event_type = PAJE_DefineContainerType; - timestamp = 0; - this->type = type; - XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event_type); + XBT_DEBUG("%s: event_type=%d", __FUNCTION__, PAJE_DefineContainerType); //print it - print (); + if (instr_fmt_type == instr_fmt_paje) { + XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, PAJE_DefineContainerType, TRACE_precision(), 0.); + stream << std::fixed << std::setprecision(TRACE_precision()); + stream << PAJE_DefineContainerType; + stream << " " << type->id + << " " << type->father->id + << " " << type->name; + print_row(); + } else if (instr_fmt_type == instr_fmt_TI) { + /* Nothing to do */ + } else { + THROW_IMPOSSIBLE; + } + //-- } -void DefineContainerEvent::print() { - if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp); + + +void LogVariableTypeDefinition(type_t type) +{ + + XBT_DEBUG("%s: event_type=%d", __FUNCTION__, PAJE_DefineVariableType); + + //print it +if (instr_fmt_type == instr_fmt_paje) { + XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, PAJE_DefineVariableType, TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); - stream << (int)this->event_type; + stream << PAJE_DefineVariableType; stream << " " << type->id << " " << type->father->id << " " << type->name; + if (type->color) + stream << " \"" << type->color << "\""; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -244,26 +256,14 @@ void DefineContainerEvent::print() { } -DefineVariableTypeEvent::DefineVariableTypeEvent(type_t type) +void LogStateTypeDefinition(type_t type) { - this->event_type = PAJE_DefineVariableType; - this->timestamp = 0; - this->type = type; - - XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event_type); - //print it - print (); -} - -void DefineVariableTypeEvent::print() { - if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp); +if (instr_fmt_type == instr_fmt_paje) { + XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, PAJE_DefineStateType, TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); - stream << (int)this->event_type; + stream << PAJE_DefineStateType; stream << " " << type->id << " " << type->father->id << " " << type->name; - if (type->color) - stream << " \"" << type->color << "\""; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { /* Nothing to do */ @@ -272,18 +272,6 @@ void DefineVariableTypeEvent::print() { } } -DefineStateTypeEvent::DefineStateTypeEvent(type_t type) -{ - this->event_type = PAJE_DefineStateType; - this->timestamp = 0; - this->type = type; - - XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event_type); - - //print it - print(); -} - DefineEventTypeEvent::DefineEventTypeEvent(type_t type) { @@ -298,20 +286,6 @@ DefineEventTypeEvent::DefineEventTypeEvent(type_t type) } -void DefineStateTypeEvent::print() { - if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp); - stream << std::fixed << std::setprecision(TRACE_precision()); - stream << (int)this->event_type; - stream << " " << type->id << " " << type->father->id << " " << type->name; - print_row(); - } else if (instr_fmt_type == instr_fmt_TI) { - /* Nothing to do */ - } else { - THROW_IMPOSSIBLE; - } -} - void DefineEventTypeEvent::print() { if (instr_fmt_type == instr_fmt_paje) { XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp); @@ -326,25 +300,14 @@ void DefineEventTypeEvent::print() { } } -DefineLinkTypeEvent::DefineLinkTypeEvent(type_t type, type_t source, type_t dest) +void LogLinkTypeDefinition(type_t type, type_t source, type_t dest) { - this->event_type = PAJE_DefineLinkType; - this->timestamp = 0; - this->type = type; - this->source = source; - this->dest = dest; - - XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event_type); - + XBT_DEBUG("%s: event_type=%d", __FUNCTION__, PAJE_DefineLinkType); //print it - print(); -} - -void DefineLinkTypeEvent::print() { - if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp); +if (instr_fmt_type == instr_fmt_paje) { + XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, PAJE_DefineLinkType, TRACE_precision(), 0.); stream << std::fixed << std::setprecision(TRACE_precision()); - stream << (int)this->event_type; + stream << PAJE_DefineLinkType; stream << " " << type->id << " " << type->father->id << " " << source->id << " " << dest->id << " " << type->name; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { @@ -354,24 +317,13 @@ void DefineLinkTypeEvent::print() { } } -DefineEntityValueEvent::DefineEntityValueEvent (val_t value) +void LogEntityValue (val_t value) { - this->event_type = PAJE_DefineEntityValue; - this->timestamp = 0; - this->value = value; - - XBT_DEBUG("%s: event_type=%d", __FUNCTION__, (int)event_type); - + XBT_DEBUG("%s: event_type=%d", __FUNCTION__, PAJE_DefineEntityValue); //print it - print(); -} - - -void DefineEntityValueEvent::print() { - if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp); +if (instr_fmt_type == instr_fmt_paje) { stream << std::fixed << std::setprecision(TRACE_precision()); - stream << (int)this->event_type; + stream << PAJE_DefineEntityValue; stream << " " << value->id << " " << value->father->id << " " << value->name; if (value->color) stream << " \"" << value->color << "\""; @@ -383,25 +335,24 @@ void DefineEntityValueEvent::print() { } } -CreateContainerEvent::CreateContainerEvent (container_t container) + +void LogContainerCreation (container_t container) { - this->event_type = PAJE_CreateContainer; - this->timestamp = SIMIX_get_clock(); - this->container = container; + double timestamp = SIMIX_get_clock(); - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event_type, this->timestamp); + XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, PAJE_CreateContainer,timestamp); - print(); -} - -void CreateContainerEvent::print() { - if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp); +if (instr_fmt_type == instr_fmt_paje) { stream << std::fixed << std::setprecision(TRACE_precision()); - stream << (int)this->event_type; - print_timestamp(this); - stream << " " << container->id << " " << container->type->id << " " << container->father->id << " \"" - << container->name << "\""; + stream << 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->id << " " << container->father->id << " \"" + << container->name << "\""; print_row(); } else if (instr_fmt_type == instr_fmt_TI) { @@ -436,25 +387,22 @@ void CreateContainerEvent::print() { } } -DestroyContainerEvent::DestroyContainerEvent (container_t container) +void LogContainerDestruction(container_t container) { - this->event_type = PAJE_DestroyContainer; - this->timestamp = SIMIX_get_clock(); - this->container = container; - - XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event_type, this->timestamp); + double timestamp = SIMIX_get_clock(); - print(); -} + XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, PAJE_DestroyContainer, timestamp); -void DestroyContainerEvent::print() { - if (instr_fmt_type == instr_fmt_paje) { - XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp); +if (instr_fmt_type == instr_fmt_paje) { stream << std::fixed << std::setprecision(TRACE_precision()); - stream << (int)this->event_type; - print_timestamp(this); + stream << 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->id << " " << container->id; - print_row(); } else if (instr_fmt_type == instr_fmt_TI) { if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || xbt_dict_length(tracing_files) == 1) { @@ -467,6 +415,7 @@ void DestroyContainerEvent::print() { } } + SetVariableEvent::SetVariableEvent (double timestamp, container_t container, type_t type, double value) { this->event_type = PAJE_SetVariable; @@ -818,6 +767,7 @@ ResetStateEvent::ResetStateEvent (double timestamp, container_t container, type_ XBT_DEBUG("%s: event_type=%d, timestamp=%f", __FUNCTION__, (int)event_type, this->timestamp); insert_into_buffer (this); + delete [] this; } void ResetStateEvent::print() { @@ -835,6 +785,11 @@ void ResetStateEvent::print() { } } +StartLinkEvent::~StartLinkEvent() +{ + free(value); + free(key); +} StartLinkEvent::StartLinkEvent (double timestamp, container_t container, type_t type, container_t sourceContainer, const char *value, const char *key) : StartLinkEvent(timestamp, container, type, sourceContainer, value, key, -1) @@ -894,7 +849,11 @@ EndLinkEvent::EndLinkEvent (double timestamp, container_t container, type_t type insert_into_buffer (this); } - +EndLinkEvent::~EndLinkEvent() +{ + free(value); + free(key); +} void EndLinkEvent::print() { if (instr_fmt_type == instr_fmt_paje) { XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);