namespace simgrid {
namespace instr {
-NewEvent::NewEvent(double timestamp, container_t container, Type* type, EntityValue* val)
- : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_NewEvent), val(val)
+PajeEvent::PajeEvent(Container* container, Type* type, double timestamp, e_event_type eventType)
+ : container_(container), type_(type), timestamp_(timestamp), eventType_(eventType)
{
- XBT_DEBUG("%s: event_type=%u, timestamp=%f", __func__, eventType_, timestamp_);
- insertIntoBuffer();
-}
-
-LinkEvent::LinkEvent(container_t container, Type* type, e_event_type event_type, container_t endpoint,
- std::string value, std::string key)
- : LinkEvent(container, type, event_type, endpoint, value, key, -1)
-{
-}
-
-LinkEvent::LinkEvent(container_t container, Type* type, e_event_type event_type, container_t endpoint,
- std::string value, std::string key, int size)
- : PajeEvent(container, type, SIMIX_get_clock(), event_type)
- , endpoint_(endpoint)
- , value_(value)
- , key_(key)
- , size_(size)
-{
- XBT_DEBUG("%s: event_type=%u, timestamp=%f, value:%s", __func__, eventType_, timestamp_, value_.c_str());
- insertIntoBuffer();
-}
-
-VariableEvent::VariableEvent(double timestamp, Container* container, Type* type, e_event_type event_type, double value)
- : PajeEvent::PajeEvent(container, type, timestamp, event_type), value(value)
-{
- XBT_DEBUG("%s: event_type=%u, timestamp=%f", __func__, eventType_, timestamp_);
+ XBT_DEBUG("%s: event_type=%u, timestamp=%.*f", __func__, eventType_, TRACE_precision(), timestamp_);
+ if (instr_fmt_type == instr_fmt_paje) {
+ stream_ << std::fixed << std::setprecision(TRACE_precision());
+ stream_ << eventType_ << " " << timestamp_ << " " << type_->get_id() << " " << container_->get_id();
+ }
insertIntoBuffer();
-}
-
-StateEvent::StateEvent(Container* container, Type* type, e_event_type event_type, EntityValue* value)
- : StateEvent(container, type, event_type, value, nullptr)
-{
-}
+};
StateEvent::StateEvent(Container* container, Type* type, e_event_type event_type, EntityValue* value, TIData* extra)
: PajeEvent::PajeEvent(container, type, SIMIX_get_clock(), event_type), value(value), extra_(extra)
filename = loc->filename;
linenumber = loc->linenumber;
}
-#else
- filename = "(null)";
- linenumber = -1;
#endif
-
- XBT_DEBUG("%s: event_type=%u, timestamp=%f", __func__, eventType_, timestamp_);
- insertIntoBuffer();
-};
+}
void NewEvent::print()
{
- std::stringstream stream;
- stream << std::fixed << std::setprecision(TRACE_precision());
- XBT_DEBUG("%s: event_type=%u, timestamp=%.*f", __func__, eventType_, TRACE_precision(), timestamp_);
if (instr_fmt_type != instr_fmt_paje)
return;
- stream << eventType_ << " " << timestamp_ << " ";
- stream << getType()->get_id() << " " << getContainer()->get_id() << " " << val->getId();
- XBT_DEBUG("Dump %s", stream.str().c_str());
- fprintf(tracing_file, "%s\n", stream.str().c_str());
+ stream_ << " " << value->getId();
+
+ XBT_DEBUG("Dump %s", stream_.str().c_str());
+ fprintf(tracing_file, "%s\n", stream_.str().c_str());
}
void LinkEvent::print()
{
- std::stringstream stream;
- stream << std::fixed << std::setprecision(TRACE_precision());
- XBT_DEBUG("%s: event_type=%u, timestamp=%.*f", __func__, eventType_, TRACE_precision(), timestamp_);
if (instr_fmt_type != instr_fmt_paje)
return;
- stream << eventType_ << " " << timestamp_ << " " << getType()->get_id() << " " << getContainer()->get_id();
- stream << " " << value_ << " " << endpoint_->get_id() << " " << key_;
+ stream_ << " " << value_ << " " << endpoint_->get_id() << " " << key_;
- if (TRACE_display_sizes()) {
- stream << " " << size_;
- }
- XBT_DEBUG("Dump %s", stream.str().c_str());
- fprintf(tracing_file, "%s\n", stream.str().c_str());
+ if (TRACE_display_sizes())
+ stream_ << " " << size_;
+
+ XBT_DEBUG("Dump %s", stream_.str().c_str());
+ fprintf(tracing_file, "%s\n", stream_.str().c_str());
}
void VariableEvent::print()
{
- std::stringstream stream;
- stream << std::fixed << std::setprecision(TRACE_precision());
- XBT_DEBUG("%s: event_type=%u, timestamp=%.*f", __func__, eventType_, TRACE_precision(), timestamp_);
if (instr_fmt_type != instr_fmt_paje)
return;
- stream << eventType_ << " " << timestamp_ << " ";
- stream << getType()->get_id() << " " << getContainer()->get_id() << " " << value;
- XBT_DEBUG("Dump %s", stream.str().c_str());
- fprintf(tracing_file, "%s\n", stream.str().c_str());
+ stream_ << " " << value;
+
+ XBT_DEBUG("Dump %s", stream_.str().c_str());
+ fprintf(tracing_file, "%s\n", stream_.str().c_str());
}
void StateEvent::print()
{
- std::stringstream stream;
- stream << std::fixed << std::setprecision(TRACE_precision());
- XBT_DEBUG("%s: event_type=%u, timestamp=%.*f", __func__, eventType_, TRACE_precision(), timestamp_);
if (instr_fmt_type == instr_fmt_paje) {
- stream << eventType_ << " " << timestamp_ << " " << getType()->get_id() << " " << getContainer()->get_id();
if (value != nullptr) // PAJE_PopState Event does not need to have a value
- stream << " " << value->getId();
+ stream_ << " " << value->getId();
if (TRACE_display_sizes())
- stream << " " << ((extra_ != nullptr) ? extra_->display_size() : 0);
+ stream_ << " " << ((extra_ != nullptr) ? extra_->display_size() : 0);
#if HAVE_SMPI
if (xbt_cfg_get_boolean("smpi/trace-call-location")) {
- stream << " \"" << filename << "\" " << linenumber;
+ stream_ << " \"" << filename << "\" " << linenumber;
}
#endif
- XBT_DEBUG("Dump %s", stream.str().c_str());
- fprintf(tracing_file, "%s\n", stream.str().c_str());
+ XBT_DEBUG("Dump %s", stream_.str().c_str());
+ fprintf(tracing_file, "%s\n", stream_.str().c_str());
} else if (instr_fmt_type == instr_fmt_TI) {
if (extra_ == nullptr)
return;
// FIXME: dirty extract "rank-" from the name, as we want the bare process id here
if (getContainer()->get_name().find("rank-") != 0)
- stream << getContainer()->get_name() << " " << extra_->print();
+ stream_ << getContainer()->get_name() << " " << extra_->print();
else
/* Subtract -1 because this is the process id and we transform it to the rank id */
- stream << stoi(getContainer()->get_name().erase(0, 5)) - 1 << " " << extra_->print();
+ stream_ << stoi(getContainer()->get_name().erase(0, 5)) - 1 << " " << extra_->print();
- fprintf(tracing_files.at(getContainer()), "%s\n", stream.str().c_str());
+ fprintf(tracing_files.at(getContainer()), "%s\n", stream_.str().c_str());
} else {
THROW_IMPOSSIBLE;
}
#define INSTR_PAJE_EVENTS_HPP
#include "src/instr/instr_private.hpp"
+#include <sstream>
#include <string>
namespace simgrid {
class PajeEvent {
Container* container_;
Type* type_;
-
protected:
- Type* getType() { return type_; }
Container* getContainer() { return container_; }
public:
double timestamp_;
e_event_type eventType_;
- PajeEvent(Container* container, Type* type, double timestamp, e_event_type eventType)
- : container_(container), type_(type), timestamp_(timestamp), eventType_(eventType){};
+ std::stringstream stream_;
+
+ PajeEvent(Container* container, Type* type, double timestamp, e_event_type eventType);
virtual ~PajeEvent() = default;
virtual void print() = 0;
void insertIntoBuffer();
double value;
public:
- VariableEvent(double timestamp, Container* container, Type* type, e_event_type event_type, double value);
+ VariableEvent(double timestamp, Container* container, Type* type, e_event_type event_type, double value)
+ : PajeEvent::PajeEvent(container, type, timestamp, event_type), value(value)
+ {
+ }
void print() override;
};
class StateEvent : public PajeEvent {
EntityValue* value;
- std::string filename;
- int linenumber = 0;
- TIData* extra_ = nullptr;
+ std::string filename = "(null)";
+ int linenumber = -1;
+ TIData* extra_;
public:
- StateEvent(Container* container, Type* type, e_event_type event_type, EntityValue* value);
StateEvent(Container* container, Type* type, e_event_type event_type, EntityValue* value, TIData* extra);
void print() override;
};
public:
LinkEvent(Container* container, Type* type, e_event_type event_type, Container* sourceContainer, std::string value,
- std::string key);
- LinkEvent(Container* container, Type* type, e_event_type event_type, Container* sourceContainer, std::string value,
- std::string key, int size);
+ std::string key, int size)
+ : PajeEvent(container, type, SIMIX_get_clock(), event_type)
+ , endpoint_(sourceContainer)
+ , value_(value)
+ , key_(key)
+ , size_(size)
+ {
+ }
void print() override;
};
class NewEvent : public PajeEvent {
- EntityValue* val;
+ EntityValue* value;
public:
- NewEvent(double timestamp, Container* container, Type* type, EntityValue* val);
+ NewEvent(double timestamp, Container* container, Type* type, EntityValue* value)
+ : simgrid::instr::PajeEvent::PajeEvent(container, type, timestamp, PAJE_NewEvent), value(value)
+ {
+ }
void print() override;
};
}
void StateType::setEvent(std::string value_name)
{
- events_.push_back(new StateEvent(issuer_, this, PAJE_SetState, getEntityValue(value_name)));
+ events_.push_back(new StateEvent(issuer_, this, PAJE_SetState, getEntityValue(value_name), nullptr));
}
void StateType::pushEvent(std::string value_name, TIData* extra)
void StateType::pushEvent(std::string value_name)
{
- events_.push_back(new StateEvent(issuer_, this, PAJE_PushState, getEntityValue(value_name)));
+ events_.push_back(new StateEvent(issuer_, this, PAJE_PushState, getEntityValue(value_name), nullptr));
}
void StateType::popEvent()
{
- events_.push_back(new StateEvent(issuer_, this, PAJE_PopState, nullptr));
+ events_.push_back(new StateEvent(issuer_, this, PAJE_PopState, nullptr, nullptr));
}
VariableType::VariableType(std::string name, std::string color, Type* father) : Type(name, name, color, father)
void LinkType::endEvent(container_t endContainer, std::string value, std::string key)
{
- new LinkEvent(issuer_, this, PAJE_EndLink, endContainer, value, key);
+ new LinkEvent(issuer_, this, PAJE_EndLink, endContainer, value, key, -1);
}
void Type::logDefinition(e_event_type event_type)