*/
void TRACE_host_set_state(const char* host, const char* state_name, const char* value_name)
{
- container_t container = simgrid::instr::Container::byName(host);
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName(state_name));
+ container_t container = simgrid::instr::Container::byName(host);
+ simgrid::instr::StateType* state = container->getState(state_name);
state->addEntityValue(value_name);
- state->setEvent(MSG_get_clock(), container, value_name);
+ state->setEvent(value_name);
}
/** \ingroup TRACE_user_variables
*/
void TRACE_host_push_state(const char* host, const char* state_name, const char* value_name)
{
- container_t container = simgrid::instr::Container::byName(host);
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName(state_name));
+ container_t container = simgrid::instr::Container::byName(host);
+ simgrid::instr::StateType* state = container->getState(state_name);
state->addEntityValue(value_name);
- state->pushEvent(MSG_get_clock(), container, value_name);
+ state->pushEvent(value_name);
}
/** \ingroup TRACE_user_variables
*/
void TRACE_host_pop_state(const char* host, const char* state_name)
{
- container_t container = simgrid::instr::Container::byName(host);
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName(state_name));
- state->popEvent(MSG_get_clock(), container);
+ simgrid::instr::Container::byName(host)->getState(state_name)->popEvent();
}
/** \ingroup TRACE_API
THROW_IMPOSSIBLE;
}
}
+
+StateType* Container::getState(std::string name)
+{
+ StateType* ret = dynamic_cast<StateType*>(type_->byName(name));
+ ret->setCallingContainer(this);
+ return ret;
+}
}
}
namespace simgrid {
namespace instr {
class Type;
+class StateType;
class Container {
long long int id_;
void logCreation();
void logDestruction();
+ StateType* getState(std::string name);
static Container* getRootContainer();
};
events_.clear();
}
-void StateType::setEvent(double timestamp, Container* container, std::string value_name)
+void StateType::setEvent(std::string value_name)
{
- events_.push_back(new StateEvent(timestamp, container, this, PAJE_SetState, getEntityValue(value_name)));
+ events_.push_back(new StateEvent(SIMIX_get_clock(), issuer_, this, PAJE_SetState, getEntityValue(value_name)));
}
-void StateType::pushEvent(double timestamp, Container* container, std::string value_name, void* extra)
+void StateType::pushEvent(std::string value_name, void* extra)
{
- events_.push_back(new StateEvent(timestamp, container, this, PAJE_PushState, getEntityValue(value_name), extra));
+ events_.push_back(
+ new StateEvent(SIMIX_get_clock(), issuer_, this, PAJE_PushState, getEntityValue(value_name), extra));
}
-void StateType::pushEvent(double timestamp, Container* container, std::string value_name)
+void StateType::pushEvent(std::string value_name)
{
- events_.push_back(new StateEvent(timestamp, container, this, PAJE_PushState, getEntityValue(value_name)));
+ events_.push_back(new StateEvent(SIMIX_get_clock(), issuer_, this, PAJE_PushState, getEntityValue(value_name)));
}
-void StateType::popEvent(double timestamp, Container* container)
+void StateType::popEvent()
{
- events_.push_back(new StateEvent(timestamp, container, this, PAJE_PopState, nullptr));
+ events_.push_back(new StateEvent(SIMIX_get_clock(), issuer_, this, PAJE_PopState, nullptr));
}
VariableType::VariableType(std::string name, std::string color, Type* father) : Type(name, name, color, father)
bool isColored() { return not color_.empty(); }
Type* byName(std::string name);
-
ContainerType* getOrCreateContainerType(std::string name);
EventType* getOrCreateEventType(std::string name);
LinkType* getOrCreateLinkType(std::string name, Type* source, Type* dest);
+
StateType* getOrCreateStateType(std::string name);
+ StateType* getState(std::string name);
+
VariableType* getOrCreateVariableType(std::string name, std::string color);
void logDefinition(e_event_type event_type);
class StateType : public ValueType {
std::vector<StateEvent*> events_;
+ Container* issuer_ = nullptr;
public:
StateType(std::string name, Type* father);
~StateType();
- void setEvent(double timestamp, Container* container, std::string value_name);
- void pushEvent(double timestamp, Container* container, std::string value_name);
- void pushEvent(double timestamp, Container* container, std::string value_name, void* extra);
- void popEvent(double timestamp, Container* container);
+ void setCallingContainer(Container* container) { issuer_ = container; }
+ void setEvent(std::string value_name);
+ void pushEvent(std::string value_name);
+ void pushEvent(std::string value_name, void* extra);
+ void popEvent();
};
}
}
XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_msg_process, instr, "MSG process");
-std::string instr_process_id(msg_process_t proc)
+std::string instr_pid(msg_process_t proc)
{
return std::string(proc->getCname()) + "-" + std::to_string(proc->getPid());
}
std::string key = std::to_string(counter++);
//start link
- container_t msg = simgrid::instr::Container::byName(instr_process_id(process));
+ container_t msg = simgrid::instr::Container::byName(instr_pid(process));
simgrid::instr::LinkType* link =
static_cast<simgrid::instr::LinkType*>(simgrid::instr::Type::getRootType()->byName("MSG_PROCESS_LINK"));
link->startEvent(MSG_get_clock(), simgrid::instr::Container::getRootContainer(), msg, "M", key);
TRACE_msg_process_create (MSG_process_get_name (process), MSG_process_get_PID (process), new_host);
//end link
- msg = simgrid::instr::Container::byName(instr_process_id(process));
+ msg = simgrid::instr::Container::byName(instr_pid(process));
link->endEvent(MSG_get_clock(), simgrid::instr::Container::getRootContainer(), msg, "M", key);
}
}
void TRACE_msg_process_suspend(msg_process_t process)
{
- if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(process));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->pushEvent(MSG_get_clock(), process_container, "suspend");
- }
+ if (TRACE_msg_process_is_enabled())
+ simgrid::instr::Container::byName(instr_pid(process))->getState("MSG_PROCESS_STATE")->pushEvent("suspend");
}
void TRACE_msg_process_resume(msg_process_t process)
{
- if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(process));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->popEvent(MSG_get_clock(), process_container);
- }
+ if (TRACE_msg_process_is_enabled())
+ simgrid::instr::Container::byName(instr_pid(process))->getState("MSG_PROCESS_STATE")->popEvent();
}
void TRACE_msg_process_sleep_in(msg_process_t process)
{
- if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(process));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->pushEvent(MSG_get_clock(), process_container, "sleep");
- }
+ if (TRACE_msg_process_is_enabled())
+ simgrid::instr::Container::byName(instr_pid(process))->getState("MSG_PROCESS_STATE")->pushEvent("sleep");
}
void TRACE_msg_process_sleep_out(msg_process_t process)
{
- if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(process));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->popEvent(MSG_get_clock(), process_container);
- }
+ if (TRACE_msg_process_is_enabled())
+ simgrid::instr::Container::byName(instr_pid(process))->getState("MSG_PROCESS_STATE")->popEvent();
}
{
XBT_DEBUG("EXEC,in %p, %lld, %s", task, task->counter, task->category);
- if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self()));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->pushEvent(MSG_get_clock(), process_container, "task_execute");
- }
+ if (TRACE_msg_process_is_enabled())
+ simgrid::instr::Container::byName(instr_pid(MSG_process_self()))
+ ->getState("MSG_PROCESS_STATE")
+ ->pushEvent("task_execute");
}
void TRACE_msg_task_execute_end(msg_task_t task)
{
XBT_DEBUG("EXEC,out %p, %lld, %s", task, task->counter, task->category);
- if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self()));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->popEvent(MSG_get_clock(), process_container);
- }
+ if (TRACE_msg_process_is_enabled())
+ simgrid::instr::Container::byName(instr_pid(MSG_process_self()))->getState("MSG_PROCESS_STATE")->popEvent();
}
/* MSG_task_destroy related functions */
{
XBT_DEBUG("GET,in");
- if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self()));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->pushEvent(MSG_get_clock(), process_container, "receive");
- }
+ if (TRACE_msg_process_is_enabled())
+ simgrid::instr::Container::byName(instr_pid(MSG_process_self()))
+ ->getState("MSG_PROCESS_STATE")
+ ->pushEvent("receive");
}
void TRACE_msg_task_get_end(double start_time, msg_task_t task)
XBT_DEBUG("GET,out %p, %lld, %s", task, task->counter, task->category);
if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self()));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->popEvent(MSG_get_clock(), process_container);
+ container_t process_container = simgrid::instr::Container::byName(instr_pid(MSG_process_self()));
+ process_container->getState("MSG_PROCESS_STATE")->popEvent();
std::string key = std::string("p") + std::to_string(task->counter);
simgrid::instr::LinkType* link =
XBT_DEBUG("PUT,in %p, %lld, %s", task, task->counter, task->category);
if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self()));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->pushEvent(MSG_get_clock(), process_container, "send");
+ container_t process_container = simgrid::instr::Container::byName(instr_pid(MSG_process_self()));
+ process_container->getState("MSG_PROCESS_STATE")->pushEvent("send");
std::string key = std::string("p") + std::to_string(task->counter);
simgrid::instr::LinkType* link =
{
XBT_DEBUG("PUT,out");
- if (TRACE_msg_process_is_enabled()){
- container_t process_container = simgrid::instr::Container::byName(instr_process_id(MSG_process_self()));
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(process_container->type_->byName("MSG_PROCESS_STATE"));
- state->popEvent(MSG_get_clock(), process_container);
- }
+ if (TRACE_msg_process_is_enabled())
+ simgrid::instr::Container::byName(instr_pid(MSG_process_self()))->getState("MSG_PROCESS_STATE")->popEvent();
}
};
typedef s_MSG_Global_t* MSG_Global_t;
-XBT_PRIVATE std::string instr_process_id(msg_process_t proc);
+XBT_PRIVATE std::string instr_pid(msg_process_t proc);
extern "C" {
{
vm->start();
if (TRACE_msg_vm_is_enabled()) {
- container_t vm_container = simgrid::instr::Container::byName(vm->getName());
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(vm_container->type_->byName("MSG_VM_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(vm->getName())->getState("MSG_VM_STATE");
state->addEntityValue("start", "0 0 1"); // start is blue
- state->pushEvent(MSG_get_clock(), vm_container, "start");
+ state->pushEvent("start");
}
}
XBT_DEBUG("vm_suspend done");
if (TRACE_msg_vm_is_enabled()) {
- container_t vm_container = simgrid::instr::Container::byName(vm->getName());
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(vm_container->type_->byName("MSG_VM_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(vm->getName())->getState("MSG_VM_STATE");
state->addEntityValue("suspend", "1 0 0"); // suspend is red
- state->pushEvent(MSG_get_clock(), vm_container, "suspend");
+ state->pushEvent("suspend");
}
}
{
vm->pimpl_vm_->resume();
- if (TRACE_msg_vm_is_enabled()) {
- container_t vm_container = simgrid::instr::Container::byName(vm->getName());
- simgrid::instr::StateType* state =
- static_cast<simgrid::instr::StateType*>(vm_container->type_->byName("MSG_VM_STATE"));
- state->popEvent(MSG_get_clock(), vm_container);
- }
+ if (TRACE_msg_vm_is_enabled())
+ simgrid::instr::Container::byName(vm->getName())->getState("MSG_VM_STATE")->popEvent();
}
/** @brief Get the physical host of a given VM.
return;
}
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE");
const char *color = instr_find_color (operation);
state->addEntityValue(operation, color);
- state->pushEvent(SIMIX_get_clock(), container, operation, static_cast<void*>(extra));
+ state->pushEvent(operation, static_cast<void*>(extra));
}
void TRACE_smpi_collective_out(int rank, const char *operation)
{
- if (not TRACE_smpi_is_enabled())
- return;
-
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
- state->popEvent(SIMIX_get_clock(), container);
+ if (TRACE_smpi_is_enabled())
+ simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE")->popEvent();
}
void TRACE_smpi_computing_init(int rank)
if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_computing())
return;
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE");
state->addEntityValue("computing", instr_find_color("computing"));
- state->pushEvent(SIMIX_get_clock(), container, "computing");
+ state->pushEvent("computing");
}
void TRACE_smpi_computing_in(int rank, instr_extra_data extra)
return;
}
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE");
state->addEntityValue("computing");
- state->pushEvent(SIMIX_get_clock(), container, "computing", static_cast<void*>(extra));
+ state->pushEvent("computing", static_cast<void*>(extra));
}
void TRACE_smpi_computing_out(int rank)
if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_computing())
return;
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
- state->popEvent(SIMIX_get_clock(), container);
+ simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE")->popEvent();
}
void TRACE_smpi_sleeping_init(int rank)
if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_sleeping())
return;
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE");
state->addEntityValue("sleeping", instr_find_color("sleeping"));
- state->pushEvent(SIMIX_get_clock(), container, "sleeping");
+ state->pushEvent("sleeping");
}
void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra)
return;
}
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE");
state->addEntityValue("sleeping");
- state->pushEvent(SIMIX_get_clock(), container, "sleeping", static_cast<void*>(extra));
+ state->pushEvent("sleeping", static_cast<void*>(extra));
}
void TRACE_smpi_sleeping_out(int rank)
if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_sleeping())
return;
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
- state->popEvent(SIMIX_get_clock(), container);
+ simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE")->popEvent();
}
void TRACE_smpi_testing_in(int rank, instr_extra_data extra)
return;
}
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE");
state->addEntityValue("test");
- state->pushEvent(SIMIX_get_clock(), container, "test", static_cast<void*>(extra));
+ state->pushEvent("test", static_cast<void*>(extra));
}
void TRACE_smpi_testing_out(int rank)
{
- if (not TRACE_smpi_is_enabled())
- return;
-
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
- state->popEvent(SIMIX_get_clock(), container);
+ if (TRACE_smpi_is_enabled())
+ simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE")->popEvent();
}
void TRACE_smpi_ptp_in(int rank, const char *operation, instr_extra_data extra)
return;
}
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
+ simgrid::instr::StateType* state = simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE");
state->addEntityValue(operation, instr_find_color(operation));
- state->pushEvent(SIMIX_get_clock(), container, operation, static_cast<void*>(extra));
+ state->pushEvent(operation, static_cast<void*>(extra));
}
void TRACE_smpi_ptp_out(int rank, int dst, const char *operation)
{
- if (not TRACE_smpi_is_enabled())
- return;
-
- container_t container = simgrid::instr::Container::byName(smpi_container(rank));
- simgrid::instr::StateType* state = static_cast<simgrid::instr::StateType*>(container->type_->byName("MPI_STATE"));
- state->popEvent(SIMIX_get_clock(), container);
+ if (TRACE_smpi_is_enabled())
+ simgrid::instr::Container::byName(smpi_container(rank))->getState("MPI_STATE")->popEvent();
}
void TRACE_smpi_send(int rank, int src, int dst, int tag, int size)