Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
move creation and destruction logging to Class
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 12 Oct 2017 13:18:07 +0000 (15:18 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 12 Oct 2017 13:18:07 +0000 (15:18 +0200)
src/instr/instr_paje_containers.cpp
src/instr/instr_paje_trace.cpp
src/instr/instr_private.hpp

index c06da67..5d194eb 100644 (file)
@@ -5,13 +5,23 @@
 
 #include "simgrid/s4u/Engine.hpp"
 #include "simgrid/s4u/Host.hpp"
-#include "surf/surf.h"
 #include "src/instr/instr_private.hpp"
+#include "surf/surf.h"
+#include <sys/stat.h>
+#ifdef WIN32
+#include <direct.h> // _mkdir
+#endif
 
+#include <iomanip> /** std::setprecision **/
+#include <sstream>
 #include <unordered_map>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_paje_containers, instr, "Paje tracing event system (containers)");
 
+extern FILE* tracing_file;
+extern std::map<container_t, FILE*> tracing_files; // TI specific
+double prefix = 0.0;                               // TI specific
+
 static container_t rootContainer = nullptr;    /* the root container */
 static std::unordered_map<std::string, container_t> allContainers; /* all created containers indexed by name */
 std::set<std::string> trivaNodeTypes;           /* all host types defined */
@@ -93,7 +103,7 @@ Container::Container(std::string name, e_container_types kind, Container* father
       type_ = Type::containerNew(typeNameBuff.c_str(), father_->type_);
     }
     father_->children_.insert({name_, this});
-    LogContainerCreation(this);
+    logCreation();
   } else if (kind_ == INSTR_AS) {
     type_ = Type::containerNew("0", nullptr);
   }
@@ -125,7 +135,7 @@ Container::~Container()
   // trace my destruction
   if (not TRACE_disable_destroy() && this != PJ_container_get_root()) {
     // do not trace the container destruction if user requests or if the container is root
-    LogContainerDestruction(this);
+    logDestruction();
   }
 
   // remove me from the allContainers data structure
@@ -154,5 +164,89 @@ void Container::removeFromParent()
     father_->children_.erase(name_);
   }
 }
+
+void Container::logCreation()
+{
+  double timestamp = SIMIX_get_clock();
+  std::stringstream stream;
+
+  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 << " " << id_ << " " << type_->getId() << " " << father_->id_ << " \"" << name_ << "\"" << std::endl;
+    fprintf(tracing_file, "%s", stream.str().c_str());
+    XBT_DEBUG("Dump %s", stream.str().c_str());
+    stream.str("");
+    stream.clear();
+  } 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, 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({this, ti_unique_file});
+  } else {
+    THROW_IMPOSSIBLE;
+  }
+}
+
+void Container::logDestruction()
+{
+  std::stringstream stream;
+  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 << " " << type_->getId() << " " << id_ << std::endl;
+    fprintf(tracing_file, "%s", stream.str().c_str());
+    XBT_DEBUG("Dump %s", stream.str().c_str());
+    stream.str("");
+    stream.clear();
+  } 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(this);
+      fclose(f);
+    }
+    tracing_files.erase(this);
+  } else {
+    THROW_IMPOSSIBLE;
+  }
+}
 }
 }
index 81f33e6..6ec46db 100644 (file)
 #include <sstream>
 #include <vector>
 #include <iomanip> /** std::setprecision **/
-#include <sys/stat.h>
-#ifdef WIN32
-#include <direct.h> // _mkdir
-#endif
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr, "tracing event system");
 
 static std::stringstream stream;
 FILE *tracing_file = nullptr;
 
-static std::map<container_t, FILE*> tracing_files; // TI specific
-static double prefix=0.0; // TI specific
+std::map<container_t, FILE*> tracing_files; // TI specific
 
 std::vector<simgrid::instr::PajeEvent*> buffer;
 void buffer_debug(std::vector<simgrid::instr::PajeEvent*>* buf);
@@ -301,83 +296,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)
index 77715de..0f63eaa 100644 (file)
@@ -12,6 +12,7 @@
 #include "simgrid/instr.h"
 #include "simgrid_config.h"
 #include "src/internal_config.h"
+#include "xbt/graph.h"
 #include <map>
 #include <set>
 #include <string>
@@ -24,9 +25,6 @@
 
 #define INSTR_DEFAULT_STR_SIZE 500
 
-#include "xbt/dict.h"
-#include "xbt/graph.h"
-
 namespace simgrid {
 namespace instr {
 
@@ -132,6 +130,8 @@ public:
   static Container* byNameOrNull(std::string name);
   static Container* byName(std::string name);
   void removeFromParent();
+  void logCreation();
+  void logDestruction();
 };
 
 //--------------------------------------------------
@@ -392,8 +392,6 @@ void LogContainerTypeDefinition(simgrid::instr::Type* type);
 void LogVariableTypeDefinition(simgrid::instr::Type* type);
 void LogStateTypeDefinition(simgrid::instr::Type* type);
 void LogLinkTypeDefinition(simgrid::instr::Type* type, simgrid::instr::Type* source, simgrid::instr::Type* dest);
-void LogContainerCreation(container_t container);
-void LogContainerDestruction(container_t container);
 void LogDefineEventType(simgrid::instr::Type* type);
 
 #endif