X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/97d3d0bab765d9dd6ebb10509c66ecb339b76f4f..005e4320f33604069f8ee1950a68c6e93234fd38:/src/instr/instr_interface.cpp diff --git a/src/instr/instr_interface.cpp b/src/instr/instr_interface.cpp index c55c99fc7a..277e3a9c8f 100644 --- a/src/instr/instr_interface.cpp +++ b/src/instr/instr_interface.cpp @@ -1,14 +1,17 @@ -/* Copyright (c) 2010-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2010-2020. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include "simgrid/Exception.hpp" #include "simgrid/kernel/routing/NetPoint.hpp" #include "src/instr/instr_private.hpp" #include "src/surf/network_interface.hpp" #include "src/surf/surf_private.hpp" #include "surf/surf.hpp" #include +#include +#include enum class InstrUserVariable { DECLARE, SET, ADD, SUB }; @@ -22,13 +25,13 @@ std::set user_link_variables; extern std::set trivaNodeTypes; extern std::set trivaEdgeTypes; -static xbt_dynar_t instr_set_to_dynar(std::set* filter) +static xbt_dynar_t instr_set_to_dynar(const std::set& filter) { if (not TRACE_is_enabled() || not TRACE_needs_platform()) return nullptr; xbt_dynar_t ret = xbt_dynar_new (sizeof(char*), &xbt_free_ref); - for (auto const& name : *filter) + for (auto const& name : filter) xbt_dynar_push_as(ret, char*, xbt_strdup(name.c_str())); return ret; @@ -88,9 +91,11 @@ void TRACE_category_with_color (const char *category, const char *color) std::string final_color; if (not color) { //generate a random color - double red = drand48(); - double green = drand48(); - double blue = drand48(); + static std::default_random_engine rnd_engine; + std::uniform_real_distribution prng(0.0, std::nextafter(1.0, 2.0)); + double red = prng(rnd_engine); + double green = prng(rnd_engine); + double blue = prng(rnd_engine); final_color = std::to_string(red) + " " + std::to_string(green) + " " + std::to_string(blue); }else{ final_color = std::string(color); @@ -118,7 +123,7 @@ xbt_dynar_t TRACE_get_categories () { if (not TRACE_is_enabled() || not TRACE_categorized()) return nullptr; - return instr_set_to_dynar(&created_categories); + return instr_set_to_dynar(created_categories); } /** @ingroup TRACE_mark @@ -133,7 +138,7 @@ xbt_dynar_t TRACE_get_categories () */ void TRACE_declare_mark(const char *mark_type) { - /* safe switchs. tracing has to be activated and if platform is not traced, we can't deal with marks */ + /* safe switches. tracing has to be activated and if platform is not traced, we can't deal with marks */ if (not TRACE_is_enabled() || not TRACE_needs_platform()) return; @@ -141,7 +146,8 @@ void TRACE_declare_mark(const char *mark_type) //check if mark_type is already declared if (declared_marks.find(mark_type) != declared_marks.end()) { - THROWF (tracing_error, 1, "mark_type with name (%s) is already declared", mark_type); + throw simgrid::TracingError(XBT_THROW_POINT, + simgrid::xbt::string_printf("mark_type with name (%s) is already declared", mark_type)); } XBT_DEBUG("MARK,declare %s", mark_type); @@ -176,7 +182,8 @@ void TRACE_declare_mark_value_with_color (const char *mark_type, const char *mar simgrid::instr::EventType* type = static_cast(simgrid::instr::Container::get_root()->type_->by_name(mark_type)); if (not type) { - THROWF (tracing_error, 1, "mark_type with name (%s) is not declared", mark_type); + throw simgrid::TracingError(XBT_THROW_POINT, + simgrid::xbt::string_printf("mark_type with name (%s) is not declared", mark_type)); } else { if (not mark_color) mark_color = "1.0 1.0 1.0" /*white*/; @@ -230,7 +237,8 @@ void TRACE_mark(const char *mark_type, const char *mark_value) simgrid::instr::EventType* type = static_cast(simgrid::instr::Container::get_root()->type_->by_name(mark_type)); if (not type) { - THROWF (tracing_error, 1, "mark_type with name (%s) is not declared", mark_type); + throw simgrid::TracingError(XBT_THROW_POINT, + simgrid::xbt::string_printf("mark_type with name (%s) is not declared", mark_type)); } else { XBT_DEBUG("MARK %s %s", mark_type, mark_value); new simgrid::instr::NewEvent(MSG_get_clock(), simgrid::instr::Container::get_root(), type, @@ -250,7 +258,7 @@ xbt_dynar_t TRACE_get_marks () if (not TRACE_is_enabled()) return nullptr; - return instr_set_to_dynar(&declared_marks); + return instr_set_to_dynar(declared_marks); } static void instr_user_variable(double time, const char* resource, const char* variable_name, const char* father_type, @@ -283,7 +291,6 @@ static void instr_user_variable(double time, const char* resource, const char* v break; default: THROW_IMPOSSIBLE; - break; } } } @@ -613,7 +620,7 @@ void TRACE_host_variable_sub_with_time (double time, const char *host, const cha */ xbt_dynar_t TRACE_get_host_variables () { - return instr_set_to_dynar(&user_host_variables); + return instr_set_to_dynar(user_host_variables); } /* for link variables */ @@ -884,7 +891,7 @@ void TRACE_link_srcdst_variable_sub_with_time (double time, const char *src, con */ xbt_dynar_t TRACE_get_link_variables () { - return instr_set_to_dynar(&user_link_variables); + return instr_set_to_dynar(user_link_variables); } /** @ingroup TRACE_user_variables @@ -978,7 +985,7 @@ void TRACE_host_pop_state(const char* host, const char* state_name) */ xbt_dynar_t TRACE_get_node_types () { - return instr_set_to_dynar(&trivaNodeTypes); + return instr_set_to_dynar(trivaNodeTypes); } /** @ingroup TRACE_API @@ -991,5 +998,5 @@ xbt_dynar_t TRACE_get_node_types () */ xbt_dynar_t TRACE_get_edge_types () { - return instr_set_to_dynar(&trivaEdgeTypes); + return instr_set_to_dynar(trivaEdgeTypes); }