Zbigniew Jędrzejewski-Szmek 930e1b
From 319b9f00eb3d84744453ae70bf9c89c37131124b Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 930e1b
From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
Zbigniew Jędrzejewski-Szmek 930e1b
Date: Fri, 1 Nov 2013 22:57:47 +0100
Zbigniew Jędrzejewski-Szmek 930e1b
Subject: [PATCH] analyze: plot: place the text on the side with most space
Zbigniew Jędrzejewski-Szmek 930e1b
Zbigniew Jędrzejewski-Szmek 930e1b
Set the width of the svg to always fit the longest string
Zbigniew Jędrzejewski-Szmek 930e1b
while taking its starting position into consideration.
Zbigniew Jędrzejewski-Szmek 930e1b
Zbigniew Jędrzejewski-Szmek 930e1b
Place the text on the right while the starting point is
Zbigniew Jędrzejewski-Szmek 930e1b
in the first half of the screen. After that we put it on
Zbigniew Jędrzejewski-Szmek 930e1b
the left to save the svg from being wider that it has to.
Zbigniew Jędrzejewski-Szmek 930e1b
---
Zbigniew Jędrzejewski-Szmek 930e1b
 src/analyze/systemd-analyze.c | 29 +++++++++++++++++------------
Zbigniew Jędrzejewski-Szmek 930e1b
 1 file changed, 17 insertions(+), 12 deletions(-)
