summaryrefslogtreecommitdiffstats
path: root/tools/perf/util/svghelper.c
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@linux.intel.com>2009-09-20 18:14:16 +0200
committerIngo Molnar <mingo@elte.hu>2009-09-20 19:37:35 +0200
commit5094b655452dd48367fb28af74ffc76019b93dc2 (patch)
tree72412b375275b943fc417c7e3c55bf50833e9683 /tools/perf/util/svghelper.c
parentperf timechart: Show the duration of scheduler delays in the SVG (diff)
downloadlinux-5094b655452dd48367fb28af74ffc76019b93dc2.tar.xz
linux-5094b655452dd48367fb28af74ffc76019b93dc2.zip
perf util: Make the timechart SVG width dynamic
This patch adds a command line option for timechart that allows the user to specify the width of the SVG file. This patch also makes sure that each second of recording has at least 200 units (pixels at 96 DPI) of width. This impacts recordings longer than 5 seconds; recordings shorter than 5 second will scale up to have a width of 1000 units for the whole recording (as before). Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Cc: Frederic Weisbecker <fweisbec@gmail.com> LKML-Reference: <20090920181416.69570c5d@linux.intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/svghelper.c')
-rw-r--r--tools/perf/util/svghelper.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/tools/perf/util/svghelper.c b/tools/perf/util/svghelper.c
index 52f628fe6421..be1555e241b2 100644
--- a/tools/perf/util/svghelper.c
+++ b/tools/perf/util/svghelper.c
@@ -25,7 +25,8 @@ static u64 turbo_frequency, max_freq;
#define SLOT_MULT 30.0
#define SLOT_HEIGHT 25.0
-#define WIDTH 1000.0
+
+int svg_page_width = 1000;
#define MIN_TEXT_SIZE 0.001
@@ -46,21 +47,35 @@ static double time2pixels(u64 time)
{
double X;
- X = WIDTH * (time - first_time) / (last_time - first_time);
+ X = 1.0 * svg_page_width * (time - first_time) / (last_time - first_time);
return X;
}
-void open_svg(const char *filename, int cpus, int rows)
+void open_svg(const char *filename, int cpus, int rows, u64 start, u64 end)
{
+ int new_width;
svgfile = fopen(filename, "w");
if (!svgfile) {
fprintf(stderr, "Cannot open %s for output\n", filename);
return;
}
+ first_time = start;
+ first_time = first_time / 100000000 * 100000000;
+ last_time = end;
+
+ /*
+ * if the recording is short, we default to a width of 1000, but
+ * for longer recordings we want at least 200 units of width per second
+ */
+ new_width = (last_time - first_time) / 5000000;
+
+ if (new_width > svg_page_width)
+ svg_page_width = new_width;
+
total_height = (1 + rows + cpu2slot(cpus)) * SLOT_MULT;
fprintf(svgfile, "<?xml version=\"1.0\" standalone=\"no\"?> \n");
- fprintf(svgfile, "<svg width=\"%4.1f\" height=\"%llu\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n", WIDTH, total_height);
+ fprintf(svgfile, "<svg width=\"%i\" height=\"%llu\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n", svg_page_width, total_height);
fprintf(svgfile, "<defs>\n <style type=\"text/css\">\n <![CDATA[\n");
@@ -404,15 +419,10 @@ void svg_legenda(void)
svg_legenda_box(800, "Blocked on IO", "blocked");
}
-void svg_time_grid(u64 start, u64 end)
+void svg_time_grid(void)
{
u64 i;
- first_time = start;
- last_time = end;
-
- first_time = first_time / 100000000 * 100000000;
-
if (!svgfile)
return;