From: Frederic Suter Date: Thu, 18 Aug 2016 10:55:03 +0000 (+0200) Subject: getting rid of dynar in instr (part 1) X-Git-Tag: v3_14~528 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/6051c95412884222a64b2aac0e9416990e2d1577 getting rid of dynar in instr (part 1) --- diff --git a/src/instr/instr_config.cpp b/src/instr/instr_config.cpp index 72cfabd53b..558bb7e82d 100644 --- a/src/instr/instr_config.cpp +++ b/src/instr/instr_config.cpp @@ -7,6 +7,8 @@ #include "src/instr/instr_private.h" #include "simgrid/sg_config.h" #include "surf/surf.h" +#include +#include XBT_LOG_NEW_CATEGORY(instr, "Logging the behavior of the tracing system (used for Visualization/Analysis of simulations)"); XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration"); @@ -87,12 +89,11 @@ static void TRACE_getopts() trace_precision = xbt_cfg_get_int(OPT_TRACING_PRECISION); } -static xbt_dynar_t TRACE_start_functions = nullptr; +static std::vector> TRACE_start_functions; + void TRACE_add_start_function(void (*func) ()) { - if (TRACE_start_functions == nullptr) - TRACE_start_functions = xbt_dynar_new(sizeof(void (*)()), nullptr); - xbt_dynar_push(TRACE_start_functions, &func); + TRACE_start_functions.push_back(func); } int TRACE_start() @@ -107,8 +108,6 @@ int TRACE_start() XBT_DEBUG("Tracing starts"); /* init the tracing module to generate the right output */ - /* open internal buffer */ - TRACE_init(); /* open the trace file(s) */ const char* format = xbt_cfg_get_string(OPT_TRACING_FORMAT); @@ -137,24 +136,17 @@ int TRACE_start() user_vm_variables = xbt_dict_new_homogeneous(xbt_free_f); user_link_variables = xbt_dict_new_homogeneous(xbt_free_f); - if (TRACE_start_functions != nullptr) { - void (*func) (); - unsigned int iter; - xbt_dynar_foreach(TRACE_start_functions, iter, func) { - func(); - } - } + for (auto func: TRACE_start_functions) + func(); } - xbt_dynar_free(&TRACE_start_functions); + TRACE_start_functions.clear(); return 0; } -static xbt_dynar_t TRACE_end_functions = nullptr; +static std::vector> TRACE_end_functions; void TRACE_add_end_function(void (*func) (void)) { - if (TRACE_end_functions == nullptr) - TRACE_end_functions = xbt_dynar_new(sizeof(void (*)(void)), nullptr); - xbt_dynar_push(TRACE_end_functions, &func); + TRACE_end_functions.push_back(func); } int TRACE_end() @@ -178,13 +170,9 @@ int TRACE_end() PJ_container_release(); PJ_type_release(); - if (TRACE_end_functions != nullptr) { - void (*func) (void); - unsigned int iter; - xbt_dynar_foreach(TRACE_end_functions, iter, func) { - func(); - } - } + for (auto func: TRACE_end_functions) + func(); + TRACE_start_functions.clear(); xbt_dict_free(&user_link_variables); xbt_dict_free(&user_host_variables); @@ -202,15 +190,12 @@ int TRACE_end() }else{ xbt_die("Unknown trace format :%s ", format); } - /* close internal buffer */ - TRACE_finalize(); + /* de-activate trace */ trace_active = 0; XBT_DEBUG("Tracing is off"); XBT_DEBUG("Tracing system is shutdown"); } - xbt_dynar_free(&TRACE_start_functions); /* useful when exiting early */ - xbt_dynar_free(&TRACE_end_functions); return retval; } diff --git a/src/instr/instr_private.h b/src/instr/instr_private.h index 2a9e63eda3..de371d1bf0 100644 --- a/src/instr/instr_private.h +++ b/src/instr/instr_private.h @@ -240,8 +240,6 @@ extern XBT_PRIVATE double TRACE_last_timestamp_to_dump; XBT_PRIVATE void TRACE_header(int basic, int size); /* from paje.c */ -XBT_PRIVATE void TRACE_init(); -XBT_PRIVATE void TRACE_finalize(); XBT_PRIVATE void TRACE_paje_init(); XBT_PRIVATE void TRACE_paje_start(); XBT_PRIVATE void TRACE_paje_end(); diff --git a/src/instr/instr_trace.cpp b/src/instr/instr_trace.cpp index 8f6e251fc7..6caad2a132 100644 --- a/src/instr/instr_trace.cpp +++ b/src/instr/instr_trace.cpp @@ -26,7 +26,7 @@ s_instr_trace_writer_t active_writer = { print_NULL, print_NULL }; -xbt_dynar_t buffer = nullptr; +std::vector buffer; void dump_comment (const char *comment) { @@ -56,16 +56,6 @@ void dump_comment_file (const char *filename) fclose(file); } -void TRACE_init() -{ - buffer = xbt_dynar_new(sizeof(paje_event_t), nullptr); -} - -void TRACE_finalize() -{ - xbt_dynar_free(&buffer); -} - double TRACE_last_timestamp_to_dump = 0; //dumps the trace file until the timestamp TRACE_last_timestamp_to_dump void TRACE_paje_dump_buffer (int force) @@ -73,26 +63,22 @@ void TRACE_paje_dump_buffer (int force) if (!TRACE_is_enabled()) return; XBT_DEBUG("%s: dump until %f. starts", __FUNCTION__, TRACE_last_timestamp_to_dump); if (force){ - paje_event_t event; - unsigned int i; - xbt_dynar_foreach(buffer, i, event){ + for (auto event :buffer){ event->print (event); event->free (event); } - xbt_dynar_free (&buffer); - buffer = xbt_dynar_new (sizeof(paje_event_t), nullptr); + buffer.clear(); }else{ - paje_event_t event; - unsigned int cursor; - xbt_dynar_foreach(buffer, cursor, event) { + std::vector::iterator i = buffer.begin(); + for (auto event :buffer){ double head_timestamp = event->timestamp; - if (head_timestamp > TRACE_last_timestamp_to_dump){ + if (head_timestamp > TRACE_last_timestamp_to_dump) break; - } event->print (event); event->free (event); + ++i; } - xbt_dynar_remove_n_at(buffer, cursor, 0); + buffer.erase(buffer.begin(), i); } XBT_DEBUG("%s: ends", __FUNCTION__); } @@ -107,19 +93,19 @@ static void insert_into_buffer (paje_event_t tbi) } XBT_DEBUG("%s: insert event_type=%d, timestamp=%f, buffersize=%lu)", - __FUNCTION__, (int)tbi->event_type, tbi->timestamp, xbt_dynar_length(buffer)); - - unsigned int i; - for (i = xbt_dynar_length(buffer); i > 0; i--) { - paje_event_t e1 = *(paje_event_t*)xbt_dynar_get_ptr(buffer, i - 1); + __FUNCTION__, (int)tbi->event_type, tbi->timestamp, buffer.size()); + std::vector::reverse_iterator i; + for (i = buffer.rbegin(); i != buffer.rend(); ++i) { + paje_event_t e1 = *i; if (e1->timestamp <= tbi->timestamp) break; } - xbt_dynar_insert_at(buffer, i, &tbi); - if (i == 0) + buffer.insert(i.base(), tbi); + if (i == buffer.rend()) XBT_DEBUG("%s: inserted at beginning", __FUNCTION__); else - XBT_DEBUG("%s: inserted at%s %u", __FUNCTION__, (i == xbt_dynar_length(buffer) - 1 ? " end, pos =" : ""), i); + XBT_DEBUG("%s: inserted at%s %ld", __FUNCTION__, (i == buffer.rbegin()) ? " end" :"pos =", + std::distance(buffer.rend(),i)); } static void free_paje_event (paje_event_t event)