浏览代码

src/debug/traces: fix font color to display in white or black depending on task/tag color

Nathalie Furmento 3 年之前
父节点
当前提交
b41cc60f07
共有 3 个文件被更改,包括 32 次插入17 次删除
  1. 25 10
      src/debug/traces/starpu_fxt.c
  2. 2 2
      src/debug/traces/starpu_fxt.h
  3. 5 5
      src/debug/traces/starpu_fxt_dag.c

+ 25 - 10
src/debug/traces/starpu_fxt.c

@@ -2825,29 +2825,37 @@ static void handle_task_name(struct fxt_ev_64 *ev, struct starpu_fxt_options *op
 
 	const char *color;
 	char buffer[32];
+	int code;
 	if (task->color != 0)
 	{
 		snprintf(buffer, sizeof(buffer), "#%06x", task->color);
 		color = &buffer[0];
+		code = task->color / 256;
 	}
 	else if (options->per_task_colour)
 	{
-		snprintf(buffer, sizeof(buffer), "#%x%x%x",
-			 get_color_symbol_red(name)/4,
-			 get_color_symbol_green(name)/4,
-			 get_color_symbol_blue(name)/4);
+		unsigned red = get_color_symbol_red(name)/4;
+		unsigned green = get_color_symbol_green(name)/4;
+		unsigned blue = get_color_symbol_blue(name)/4;
+		snprintf(buffer, sizeof(buffer), "#%s%x%s%x%s%x",
+			 red < 16 ? "0" : "", red,
+			 green < 16 ? "0" : "", green,
+			 blue < 16 ? "0" : "", blue);
 		color = &buffer[0];
+		code = (red + green + blue) / 256;
 	}
 	else
 	{
 		color= (worker < 0)?"#aaaaaa":get_worker_color(worker);
+		code = 0;
 	}
 
 	if (!task->name)
 		task->name = strdup(name);
 
+	char *fontcolor = code <= 1 ? "white" : "black";
 	if (!task->exclude_from_dag && show_task(task, options))
-		_starpu_fxt_dag_set_task_name(options->file_prefix, job_id, task->name, color);
+		_starpu_fxt_dag_set_task_name(options->file_prefix, job_id, task->name, color, fontcolor);
 }
 
 static void handle_task_line(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
@@ -2899,20 +2907,27 @@ static void handle_tag_done(struct fxt_ev_64 *ev, struct starpu_fxt_options *opt
 
 	const char *color;
 	char buffer[32];
+	int code;
 	if (options->per_task_colour)
 	{
-		snprintf(buffer, sizeof(buffer), "%.4f,%.4f,%.4f",
-			 get_color_symbol_red(name)/1024.0,
-			 get_color_symbol_green(name)/1024.0,
-			 get_color_symbol_blue(name)/1024.0);
+		unsigned red = get_color_symbol_red(name)/4;
+		unsigned green = get_color_symbol_green(name)/4;
+		unsigned blue = get_color_symbol_blue(name)/4;
+		snprintf(buffer, sizeof(buffer), "#%s%x%s%x%s%x",
+			 red < 16 ? "0" : "", red,
+			 green < 16 ? "0" : "", green,
+			 blue < 16 ? "0" : "", blue);
 		color = &buffer[0];
+		code = (red + green + blue) / 256;
 	}
 	else
 	{
 		color= (worker < 0)?"white":get_worker_color(worker);
+		code = 1;
 	}
 
-	_starpu_fxt_dag_set_tag_done(options->file_prefix, tag_id, color);
+	char *fontcolor = code <= 1 ? "white" : "black";
+	_starpu_fxt_dag_set_tag_done(options->file_prefix, tag_id, color, fontcolor);
 }
 
 static void handle_mpi_barrier(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)

+ 2 - 2
src/debug/traces/starpu_fxt.h

@@ -49,10 +49,10 @@ void _starpu_fxt_dag_init(char *dag_filename);
 void _starpu_fxt_dag_terminate(void);
 void _starpu_fxt_dag_add_tag(const char *prefix, uint64_t tag, unsigned long job_id, const char *label);
 void _starpu_fxt_dag_add_tag_deps(const char *prefix, uint64_t child, uint64_t father, const char *label);
-void _starpu_fxt_dag_set_tag_done(const char *prefix, uint64_t tag, const char *color);
+void _starpu_fxt_dag_set_tag_done(const char *prefix, uint64_t tag, const char *color, const char *fontcolor);
 void _starpu_fxt_dag_add_task_deps(const char *prefix, unsigned long dep_prev, unsigned long dep_succ, const char *label);
 void _starpu_fxt_dag_add_task_end_dep(const char *prefix, unsigned long prev, unsigned long succ);
-void _starpu_fxt_dag_set_task_name(const char *prefix, unsigned long job_id, const char *label, const char *color);
+void _starpu_fxt_dag_set_task_name(const char *prefix, unsigned long job_id, const char *label, const char *color, const char *fontcolor);
 void _starpu_fxt_dag_set_task_line(const char *prefix, unsigned long job_id, const char *file, int line);
 void _starpu_fxt_dag_add_send(int src, unsigned long dep_prev, unsigned long tag, unsigned long id);
 void _starpu_fxt_dag_add_receive(int dst, unsigned long dep_prev, unsigned long tag, unsigned long id);

+ 5 - 5
src/debug/traces/starpu_fxt_dag.c

@@ -97,11 +97,11 @@ void _starpu_fxt_dag_add_task_deps(const char *prefix, unsigned long dep_prev, u
 	}
 }
 
-void _starpu_fxt_dag_set_tag_done(const char *prefix, uint64_t tag, const char *color)
+void _starpu_fxt_dag_set_tag_done(const char *prefix, uint64_t tag, const char *color, const char *fontcolor)
 {
 	if (out_file)
-		fprintf(out_file, "\t \"tag_%s%llx\" [ style=filled, fillcolor=\"%s\"]\n",
-			prefix, (unsigned long long)tag, color);
+		fprintf(out_file, "\t \"tag_%s%llx\" [ style=filled, fillcolor=\"%s\", fontcolor=\"%s\"]\n",
+			prefix, (unsigned long long)tag, color, fontcolor);
 }
 
 void _starpu_fxt_dag_add_task_end_dep(const char *prefix, unsigned long prev, unsigned long succ)
@@ -110,10 +110,10 @@ void _starpu_fxt_dag_add_task_end_dep(const char *prefix, unsigned long prev, un
 		fprintf(out_file, "\t \"task_%s%lu\" [ end_dep=\"%lu\"]\n", prefix, prev, succ);
 }
 
-void _starpu_fxt_dag_set_task_name(const char *prefix, unsigned long job_id, const char *label, const char *color)
+void _starpu_fxt_dag_set_task_name(const char *prefix, unsigned long job_id, const char *label, const char *color, const char *fontcolor)
 {
 	if (out_file)
-		fprintf(out_file, "\t \"task_%s%lu\" [ style=filled, label=\"%s\", fillcolor=\"%s\"]\n", prefix, job_id, label, color);
+		fprintf(out_file, "\t \"task_%s%lu\" [ style=filled, label=\"%s\", fillcolor=\"%s\", fontcolor=\"%s\"]\n", prefix, job_id, label, color, fontcolor);
 }
 
 void _starpu_fxt_dag_set_task_line(const char *prefix, unsigned long job_id, const char *file, int line)