From c2ee13e39edc041a79cce8d08fd58d0d45c3502b Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Mon, 25 Feb 2019 15:48:36 +0100 Subject: [PATCH] mv category from msg_task_t to simgrid::msg::Task --- include/simgrid/msg.h | 1 - src/msg/instr_msg_task.cpp | 2 +- src/msg/msg_gos.cpp | 33 ++++++++++++++++++--------------- src/msg/msg_private.hpp | 7 ++++++- src/msg/msg_task.cpp | 4 ---- 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/include/simgrid/msg.h b/include/simgrid/msg.h index 47da526f94..9a0d2cf40a 100644 --- a/include/simgrid/msg.h +++ b/include/simgrid/msg.h @@ -243,7 +243,6 @@ typedef struct msg_task { simdata_task_t simdata; /**< @brief simulator data */ void* data; /**< @brief user data */ long long int counter; /* task unique identifier for instrumentation */ - char* category; /* task category for instrumentation */ } s_msg_task_t; /** @brief Task datatype. diff --git a/src/msg/instr_msg_task.cpp b/src/msg/instr_msg_task.cpp index 90fa914c21..bd2a503d6c 100644 --- a/src/msg/instr_msg_task.cpp +++ b/src/msg/instr_msg_task.cpp @@ -15,7 +15,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_msg, instr, "MSG instrumentation"); /* MSG_task_put related functions */ void TRACE_msg_task_put_start(msg_task_t task) { - XBT_DEBUG("PUT,in %p, %lld, %s", task, task->counter, task->category); + XBT_DEBUG("PUT,in %p, %lld, %s", task, task->counter, task->simdata->get_tracing_category().c_str()); if (TRACE_actor_is_enabled()) { container_t process_container = simgrid::instr::Container::by_name(instr_pid(MSG_process_self())); diff --git a/src/msg/msg_gos.cpp b/src/msg/msg_gos.cpp index d73f7fd524..afae6c33fd 100644 --- a/src/msg/msg_gos.cpp +++ b/src/msg/msg_gos.cpp @@ -67,13 +67,14 @@ msg_error_t MSG_parallel_task_execute_with_timeout(msg_task_t task, double timeo std::move(task->simdata->get_name()), simdata->host_nb, simdata->host_list, simdata->flops_parallel_amount, simdata->bytes_parallel_amount, -1.0, timeout)); XBT_DEBUG("Parallel execution action created: %p", simdata->compute.get()); - if (task->category != nullptr) - simgrid::simix::simcall([task] { task->simdata->compute->set_category(task->category); }); + if (task->simdata->has_tracing_category()) + simgrid::simix::simcall( + [task] { task->simdata->compute->set_category(std::move(task->simdata->get_tracing_category())); }); } else { sg_host_t host = MSG_process_get_host(MSG_process_self()); simdata->compute = simgrid::simix::simcall([task, host] { - return simgrid::kernel::activity::ExecImplPtr( - new simgrid::kernel::activity::ExecImpl(std::move(task->simdata->get_name()), task->category ?: "", host)); + return simgrid::kernel::activity::ExecImplPtr(new simgrid::kernel::activity::ExecImpl( + std::move(task->simdata->get_name()), std::move(task->simdata->get_tracing_category()), host)); }); /* checking for infinite values */ xbt_assert(std::isfinite(simdata->flops_amount), "flops_amount is not finite!"); @@ -303,8 +304,9 @@ static inline msg_comm_t MSG_task_isend_internal(msg_task_t task, const char* al msg_comm = new simgrid::msg::Comm(task, nullptr, comm); } - if (TRACE_is_enabled() && task->category != nullptr) - simgrid::simix::simcall([comm, task] { comm->get_impl()->set_category(task->category); }); + if (TRACE_is_enabled() && task->simdata->has_tracing_category()) + simgrid::simix::simcall( + [comm, task] { comm->get_impl()->set_category(std::move(task->simdata->get_tracing_category())); }); return msg_comm; } @@ -740,8 +742,9 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl simgrid::s4u::Mailbox::by_name(alias)->put_init(task, t_simdata->bytes_amount)->set_rate(t_simdata->rate); t_simdata->comm = comm; comm->start(); - if (TRACE_is_enabled() && task->category != nullptr) - simgrid::simix::simcall([comm, task] { comm->get_impl()->set_category(task->category); }); + if (TRACE_is_enabled() && task->simdata->has_tracing_category()) + simgrid::simix::simcall( + [comm, task] { comm->get_impl()->set_category(std::move(task->simdata->get_tracing_category())); }); comm->wait_for(timeout); } catch (simgrid::TimeoutError& e) { ret = MSG_TIMEOUT; @@ -816,18 +819,18 @@ int MSG_task_listen_from(const char *alias) */ void MSG_task_set_category (msg_task_t task, const char *category) { - xbt_assert(task->category == nullptr, "Task %p(%s) already has a category (%s).", task, task->simdata->get_cname(), - task->category); + xbt_assert(not task->simdata->has_tracing_category(), "Task %p(%s) already has a category (%s).", task, + task->simdata->get_cname(), task->simdata->get_tracing_category().c_str()); // if user provides a nullptr category, task is no longer traced if (category == nullptr) { - xbt_free(task->category); - task->category = nullptr; + task->simdata->set_tracing_category(""); XBT_DEBUG("MSG task %p(%s), category removed", task, task->simdata->get_cname()); } else { // set task category - task->category = xbt_strdup(category); - XBT_DEBUG("MSG task %p(%s), category %s", task, task->simdata->get_cname(), task->category); + task->simdata->set_tracing_category(category); + XBT_DEBUG("MSG task %p(%s), category %s", task, task->simdata->get_cname(), + task->simdata->get_tracing_category().c_str()); } } @@ -842,5 +845,5 @@ void MSG_task_set_category (msg_task_t task, const char *category) */ const char *MSG_task_get_category (msg_task_t task) { - return task->category; + return task->simdata->get_tracing_category().c_str(); } diff --git a/src/msg/msg_private.hpp b/src/msg/msg_private.hpp index 2a494cfa2e..01ec91afd3 100644 --- a/src/msg/msg_private.hpp +++ b/src/msg/msg_private.hpp @@ -15,7 +15,9 @@ namespace simgrid { namespace msg { class Task { - std::string name_ = ""; /**< @brief task name if any */ + std::string name_ = ""; + std::string tracing_category_ = ""; + public: ~Task(); explicit Task(std::string name, double flops_amount, double bytes_amount) @@ -28,6 +30,9 @@ public: const std::string& get_name() const { return name_; } const char* get_cname() { return name_.c_str(); } void set_name(const char* new_name) { name_ = std::string(new_name); } + void set_tracing_category(const char* category) { tracing_category_ = category ? std::string(category) : ""; } + const std::string& get_tracing_category() { return tracing_category_; } + bool has_tracing_category() { return not tracing_category_.empty(); } kernel::activity::ExecImplPtr compute = nullptr; /* SIMIX modeling of computation */ s4u::CommPtr comm = nullptr; /* S4U modeling of communication */ diff --git a/src/msg/msg_task.cpp b/src/msg/msg_task.cpp index c55ae4f6b3..c4ad363213 100644 --- a/src/msg/msg_task.cpp +++ b/src/msg/msg_task.cpp @@ -69,9 +69,7 @@ msg_task_t MSG_task_create(const char *name, double flop_amount, double message_ /* Task structure */ task->data = data; - task->counter = counter++; - task->category = nullptr; if (MC_is_active()) MC_ignore_heap(&(task->counter), sizeof(task->counter)); @@ -189,8 +187,6 @@ msg_error_t MSG_task_destroy(msg_task_t task) MSG_task_cancel(task); } - xbt_free(task->category); - /* free main structures */ delete task->simdata; delete task; -- 2.20.1