X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6c725f32eed3a110db5d27da26da9d66ef692674..2d5602695d43f174ff8e47f6e3c92a5f7b9790b8:/src/instr/instr_routing.c diff --git a/src/instr/instr_routing.c b/src/instr/instr_routing.c index b866969aa3..7860792b16 100644 --- a/src/instr/instr_routing.c +++ b/src/instr/instr_routing.c @@ -57,7 +57,7 @@ static type_t newType (const char *typename, e_entity_types kind, type_t father) return ret; } -static type_t newContainerType (const char *typename, e_entity_types kind, type_t father) +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); @@ -65,7 +65,19 @@ static type_t newContainerType (const char *typename, e_entity_types kind, type_ return ret; } -static type_t newVariableType (const char *typename, e_entity_types kind, const char *color, type_t father) +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); @@ -77,7 +89,7 @@ static type_t newVariableType (const char *typename, e_entity_types kind, const return ret; } -static type_t newLinkType (const char *typename, e_entity_types kind, type_t father, type_t source, type_t dest) +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); @@ -85,7 +97,7 @@ static type_t newLinkType (const char *typename, e_entity_types kind, type_t fat return ret; } -static type_t newStateType (const char *typename, e_entity_types kind, type_t father) +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); @@ -109,6 +121,15 @@ static type_t getContainerType (const char *typename, type_t father) return ret; } +static 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); + } + return ret; +} + static type_t getVariableType (const char *typename, const char *color, type_t father) { type_t ret = xbt_dict_get_or_null (father->children, typename); @@ -191,13 +212,14 @@ container_t newContainer (const char *name, e_container_types kind, container_t case INSTR_LINK: new->type = getContainerType ("LINK", new->father->type); break; case INSTR_ROUTER: new->type = getContainerType ("ROUTER", new->father->type); break; case INSTR_SMPI: new->type = getContainerType ("MPI", new->father->type); break; + case INSTR_MSG: new->type = getContainerType ("MSG", new->father->type); break; default: xbt_die ("Congratulations, you have found a bug on newContainer function of instr_routing.c"); break; } } new->children = xbt_dict_new(); if (new->father){ xbt_dict_set(new->father->children, new->name, new, NULL); - pajeCreateContainer (0, new->id, new->type->id, new->father->id, new->name); + pajeCreateContainer (SIMIX_get_clock(), new->id, new->type->id, new->father->id, new->name); } //register hosts, routers, links containers @@ -236,6 +258,25 @@ container_t getContainer (const char *name) return recursiveGetContainer(name, rootContainer); } +static type_t recursiveGetType (const char *name, type_t root) +{ + if (strcmp (root->name, name) == 0) return root; + + xbt_dict_cursor_t cursor = NULL; + type_t child; + char *child_name; + xbt_dict_foreach(root->children, cursor, child_name, child) { + type_t ret = recursiveGetType(name, child); + if (ret) return ret; + } + return NULL; +} + +type_t getType (const char *name) +{ + return recursiveGetType (name, rootType); +} + void destroyContainer (container_t container) { //remove me from my father @@ -469,6 +510,10 @@ static void instr_routing_parse_start_host () getLinkType ("MPI_LINK", rootType, mpi, mpi); } } + + if (TRACE_msg_process_is_enabled()) { + getContainerType("MSG", new->type); + } } static void instr_routing_parse_end_host ()