Zbigniew Jędrzejewski-Szmek 930e1b
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/src/analyze/systemd-analyze.c b/src/analyze/systemd-analyze.c
Zbigniew Jędrzejewski-Szmek 930e1b
index 9a69795..f4c7f68 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/src/analyze/systemd-analyze.c
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/src/analyze/systemd-analyze.c
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -462,7 +462,7 @@ static int analyze_plot(DBusConnection *bus) {
Zbigniew Jędrzejewski-Szmek 930e1b
                 m++;
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
         for (u = times; u < times + n; u++) {
Zbigniew Jędrzejewski-Szmek 930e1b
-                double len;
Zbigniew Jędrzejewski-Szmek 930e1b
+                double text_start, text_width;
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
                 if (u->ixt < boot->userspace_time ||
Zbigniew Jędrzejewski-Szmek 930e1b
                     u->ixt > boot->finish_time) {
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -470,10 +470,14 @@ static int analyze_plot(DBusConnection *bus) {
Zbigniew Jędrzejewski-Szmek 930e1b
                         u->name = NULL;
Zbigniew Jędrzejewski-Szmek 930e1b
                         continue;
Zbigniew Jędrzejewski-Szmek 930e1b
                 }
Zbigniew Jędrzejewski-Szmek 930e1b
-                len = ((boot->firmware_time + u->ixt) * SCALE_X)
Zbigniew Jędrzejewski-Szmek 930e1b
-                        + (10.0 * strlen(u->name));
Zbigniew Jędrzejewski-Szmek 930e1b
-                if (len > width)
Zbigniew Jędrzejewski-Szmek 930e1b
-                        width = len;
Zbigniew Jędrzejewski-Szmek 930e1b
+
Zbigniew Jędrzejewski-Szmek 930e1b
+                /* If the text cannot fit on the left side then
Zbigniew Jędrzejewski-Szmek 930e1b
+                 * increase the svg width so it fits on the right.
Zbigniew Jędrzejewski-Szmek 930e1b
+                 * TODO: calculate the text width more accurately */
Zbigniew Jędrzejewski-Szmek 930e1b
+                text_width = 8.0 * strlen(u->name);
Zbigniew Jędrzejewski-Szmek 930e1b
+                text_start = (boot->firmware_time + u->ixt) * SCALE_X;
Zbigniew Jędrzejewski-Szmek 930e1b
+                if (text_width > text_start && text_width + text_start > width)
Zbigniew Jędrzejewski-Szmek 930e1b
+                        width = text_width + text_start;
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
                 if (u->iet > u->ixt && u->iet <= boot->finish_time
Zbigniew Jędrzejewski-Szmek 930e1b
                                 && u->aet == 0 && u->axt == 0)
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -561,7 +565,7 @@ static int analyze_plot(DBusConnection *bus) {
Zbigniew Jędrzejewski-Szmek 930e1b
         svg_bar("active", boot->userspace_time, boot->finish_time, y);
Zbigniew Jędrzejewski-Szmek 930e1b
         svg_bar("generators", boot->generators_start_time, boot->generators_finish_time, y);
Zbigniew Jędrzejewski-Szmek 930e1b
         svg_bar("unitsload", boot->unitsload_start_time, boot->unitsload_finish_time, y);
Zbigniew Jędrzejewski-Szmek 930e1b
-        svg_text("left", boot->userspace_time, y, "systemd");
Zbigniew Jędrzejewski-Szmek 930e1b
+        svg_text(true, boot->userspace_time, y, "systemd");
Zbigniew Jędrzejewski-Szmek 930e1b
         y++;
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
         for (u = times; u < times + n; u++) {
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -575,7 +579,8 @@ static int analyze_plot(DBusConnection *bus) {
Zbigniew Jędrzejewski-Szmek 930e1b
                 svg_bar("active",       u->aet, u->axt, y);
Zbigniew Jędrzejewski-Szmek 930e1b
                 svg_bar("deactivating", u->axt, u->iet, y);
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
-                b = u->ixt * SCALE_X > width * 2 / 3;
Zbigniew Jędrzejewski-Szmek 930e1b
+                /* place the text on the left if we have passed the half of the svg width */
Zbigniew Jędrzejewski-Szmek 930e1b
+                b = u->ixt * SCALE_X < width / 2;
Zbigniew Jędrzejewski-Szmek 930e1b
                 if (u->time)
Zbigniew Jędrzejewski-Szmek 930e1b
                         svg_text(b, u->ixt, y, "%s (%s)",
Zbigniew Jędrzejewski-Szmek 930e1b
                                  u->name, format_timespan(ts, sizeof(ts), u->time, USEC_PER_MSEC));
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -587,19 +592,19 @@ static int analyze_plot(DBusConnection *bus) {
Zbigniew Jędrzejewski-Szmek 930e1b
         /* Legend */
Zbigniew Jędrzejewski-Szmek 930e1b
         y++;
Zbigniew Jędrzejewski-Szmek 930e1b
         svg_bar("activating", 0, 300000, y);
Zbigniew Jędrzejewski-Szmek 930e1b
-        svg_text("right", 400000, y, "Activating");
Zbigniew Jędrzejewski-Szmek 930e1b
+        svg_text(true, 400000, y, "Activating");
Zbigniew Jędrzejewski-Szmek 930e1b
         y++;
Zbigniew Jędrzejewski-Szmek 930e1b
         svg_bar("active", 0, 300000, y);
Zbigniew Jędrzejewski-Szmek 930e1b
-        svg_text("right", 400000, y, "Active");
Zbigniew Jędrzejewski-Szmek 930e1b
+        svg_text(true, 400000, y, "Active");
Zbigniew Jędrzejewski-Szmek 930e1b
         y++;
Zbigniew Jędrzejewski-Szmek 930e1b
         svg_bar("deactivating", 0, 300000, y);
Zbigniew Jędrzejewski-Szmek 930e1b
-        svg_text("right", 400000, y, "Deactivating");
Zbigniew Jędrzejewski-Szmek 930e1b
+        svg_text(true, 400000, y, "Deactivating");
Zbigniew Jędrzejewski-Szmek 930e1b
         y++;
Zbigniew Jędrzejewski-Szmek 930e1b
         svg_bar("generators", 0, 300000, y);
Zbigniew Jędrzejewski-Szmek 930e1b
-        svg_text("right", 400000, y, "Generators");
Zbigniew Jędrzejewski-Szmek 930e1b
+        svg_text(true, 400000, y, "Generators");
Zbigniew Jędrzejewski-Szmek 930e1b
         y++;
Zbigniew Jędrzejewski-Szmek 930e1b
         svg_bar("unitsload", 0, 300000, y);
Zbigniew Jędrzejewski-Szmek 930e1b
-        svg_text("right", 400000, y, "Loading unit files");
Zbigniew Jędrzejewski-Szmek 930e1b
+        svg_text(true, 400000, y, "Loading unit files");
Zbigniew Jędrzejewski-Szmek 930e1b
         y++;
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
         svg("</g>\n\n");