diff options
Diffstat (limited to 'tools/perf/util')
-rw-r--r-- | tools/perf/util/svghelper.c | 30 | ||||
-rw-r--r-- | tools/perf/util/svghelper.h | 6 |
2 files changed, 24 insertions, 12 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; diff --git a/tools/perf/util/svghelper.h b/tools/perf/util/svghelper.h index ed4ebcfaf493..cd93195aedb3 100644 --- a/tools/perf/util/svghelper.h +++ b/tools/perf/util/svghelper.h @@ -3,7 +3,7 @@ #include "types.h" -extern void open_svg(const char *filename, int cpus, int rows); +extern void open_svg(const char *filename, int cpus, int rows, u64 start, u64 end); extern void svg_box(int Yslot, u64 start, u64 end, const char *type); extern void svg_sample(int Yslot, int cpu, u64 start, u64 end); extern void svg_waiting(int Yslot, u64 start, u64 end); @@ -15,7 +15,7 @@ extern void svg_cstate(int cpu, u64 start, u64 end, int type); extern void svg_pstate(int cpu, u64 start, u64 end, u64 freq); -extern void svg_time_grid(u64 start, u64 end); +extern void svg_time_grid(void); extern void svg_legenda(void); extern void svg_wakeline(u64 start, int row1, int row2); extern void svg_partial_wakeline(u64 start, int row1, char *desc1, int row2, char *desc2); @@ -23,4 +23,6 @@ extern void svg_interrupt(u64 start, int row); extern void svg_text(int Yslot, u64 start, const char *text); extern void svg_close(void); +extern int svg_page_width; + #endif |