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!");
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;
}
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;
*/
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());
}
}
*/
const char *MSG_task_get_category (msg_task_t task)
{
- return task->category;
+ return task->simdata->get_tracing_category().c_str();
}
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)
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 */