From: schnorr Date: Wed, 22 Dec 2010 13:45:09 +0000 (+0000) Subject: [trace] fix on link type creation (was indexed by type name, but should consider... X-Git-Tag: v3.6_beta2~622 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/79e3d33446c085a27dd70273a74f90dc930408fe [trace] fix on link type creation (was indexed by type name, but should consider source and dest) details: - small re-organization of the code, type declaration is made on get function if the type the caller is looking for is not found git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9303 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/instr/instr_msg_process.c b/src/instr/instr_msg_process.c index 3a78475d80..f5f22138d4 100644 --- a/src/instr/instr_msg_process.c +++ b/src/instr/instr_msg_process.c @@ -44,7 +44,7 @@ void TRACE_msg_set_process_category(m_process_t process, const char *category, c container_t msg = newContainer(process->name, INSTR_MSG_PROCESS, host_container); type_t type = getType (category); if (!type){ - type = newVariableType(category, TYPE_VARIABLE, color, msg->type); + type = getVariableType(category, color, msg->type); } pajeSetVariable(SIMIX_get_clock(), type->id, msg->id, "1"); diff --git a/src/instr/instr_msg_task.c b/src/instr/instr_msg_task.c index 9796fbcd20..73018afec4 100644 --- a/src/instr/instr_msg_task.c +++ b/src/instr/instr_msg_task.c @@ -54,7 +54,7 @@ void TRACE_msg_set_task_category(m_task_t task, const char *category) msg = newContainer(task->name, INSTR_MSG_TASK, host_container); type_t type = getType (task->category); if (!type){ - type = newVariableType(task->category, TYPE_VARIABLE, NULL, msg->type); + type = getVariableType(task->category, NULL, msg->type); } pajeSetVariable(SIMIX_get_clock(), type->id, msg->id, "1"); diff --git a/src/instr/instr_private.h b/src/instr/instr_private.h index 63ce9902e2..d5df639e6f 100644 --- a/src/instr/instr_private.h +++ b/src/instr/instr_private.h @@ -219,11 +219,11 @@ void TRACE_sd_task_destroy(SD_task_t task); /* instr_routing.c */ container_t newContainer (const char *name, e_container_types kind, container_t father); container_t getContainer (const char *name); -type_t newContainerType (const char *typename, e_entity_types kind, type_t father); -type_t newEventType (const char *typename, e_entity_types kind, const char *color, type_t father); -type_t newVariableType (const char *typename, e_entity_types kind, const char *color, type_t father); -type_t newLinkType (const char *typename, e_entity_types kind, type_t father, type_t source, type_t dest); -type_t newStateType (const char *typename, e_entity_types kind, type_t father); +type_t getContainerType (const char *name, type_t father); +type_t getEventType (const char *name, const char *color, type_t father); +type_t getVariableType (const char *name, const char *color, type_t father); +type_t getLinkType (const char *name, type_t father, type_t source, type_t dest); +type_t getStateType (const char *name, type_t father); type_t getType (const char *name); void destroyContainer (container_t container); void instr_routing_define_callbacks (void); diff --git a/src/instr/instr_routing.c b/src/instr/instr_routing.c index e490915eec..a0fef4290c 100644 --- a/src/instr/instr_routing.c +++ b/src/instr/instr_routing.c @@ -38,7 +38,7 @@ static long long int newTypeId () return counter++; } -static type_t newType (const char *typename, e_entity_types kind, type_t father) +static type_t newType (const char *typename, const char *key, e_entity_types kind, type_t father) { type_t ret = xbt_new0(s_type_t, 1); ret->name = xbt_strdup (typename); @@ -52,107 +52,80 @@ static type_t newType (const char *typename, e_entity_types kind, type_t father) ret->id = xbt_strdup (str_id); if (father != NULL){ - xbt_dict_set (father->children, typename, ret, NULL); + xbt_dict_set (father->children, key, ret, NULL); } return ret; } -type_t newContainerType (const char *typename, e_entity_types kind, type_t father) -{ - type_t ret = newType (typename, kind, father); -// if (father) INFO4("ContainerType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id); - if (father) pajeDefineContainerType(ret->id, ret->father->id, ret->name); - return ret; -} - -type_t newEventType (const char *typename, e_entity_types kind, const char *color, type_t father) -{ - type_t ret = newType (typename, kind, father); -// INFO4("EventType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id); - if (color){ - pajeDefineEventTypeWithColor (ret->id, ret->father->id, ret->name, color); - }else{ - pajeDefineEventType(ret->id, ret->father->id, ret->name); - } - return ret; -} - -type_t newVariableType (const char *typename, e_entity_types kind, const char *color, type_t father) -{ - type_t ret = newType (typename, kind, father); -// INFO4("VariableType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id); - if (color){ - pajeDefineVariableTypeWithColor(ret->id, ret->father->id, ret->name, color); - }else{ - pajeDefineVariableType(ret->id, ret->father->id, ret->name); - } - return ret; -} - -type_t newLinkType (const char *typename, e_entity_types kind, type_t father, type_t source, type_t dest) -{ - type_t ret = newType (typename, kind, father); -// INFO8("LinkType %s(%s), child of %s(%s) %s(%s)->%s(%s)", ret->name, ret->id, father->name, father->id, source->name, source->id, dest->name, dest->id); - pajeDefineLinkType(ret->id, ret->father->id, source->id, dest->id, ret->name); - return ret; -} - -type_t newStateType (const char *typename, e_entity_types kind, type_t father) -{ - type_t ret = newType (typename, kind, father); -// INFO4("StateType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id); - pajeDefineStateType(ret->id, ret->father->id, ret->name); - return ret; -} - -static type_t getContainerType (const char *typename, type_t father) +type_t getContainerType (const char *typename, type_t father) { type_t ret; if (father == NULL){ - ret = newContainerType (typename, TYPE_CONTAINER, father); + ret = newType (typename, typename, TYPE_CONTAINER, father); + if (father) pajeDefineContainerType(ret->id, ret->father->id, ret->name); rootType = ret; }else{ //check if my father type already has my typename ret = (type_t)xbt_dict_get_or_null (father->children, typename); if (ret == NULL){ - ret = newContainerType (typename, TYPE_CONTAINER, father); + ret = newType (typename, typename, TYPE_CONTAINER, father); + pajeDefineContainerType(ret->id, ret->father->id, ret->name); } } return ret; } -static type_t getEventType (const char *typename, const char *color, type_t father) +type_t getEventType (const char *typename, const char *color, type_t father) { type_t ret = xbt_dict_get_or_null (father->children, typename); if (ret == NULL){ - ret = newEventType (typename, TYPE_EVENT, color, father); + ret = newType (typename, typename, TYPE_EVENT, father); + //INFO4("EventType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id); + if (color){ + pajeDefineEventTypeWithColor (ret->id, ret->father->id, ret->name, color); + }else{ + pajeDefineEventType(ret->id, ret->father->id, ret->name); + } } return ret; } -static type_t getVariableType (const char *typename, const char *color, type_t father) +type_t getVariableType (const char *typename, const char *color, type_t father) { type_t ret = xbt_dict_get_or_null (father->children, typename); if (ret == NULL){ - ret = newVariableType (typename, TYPE_VARIABLE, color, father); + ret = newType (typename, typename, TYPE_VARIABLE, father); + //INFO4("VariableType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id); + if (color){ + pajeDefineVariableTypeWithColor(ret->id, ret->father->id, ret->name, color); + }else{ + pajeDefineVariableType(ret->id, ret->father->id, ret->name); + } } return ret; } -static type_t getLinkType (const char *typename, type_t father, type_t source, type_t dest) +type_t getLinkType (const char *typename, type_t father, type_t source, type_t dest) { - type_t ret = xbt_dict_get_or_null (father->children, typename); + //FIXME should check using source and dest here and not by the typename (g5k example) + char key[INSTR_DEFAULT_STR_SIZE]; + snprintf (key, INSTR_DEFAULT_STR_SIZE, "%s-%s-%s", typename, source->id, dest->id); + type_t ret = xbt_dict_get_or_null (father->children, key); if (ret == NULL){ - ret = newLinkType (typename, TYPE_LINK, father, source, dest); + ret = newType (typename, key, TYPE_LINK, father); + //INFO8("LinkType %s(%s), child of %s(%s) %s(%s)->%s(%s)", ret->name, ret->id, father->name, father->id, source->name, source->id, dest->name, dest->id); + pajeDefineLinkType(ret->id, ret->father->id, source->id, dest->id, ret->name); } return ret; } -static type_t getStateType (const char *typename, type_t father) +type_t getStateType (const char *typename, type_t father) { type_t ret = xbt_dict_get_or_null (father->children, typename); if (ret == NULL){ - ret = newStateType (typename, TYPE_STATE, father); + ret = newType (typename, typename, TYPE_STATE, father); + //INFO4("StateType %s(%s), child of %s(%s)", ret->name, ret->id, father->name, father->id); + pajeDefineStateType(ret->id, ret->father->id, ret->name); } return ret; }