#define OPT_TRACING_MSG_PROCESS "tracing/msg/process"
#define OPT_TRACING_MSG_VOLUME "tracing/msg/volume"
#define OPT_TRACING_FILENAME "tracing/filename"
+#define OPT_TRACING_PLATFORM_METHOD "tracing/platform/method"
static int trace_configured = 0;
return xbt_cfg_get_string (_surf_cfg_set, OPT_TRACING_FILENAME);
}
+char *_TRACE_platform_method (void)
+{
+ return xbt_cfg_get_string (_surf_cfg_set, OPT_TRACING_PLATFORM_METHOD);
+}
+
void TRACE_global_init(int *argc, char **argv)
{
/* name of the tracefile */
xbt_cfgelm_int, &default_tracing_platform, 0, 1,
NULL, NULL);
+ /* platform method */
+ char *default_tracing_platform_method = xbt_strdup ("b");
+ xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_PLATFORM_METHOD,
+ "Tracing method used to register categorized resource behavior.",
+ xbt_cfgelm_string, &default_tracing_platform_method, 1, 1,
+ NULL, NULL);
+
/* msg task */
int default_tracing_msg_task = 0;
xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_TASK,
#define VARIABLE_SEPARATOR '#'
-#define METHOD_B
-
-#ifdef METHOD_B
+//B
static xbt_dict_t last_platform_variables; /* to control the amount of add/sub variables events:
dict with key {RESOURCE_NAME}#Time or {RESOURCE_NAME}#Value of dict with variables types == string */
-#endif //METHOD_B
-#ifdef METHOD_C
+//C
static xbt_dict_t method_c_dict;
-#endif // METHOD_C
/* auxiliary function for resource utilization tracing */
static char *strsplit (char *input, int field, char del) //caller should free the returned string
return ret;
}
-#ifdef METHOD_A
+//resource utilization tracing method
+typedef enum {methodA,methodB,methodC} TracingMethod;
+static TracingMethod currentMethod;
+
+static void __TRACE_define_method (char *method)
+{
+ if (!strcmp(method, "a")){
+ currentMethod = methodA;
+ }else if (!strcmp(method, "b")){
+ currentMethod = methodB;
+ }else if (!strcmp(method, "c")){
+ currentMethod = methodC;
+ }else{
+ currentMethod = methodB; //default
+ }
+}
+
+//A
static void __TRACE_surf_resource_utilization_A (double now, double delta, const char *variable, const char *resource, double value)
{
if (!IS_TRACING_PLATFORM) return;
pajeSubVariable (now+delta, variable, resource, valuestr);
return;
}
-#endif //METHOD_A
-#ifdef METHOD_B
+//B
static void __TRACE_surf_resource_utilization_initialize_B ()
{
last_platform_variables = xbt_dict_new();
}
}
}
-#endif //METHOD_B
-
-#ifdef METHOD_C
+//C
static void __TRACE_surf_resource_utilization_start_C (smx_action_t action)
{
char key[100];
{
xbt_dict_free (&method_c_dict);
}
-#endif //METHOD_C
-
-
/*
* TRACE_surf_link_set_utilization: entry point from SimGrid
*/
void __TRACE_surf_resource_utilization_start (smx_action_t action)
{
-#ifdef METHOD_C
- __TRACE_surf_resource_utilization_start_C (action);
-#endif
+ if (currentMethod == methodC){
+ __TRACE_surf_resource_utilization_start_C (action);
+ }
}
void __TRACE_surf_resource_utilization_end (smx_action_t action)
{
-#ifdef METHOD_C
- __TRACE_surf_resource_utilization_end_C (action);
-#endif
+ if (currentMethod == methodC){
+ __TRACE_surf_resource_utilization_end_C (action);
+ }
}
void __TRACE_surf_resource_utilization_event (smx_action_t action, double now, double delta, const char *variable, const char *resource, double value)
{
-#ifdef METHOD_A
- __TRACE_surf_resource_utilization_A (now, delta, variable, resource, value);
-#else
- #ifdef METHOD_B
- __TRACE_surf_resource_utilization_B (now, delta, variable, resource, value);
- #else
- #ifdef METHOD_C
+ if (currentMethod == methodA){
+ __TRACE_surf_resource_utilization_A (now, delta, variable, resource, value);
+ }else if (currentMethod == methodB){
+ __TRACE_surf_resource_utilization_B (now, delta, variable, resource, value);
+ }else if (currentMethod == methodC){
__TRACE_surf_resource_utilization_C (action, now, delta, variable, resource, value);
- #endif
- #endif
-#endif
+ }
}
void __TRACE_surf_resource_utilization_initialize ()
{
-#ifdef METHOD_A
-#else
- #ifdef METHOD_B
- __TRACE_surf_resource_utilization_initialize_B();
- #else
- #ifdef METHOD_C
+ __TRACE_define_method (_TRACE_platform_method());
+
+ if (currentMethod == methodA){
+ }else if (currentMethod == methodB){
+ __TRACE_surf_resource_utilization_initialize_B();
+ }else if (currentMethod == methodC){
__TRACE_surf_resource_utilization_initialize_C();
- #endif
- #endif
-#endif
+ }
}
void __TRACE_surf_resource_utilization_finalize ()
{
-#ifdef METHOD_A
-#else
- #ifdef METHOD_B
- __TRACE_surf_resource_utilization_finalize_B();
- #else
- #ifdef METHOD_C
+ if (currentMethod == methodA){
+ }else if (currentMethod == methodB){
+ __TRACE_surf_resource_utilization_finalize_B();
+ }else if (currentMethod == methodC){
__TRACE_surf_resource_utilization_finalize_C();
- #endif
- #endif
-#endif
+ }
}
-
-
#endif