#include "src/instr/instr_private.h"
#include "xbt/virtu.h" /* sg_cmdline */
+#include <sstream>
+#include <iomanip> /** std::setprecision **/
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_paje_trace, instr_trace, "tracing event system");
void TRACE_paje_init(void)
{
- active_writer.print_DefineContainerType=print_pajeDefineContainerType;
- active_writer.print_DefineVariableType=print_pajeDefineVariableType;
- active_writer.print_DefineStateType=print_pajeDefineStateType;
- active_writer.print_DefineEventType=print_pajeDefineEventType;
- active_writer.print_DefineLinkType=print_pajeDefineLinkType;
- active_writer.print_DefineEntityValue=print_pajeDefineEntityValue;
- active_writer.print_CreateContainer=print_pajeCreateContainer;
- active_writer.print_DestroyContainer=print_pajeDestroyContainer;
- active_writer.print_SetVariable=print_pajeSetVariable;
- active_writer.print_AddVariable=print_pajeAddVariable;
- active_writer.print_SubVariable=print_pajeSubVariable;
- active_writer.print_SetState=print_pajeSetState;
- active_writer.print_PushState=print_pajePushState;
- active_writer.print_PopState=print_pajePopState;
- active_writer.print_ResetState=print_pajeResetState;
- active_writer.print_StartLink=print_pajeStartLink;
- active_writer.print_EndLink=print_pajeEndLink;
- active_writer.print_NewEvent=print_pajeNewEvent;
+ active_writer.print_DefineContainerType = print_pajeDefineContainerType;
+ active_writer.print_DefineVariableType = print_pajeDefineVariableType;
+ active_writer.print_DefineStateType = print_pajeDefineStateType;
+ active_writer.print_DefineEventType = print_pajeDefineEventType;
+ active_writer.print_DefineLinkType = print_pajeDefineLinkType;
+ active_writer.print_DefineEntityValue = print_pajeDefineEntityValue;
+ active_writer.print_CreateContainer = print_pajeCreateContainer;
+ active_writer.print_DestroyContainer = print_pajeDestroyContainer;
+ active_writer.print_SetVariable = print_pajeSetVariable;
+ active_writer.print_AddVariable = print_pajeAddVariable;
+ active_writer.print_SubVariable = print_pajeSubVariable;
+ active_writer.print_SetState = print_pajeSetState;
+ active_writer.print_PushState = print_pajePushState;
+ active_writer.print_PopState = print_pajePopState;
+ active_writer.print_ResetState = print_pajeResetState;
+ active_writer.print_StartLink = print_pajeStartLink;
+ active_writer.print_EndLink = print_pajeEndLink;
+ active_writer.print_NewEvent = print_pajeNewEvent;
}
void TRACE_paje_start(void)
{
XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event->event_type, TRACE_precision(),
event->timestamp);
- if (!TRACE_display_sizes()){
- if (event->timestamp == 0){
- fprintf(tracing_file, "%d 0 %s %s %s\n", (int)event->event_type, ((pushState_t)event->data)->type->id,
- ((pushState_t)event->data)->container->id, ((pushState_t)event->data)->value->id);
- }else{
- fprintf(tracing_file, "%d %.*f %s %s %s\n", (int)event->event_type, TRACE_precision(), event->timestamp,
- ((pushState_t)event->data)->type->id, ((pushState_t)event->data)->container->id,
- ((pushState_t)event->data)->value->id);
+
+ std::stringstream stream;
+ stream << std::fixed << std::setprecision(TRACE_precision());
+
+ stream << (int) event->event_type
+ << " ";
+
+ /** prevent 0.0000 in the trace - this was the behavior before the transition to c++ **/
+ if (event->timestamp == 0)
+ stream << 0;
+ else
+ stream << event->timestamp;
+
+ stream << " " << ((pushState_t)event->data)->type->id
+ << " " << ((pushState_t)event->data)->container->id
+ << " " << ((pushState_t)event->data)->value->id;
+
+ if (TRACE_display_sizes()) {
+ stream << " ";
+ if (((pushState_t)event->data)->extra != NULL) {
+ stream << ((instr_extra_data)((pushState_t)event->data)->extra)->send_size;
}
- }else{
- if (event->timestamp == 0){
- fprintf(tracing_file, "%d 0 %s %s %s ", (int)event->event_type, ((pushState_t)event->data)->type->id,
- ((pushState_t)event->data)->container->id, ((pushState_t)event->data)->value->id);
- if(((pushState_t)event->data)->extra !=NULL){
- fprintf(tracing_file, "%d ", ((instr_extra_data)((pushState_t)event->data)->extra)->send_size);
- }else{
- fprintf(tracing_file, "0 ");
- }
- fprintf(tracing_file, "\n");
-
- }else{
- fprintf(tracing_file, "%d %.*f %s %s %s ", (int)event->event_type, TRACE_precision(), event->timestamp,
- ((pushState_t)event->data)->type->id, ((pushState_t)event->data)->container->id,
- ((pushState_t)event->data)->value->id);
- if(((pushState_t)event->data)->extra !=NULL){
- fprintf(tracing_file, "%d ", ((instr_extra_data)((pushState_t)event->data)->extra)->send_size);
- }else{
- fprintf(tracing_file, "0 ");
- }
- fprintf(tracing_file, "\n");
+ else {
+ stream << 0;
}
}
+ stream << std::endl;
+
+ // TODO: This can be removed as soon as TRACE_paje_start() has been migrated
+ fprintf(tracing_file, "%s", stream.str().c_str());
+
if(((pushState_t)event->data)->extra!=NULL){
if(((instr_extra_data)((pushState_t)event->data)->extra)->sendcounts!=NULL)
xbt_free(((instr_extra_data)((pushState_t)event->data)->extra)->sendcounts);