X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b30f00857843f1cee60814ed519ff82e8ef4787..6760cb07d6b57be16928d95339d71e57c4e24f36:/src/instr/msg_task_instr.c diff --git a/src/instr/msg_task_instr.c b/src/instr/msg_task_instr.c index 41583bb456..090fa9d2e4 100644 --- a/src/instr/msg_task_instr.c +++ b/src/instr/msg_task_instr.c @@ -1,25 +1,20 @@ -/* - * msg.c - * - * Created on: Nov 24, 2009 - * Author: Lucas Schnorr - * License: 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. - * - * Copyright (c) 2009 The SimGrid team. - */ +/* Copyright (c) 2010. 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 "instr/private.h" -#include "instr/config.h" #ifdef HAVE_TRACING +static xbt_dict_t task_containers = NULL; static xbt_dict_t current_task_category = NULL; void __TRACE_msg_init (void) { current_task_category = xbt_dict_new(); + task_containers = xbt_dict_new(); } void __TRACE_current_category_set (m_task_t task) @@ -45,22 +40,47 @@ char *__TRACE_current_category_get (smx_process_t proc) void __TRACE_task_location (m_task_t task) { + if (!IS_TRACING_TASKS) return; char container[200]; m_process_t process = MSG_process_self(); m_host_t host = MSG_process_get_host (process); - if (IS_TRACING_PROCESSES){ - //container is a process - TRACE_process_alias_container (process, host, container, 200); - __TRACE_msg_process_location (process); - }else{ - //container is a host - TRACE_host_container (host, container, 200); - } + + //tasks are grouped by host + TRACE_host_container (host, container, 200); char name[200], alias[200]; TRACE_task_container (task, name, 200); TRACE_task_alias_container (task, process, host, alias, 200); - if (IS_TRACING_TASKS) pajeCreateContainer (MSG_get_clock(), alias, "TASK", container, name); + //check if task container is already created + if (!xbt_dict_get_or_null (task_containers, alias)){ + pajeCreateContainer (MSG_get_clock(), alias, "TASK", container, name); + pajeSetState (MSG_get_clock(), "category", alias, task->category); + xbt_dict_set (task_containers, xbt_strdup(alias), xbt_strdup("1"), xbt_free); + } +} + +void __TRACE_task_location_present (m_task_t task) +{ + if (!IS_TRACING_TASKS) return; + //updating presence state of this task location + m_process_t process = MSG_process_self(); + m_host_t host = MSG_process_get_host (process); + + char alias[200]; + TRACE_task_alias_container (task, process, host, alias, 200); + pajePushState (MSG_get_clock(), "presence", alias, "presence"); +} + +void __TRACE_task_location_not_present (m_task_t task) +{ + if (!IS_TRACING_TASKS) return; + //updating presence state of this task location + m_process_t process = MSG_process_self(); + m_host_t host = MSG_process_get_host (process); + + char alias[200]; + TRACE_task_alias_container (task, process, host, alias, 200); + pajePopState (MSG_get_clock(), "presence", alias); } /* @@ -74,14 +94,15 @@ void TRACE_msg_set_task_category(m_task_t task, const char *category) task->category = xbt_new (char, strlen (category)+1); strncpy(task->category, category, strlen(category)+1); - char name[200];//, alias[200], process_alias[200]; + //tracing task location based on host + __TRACE_task_location (task); + __TRACE_task_location_present (task); + + char name[200]; TRACE_task_container (task, name, 200); //create container of type "task" to indicate behavior if (IS_TRACING_TASKS) pajeCreateContainer (MSG_get_clock(), name, "task", category, name); if (IS_TRACING_TASKS) pajePushState (MSG_get_clock(), "task-state", name, "created"); - - //tracing task location based on process/host - __TRACE_task_location (task); } /* MSG_task_create related function*/ @@ -124,6 +145,9 @@ void TRACE_msg_task_destroy (m_task_t task) TRACE_task_container (task, name, 200); if (IS_TRACING_TASKS) pajeDestroyContainer (MSG_get_clock(), "task", name); + //finish the location of this task + __TRACE_task_location_not_present (task); + //free category xbt_free (task->category); return; @@ -143,8 +167,10 @@ void TRACE_msg_task_get_end (double start_time, m_task_t task) TRACE_task_container (task, name, 200); if (IS_TRACING_TASKS) pajePopState (MSG_get_clock(), "task-state", name); - //tracing task location based on process/host + __TRACE_msg_volume_finish (task); + __TRACE_task_location (task); + __TRACE_task_location_present (task); } /* MSG_task_put related functions */ @@ -157,6 +183,12 @@ int TRACE_msg_task_put_start (m_task_t task) if (IS_TRACING_TASKS) pajePopState (MSG_get_clock(), "task-state", name); if (IS_TRACING_TASKS) pajePushState (MSG_get_clock(), "task-state", name, "communicate"); + __TRACE_msg_volume_start (task); + + //trace task location grouped by host + __TRACE_task_location_not_present (task); + + //set current category __TRACE_current_category_set (task); return 1; }