Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
simplify the way states are used in high-level instr modules
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 30 Oct 2017 13:46:17 +0000 (14:46 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 30 Oct 2017 13:46:17 +0000 (14:46 +0100)
src/instr/instr_interface.cpp
src/instr/instr_paje_containers.cpp
src/instr/instr_paje_containers.hpp
src/instr/instr_paje_types.cpp
src/instr/instr_paje_types.hpp
src/msg/instr_msg_process.cpp
src/msg/instr_msg_task.cpp
src/msg/msg_private.hpp
src/msg/msg_vm.cpp
src/smpi/internals/instr_smpi.cpp

index 17c13fc..e05d9c5 100644 (file)
@@ -942,10 +942,10 @@ void TRACE_host_state_declare_value (const char *state, const char *value, const
  */
 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
@@ -961,10 +961,10 @@ void TRACE_host_set_state(const char* host, const char* state_name, const char*
  */
 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
@@ -979,9 +979,7 @@ void TRACE_host_push_state(const char* host, const char* state_name, const char*
  */
 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
index 2b16c72..40b6fb0 100644 (file)
@@ -225,5 +225,12 @@ void Container::logDestruction()
     THROW_IMPOSSIBLE;
   }
 }
+
+StateType* Container::getState(std::string name)
+{
+  StateType* ret = dynamic_cast<StateType*>(type_->byName(name));
+  ret->setCallingContainer(this);
+  return ret;
+}
 }
 }
index 8f3fc3f..d18ddde 100644 (file)
@@ -12,6 +12,7 @@
 namespace simgrid {
 namespace instr {
 class Type;
+class StateType;
 
 class Container {
   long long int id_;
@@ -34,6 +35,7 @@ public:
   void logCreation();
   void logDestruction();
 
+  StateType* getState(std::string name);
   static Container* getRootContainer();
 };
 
index c842064..e9bd24f 100644 (file)
@@ -61,24 +61,25 @@ StateType::~StateType()
   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)
index c8c7a4c..10916d9 100644 (file)
@@ -40,11 +40,13 @@ public:
   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);
@@ -100,14 +102,16 @@ public:
 
 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();
 };
 }
 }
index c3e5b86..2066f50 100644 (file)
@@ -10,7 +10,7 @@
 
 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());
 }
@@ -23,7 +23,7 @@ void TRACE_msg_process_change_host(msg_process_t process, msg_host_t new_host)
     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);
@@ -35,7 +35,7 @@ void TRACE_msg_process_change_host(msg_process_t process, msg_host_t new_host)
     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);
   }
 }
@@ -71,40 +71,24 @@ void TRACE_msg_process_kill(smx_process_exit_status_t status, msg_process_t proc
 
 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();
 }
index 7a146ac..4ed8629 100644 (file)
@@ -48,24 +48,18 @@ void TRACE_msg_task_execute_start(msg_task_t task)
 {
   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 */
@@ -83,12 +77,10 @@ void TRACE_msg_task_get_start()
 {
   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)
@@ -96,10 +88,8 @@ 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 =
@@ -114,10 +104,8 @@ int TRACE_msg_task_put_start(msg_task_t task)
   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 =
@@ -132,10 +120,6 @@ void TRACE_msg_task_put_end()
 {
   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();
 }
index d689f4c..faf4fdb 100644 (file)
@@ -94,7 +94,7 @@ struct s_MSG_Global_t {
 };
 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" {
 
index 6f5c673..2e067af 100644 (file)
@@ -185,11 +185,9 @@ void MSG_vm_start(msg_vm_t vm)
 {
   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");
   }
 }
 
@@ -767,11 +765,9 @@ void MSG_vm_suspend(msg_vm_t vm)
   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");
   }
 }
 
@@ -784,12 +780,8 @@ void MSG_vm_resume(msg_vm_t vm)
 {
   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.
index 3dc3f33..dfe1b8b 100644 (file)
@@ -197,21 +197,16 @@ void TRACE_smpi_collective_in(int rank, const char *operation, instr_extra_data
     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)
@@ -220,10 +215,9 @@ 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)
@@ -234,10 +228,9 @@ 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)
@@ -245,9 +238,7 @@ 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)
@@ -256,10 +247,9 @@ 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)
@@ -270,10 +260,9 @@ 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)
@@ -281,9 +270,7 @@ 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)
@@ -294,20 +281,15 @@ 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)
@@ -317,20 +299,15 @@ 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)